]> git.lyx.org Git - lyx.git/blob - src/mathed/math_xdata.h
enable direct input of #1...#9; some whitespace changes
[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         /// bounding box of this cell
57         void boundingBox(int & xlow, int & xhigh, int & ylow, int & yhigh);
58         /// find best position to do things
59         //void findPos(PosFinder &) const;
60
61         /// begin iterator of the underlying MathArray
62         const_iterator begin() const { return data_.begin(); }
63         /// end iterator of the underlying MathArray
64         const_iterator end() const { return data_.end(); }
65         
66 public:
67         /// the underlying MathArray
68         MathArray data_;
69         /// cached width of cell
70         mutable int width_;
71         /// cached ascent of cell
72         mutable int ascent_;
73         /// cached descent of cell
74         mutable int descent_;
75         /// cached x coordinate of last drawing
76         mutable int xo_;
77         /// cached y coordinate of last drawing
78         mutable int yo_;
79         /// cache size information of last drawing
80         mutable MathMetricsInfo size_;
81 };
82
83 /// output cell on a stream
84 std::ostream & operator<<(std::ostream & os, MathXArray const & ar);
85
86 #endif