9 #include "math_metricsinfo.h"
10 #include "dimension.h"
16 class MathPainterInfo;
20 /** This class extends a MathArray by drawing routines and caches for
26 /// type for positions and sizes
27 typedef MathArray::size_type size_type;
28 /// const iterator into the underlying MathArray
29 typedef MathArray::const_iterator const_iterator;
31 // helper structure for external metrics computations as done
36 /// first position of this row
38 /// last position of this row plus one
40 /// y offset relative to yo
42 /// dimensions of this row
44 /// glue between words
50 /// rebuild cached metrics information
51 Dimension const & metrics(MathMetricsInfo & mi) const;
52 /// rebuild cached metrics information
53 void metricsExternal(MathMetricsInfo & mi, std::vector<Dimension> &) const;
54 /// redraw cell using cache metrics information
55 void draw(MathPainterInfo & pi, int x, int y) const;
56 /// redraw cell using external metrics information
57 void drawExternal(MathPainterInfo & pi, int x, int y,
58 std::vector<MathXArray::Row> const &) const;
59 /// rebuild cached metrics information
60 Dimension const & metricsT(TextMetricsInfo const & mi) const;
61 /// redraw cell using cache metrics information
62 void drawT(TextPainter & pi, int x, int y) const;
63 /// mark cell for re-drawing
66 /// access to cached x coordinate of last drawing
67 int xo() const { return xo_; }
68 /// access to cached y coordinate of last drawing
69 int yo() const { return yo_; }
70 /// access to cached x coordinate of mid point of last drawing
71 int xm() const { return xo_ + dim_.w / 2; }
72 /// access to cached y coordinate of mid point of last drawing
73 int ym() const { return yo_ + (dim_.d - dim_.a) / 2; }
74 /// returns x coordinate of given position in the array
75 int pos2x(size_type pos) const;
76 /// returns position of given x coordinate
77 int pos2x(size_type pos1, size_type pos2, int glue) const;
78 /// returns position of given x coordinate
79 size_type x2pos(int pos) const;
80 /// returns distance of this cell to the point given by x and y
81 // assumes valid position and size cache
82 int dist(int x, int y) const;
84 /// ascent of this cell above the baseline
85 int ascent() const { return dim_.a; }
86 /// descent of this cell below the baseline
87 int descent() const { return dim_.d; }
88 /// height of the cell
89 int height() const { return dim_.a + dim_.d; }
90 /// width of this cell
91 int width() const { return dim_.w; }
92 /// dimensions of cell
93 Dimension const & dim() const { return dim_; }
94 /// bounding box of this cell
95 void boundingBox(int & xlow, int & xhigh, int & ylow, int & yhigh);
96 /// find best position to do things
97 //void findPos(PosFinder &) const;
98 /// gives center coordinates
99 void center(int & x, int & y) const;
100 /// adjust (x,y) to point on boundary on a straight line from the center
101 void towards(int & x, int & y) const;
103 /// begin iterator of the underlying MathArray
104 const_iterator begin() const { return data_.begin(); }
105 /// end iterator of the underlying MathArray
106 const_iterator end() const { return data_.end(); }
108 MathArray const & data() const { return data_; }
110 MathArray & data() { return data_; }
113 /// the underlying MathArray
115 /// cached dimensions of cell
116 mutable Dimension dim_;
117 /// cached x coordinate of last drawing
119 /// cached y coordinate of last drawing
121 /// cache size information of last drawing
122 mutable MathMetricsInfo size_;
123 /// cached cleaness of cell
125 /// cached draw status of cell
129 /// output cell on a stream
130 std::ostream & operator<<(std::ostream & os, MathXArray const & ar);