]> git.lyx.org Git - features.git/blob - src/rowpainter.h
The inset newline patch I sent plus the requisite fixes. I couldn't reproduce a problem.
[features.git] / src / rowpainter.h
1 /**
2  * \file rowpainter.h
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author various
7  * \author John Levon
8  *
9  * Full author contact details are available in file CREDITS
10  */
11
12 #ifndef ROWPAINTER_H
13 #define ROWPAINTER_H
14
15 #include <config.h>
16
17 #include "LString.h"
18 #include "support/types.h"
19
20 class LyXText;
21 class BufferView;
22 class Row;
23 class Paragraph;
24 class Painter;
25 class LyXFont;
26 class VSpace;
27
28 /**
29  * A class used for painting an individual row of text.
30  */
31 class RowPainter {
32 public:
33         /// initialise painter
34         RowPainter(BufferView const & bv, LyXText const & text, Row const & row);
35
36         /// paint the row. Returns true if CHANGED_IN_DRAW (e.g. image was loaded)
37         bool paint(int y_offset, int x_offset, int y, bool cleared = false);
38
39 private:
40         // paint various parts
41         bool paintBackground();
42         void paintSelection();
43         void paintAppendix();
44         void paintDepthBar();
45         void paintChangeBar();
46         void paintFirst();
47         void paintLast();
48         void paintForeignMark(float const orig_x, LyXFont const & orig_font);
49         void paintHebrewComposeChar(lyx::pos_type & vpos);
50         void paintArabicComposeChar(lyx::pos_type & vpos);
51         void paintChars(lyx::pos_type & vpos, bool hebrew, bool arabic);
52         int paintPageBreak(string const & label, int y);
53         int paintLengthMarker(string const & prefix, VSpace const & vsp, int start);
54         /// returns true when CHANGED_IN_DRAW
55         bool paintText();
56         /// returns true when CHANGED_IN_DRAW
57         bool paintFromPos(lyx::pos_type & vpos);
58         /// returns true when CHANGED_IN_DRAW
59         bool paintInset(lyx::pos_type const pos);
60
61         /// return left margin
62         int leftMargin() const;
63
64         /// return the font at the given pos
65         LyXFont const getFont(lyx::pos_type pos) const;
66
67         /// return the label font for this row
68         LyXFont const getLabelFont() const;
69
70         char const transformChar(char c, lyx::pos_type pos) const;
71
72         /// return pixel width for the given pos
73         int singleWidth(lyx::pos_type pos) const;
74         int singleWidth(lyx::pos_type pos, char c) const;
75
76         /// bufferview to paint on
77         BufferView const & bv_;
78
79         /// Painter to use
80         Painter & pain_;
81
82         /// LyXText for the row
83         LyXText const & text_;
84
85         /// The row to paint
86         Row const & row_;
87
88         /// Row's paragraph
89         Paragraph const & par_;
90
91         // Looks ugly - is
92         int xo_;
93         int yo_;
94         float x_;
95         int y_;
96         bool cleared_;
97         int width_;
98         float separator_;
99         float hfill_;
100         float label_hfill_;
101 };
102
103 /// return the pixel height of a space marker before/after a par
104 int getLengthMarkerHeight(BufferView const & bv, VSpace const & vsp);
105
106 #endif // ROWPAINTER_H