]> git.lyx.org Git - lyx.git/blob - src/frontends/screen.h
* screen.[Ch]: merge update() and repaint()
[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(BufferView & bv);
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         /// hide the visible cursor, if it is visible
87         void hideCursor();
88         
89         /// show the cursor if it is not visible
90         void showCursor(BufferView & bv);
91
92         /// toggle the cursor's visibility
93         void toggleCursor(BufferView & bv);
94
95         /// FIXME
96         virtual void toggleSelection(LyXText *, BufferView *, bool = true,
97                              int y_offset = 0, int x_offset = 0);
98
99 protected:
100         /// cause the display of the given area of the work area
101         virtual void expose(int x, int y, int w, int h) = 0;
102
103         /// get the work area
104         virtual WorkArea & workarea() const = 0;
105
106         /// types of cursor in work area
107         enum Cursor_Shape {
108                 /// normal I-beam
109                 BAR_SHAPE,
110                 /// L-shape for locked insets of a different language
111                 L_SHAPE,
112                 /// reverse L-shape for RTL text
113                 REVERSED_L_SHAPE
114         };
115
116         /// paint the cursor and store the background
117         virtual void showCursor(int x, int y, int h, Cursor_Shape shape) = 0;
118
119         /// hide the cursor
120         virtual void removeCursor() = 0;
121
122         /// y1 and y2 are coordinates of the screen
123         void drawFromTo(LyXText *, BufferView *, int y1, int y2,
124                         int y_offset = 0, int x_offset = 0);
125
126 private:
127         /// grey out (no buffer)
128         void greyOut();
129
130         /// is the cursor currently displayed
131         bool cursor_visible_;
132
133         /// is the screen displaying text or the splash screen?
134         bool greyed_out_;
135 };
136
137 #endif // SCREEN_H