]> git.lyx.org Git - lyx.git/blob - src/mathed/math_xdata.h
deep iterators for math insets;
[lyx.git] / src / mathed / math_xdata.h
1 // -*- C++ -*-
2
3 #ifndef MATHEDXARRAY_H
4 #define MATHEDXARRAY_H
5
6 #include <iosfwd>
7
8 #include "math_data.h"
9 #include "math_metricsinfo.h"
10
11 #ifdef __GNUG__
12 #pragma interface
13 #endif
14
15 class Painter;
16
17
18 /** This class extends a MathArray by drawing routines and caches for
19  * metric information.
20  */
21 class MathXArray
22 {
23 public:
24         /// type for positions and sizes
25         typedef MathArray::size_type       size_type;
26         /// const iterator into the underlying MathArray
27         typedef MathArray::const_iterator  const_iterator;
28
29         /// constructor
30         MathXArray();
31         /// rebuild cached metrics information
32         void metrics(MathMetricsInfo const & st) const;
33         /// redraw cell using cache metrics information
34         void draw(Painter & pain, int x, int y) const;
35
36         /// access to cached x coordinate of last drawing
37         int xo() const { return xo_; }
38         /// access to cached y coordinate of last drawing
39         int yo() const { return yo_; }
40         /// returns x coordinate of given position in the array
41         int pos2x(size_type pos) const;
42         /// returns position of given x coordinate
43         size_type x2pos(int pos) const;
44         /// returns distance of this cell to the point given by x and y
45         // assumes valid position and size cache
46         int dist(int x, int y) const;
47
48         /// ascent of this cell above the baseline
49         int ascent() const { return ascent_; }
50         /// descent of this cell below the baseline
51         int descent() const { return descent_; }
52         /// height of the cell
53         int height() const { return ascent_ + descent_; }
54         /// width of this cell
55         int width() const { return width_; }
56         /// do we cover point(x, y)?
57         bool covers(int x, int y) const;
58         /// bounding box of this cell
59         void boundingBox(int & xlow, int & xhigh, int & ylow, int & yhigh);
60         /// find best position to do things
61         //void findPos(PosFinder &) const;
62
63         /// begin iterator of the underlying MathArray
64         const_iterator begin() const { return data_.begin(); }
65         /// end iterator of the underlying MathArray
66         const_iterator end() const { return data_.end(); }
67         
68 public:
69         /// the underlying MathArray
70         MathArray data_;
71         /// cached width of cell
72         mutable int width_;
73         /// cached ascent of cell
74         mutable int ascent_;
75         /// cached descent of cell
76         mutable int descent_;
77         /// cached x coordinate of last drawing
78         mutable int xo_;
79         /// cached y coordinate of last drawing
80         mutable int yo_;
81         /// cache size information of last drawing
82         mutable MathMetricsInfo size_;
83 };
84
85 /// output cell on a stream
86 std::ostream & operator<<(std::ostream & os, MathXArray const & ar);
87
88 #endif