]> git.lyx.org Git - lyx.git/blob - src/frontends/screen.h
namespace grfx -> lyx::graphics
[lyx.git] / src / frontends / screen.h
1 // -*- C++ -*-
2 /**
3  * \file screen.h
4  * This file is part of LyX, the document processor.
5  * Licence details can be found in the file COPYING.
6  *
7  * \author unknown
8  * \author John Levon
9  *
10  * Full author contact details are available in file CREDITS
11  */
12
13 #ifndef SCREEN_H
14 #define SCREEN_H
15
16 #include "RowList.h"
17
18 class LyXText;
19 class LyXCursor;
20 class WorkArea;
21 class BufferView;
22
23 /**
24  * LyXScreen - document rendering management
25  *
26  * This class is used to manage the on-screen rendering inside the
27  * work area; it is responsible for deciding which LyXText rows
28  * need re-drawing.
29  *
30  * This class will arrange for LyXText to paint onto a pixmap
31  * provided by the WorkArea widget.
32  *
33  * The blinking cursor is also handled here.
34  */
35 class LyXScreen {
36 public:
37         LyXScreen();
38
39         virtual ~LyXScreen();
40
41         /**
42          * draw the screen from a given position
43          * @param y the text position to draw from
44          *
45          * Uses as much of the already printed pixmap as possible
46          */
47         virtual void draw(LyXText *, BufferView *, unsigned int y) = 0;
48
49         /**
50          * fit the cursor onto the visible work area, scrolling if necessary
51          * @param bv the buffer view
52          * @param vheight the height of the visible region
53          * @param base_y the top of the lyxtext to look at
54          * @param x the new x position
55          * @param y the new y position
56          * @param a ascent of the cursor's row
57          * @param d descent of the cursor's row
58          * @return true if the work area needs scrolling as a result
59          */
60         bool fitManualCursor(BufferView * bv, LyXText * text,
61                 int x, int y, int a, int d);
62
63         /// redraw the screen, without using existing pixmap
64         virtual void redraw(LyXText *, BufferView *);
65
66         /**
67          * topCursorVisible - get a new "top" to make the cursor visible
68          * in a LyXText
69          *
70          * This helper function calculates a new y co-ordinate for
71          * the top of the containing region such that the cursor contained
72          * within the LyXText is "nicely" visible.
73          */
74         virtual unsigned int topCursorVisible(LyXText *);
75
76         /**
77          * fitCursor - fit the cursor onto the work area
78          * @param text the text containing the cursor
79          * @param bv the bufferview
80          * @return true if a change was necessary
81          *
82          * Scrolls the screen so that the cursor is visible
83          */
84         virtual bool fitCursor(LyXText *, BufferView *);
85
86         /**
87          * update - update part of the screen rendering
88          * @param bv the bufferview
89          * @param xo the x offset into the text
90          * @param yo the x offset into the text
91          *
92          * Updates part of the screen. If bv->text->status is
93          * LyXText::REFRESH_AREA, we update from the
94          * point of change and to the end of the screen.
95          * If text->status is LyXText::REFRESH_ROW,
96          * we only update the current row.
97          */
98         virtual void update(BufferView & bv, int yo = 0, int xo = 0);
99
100         /// hide the visible cursor, if it is visible
101         void hideCursor();
102         
103         /// show the cursor if it is not visible
104         void showCursor(BufferView & bv);
105
106         /// toggle the cursor's visibility
107         void toggleCursor(BufferView & bv);
108
109         /// FIXME
110         virtual void toggleSelection(LyXText *, BufferView *, bool = true,
111                              int y_offset = 0, int x_offset = 0);
112
113         /// FIXME - at least change the name !!
114         virtual void toggleToggle(LyXText *, BufferView *,
115                           int y_offset = 0, int x_offset = 0);
116
117 protected:
118         /// cause the display of the given area of the work area
119         virtual void expose(int x, int y, int w, int h) = 0;
120
121         /// get the work area
122         virtual WorkArea & workarea() const = 0;
123
124         /// types of cursor in work area
125         enum Cursor_Shape {
126                 /// normal I-beam
127                 BAR_SHAPE,
128                 /// L-shape for locked insets of a different language
129                 L_SHAPE,
130                 /// reverse L-shape for RTL text
131                 REVERSED_L_SHAPE
132         };
133
134         /// paint the cursor and store the background
135         virtual void showCursor(int x, int y, int h, Cursor_Shape shape) = 0;
136
137         /// hide the cursor
138         virtual void removeCursor() = 0;
139
140         /// y1 and y2 are coordinates of the screen
141         void drawFromTo(LyXText *, BufferView *, int y1, int y2,
142                         int y_offset = 0, int x_offset = 0);
143
144         /// y is a coordinate of the text
145         void drawOneRow(LyXText *, BufferView *,
146                         RowList::iterator row,
147                         int y_text, int y_offset = 0, int x_offset = 0);
148
149 private:
150         /// grey out (no buffer)
151         void greyOut();
152
153         /// is the cursor currently displayed
154         bool cursor_visible_;
155
156         /// is the screen displaying text or the splash screen?
157         bool greyed_out_;
158 };
159
160 #endif // SCREEN_H