]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/screen.h
Introduce LFUN_PRINT.
[lyx.git] / src / frontends / screen.h
index 378d9d991e7936b352caf4e64f40c4ab4fcc2906..d0d3dc741e4f455fbd76a4ea5e70419e2f07aac9 100644 (file)
@@ -1,32 +1,25 @@
 // -*- C++ -*-
 /**
  * \file screen.h
- * Copyright 1995-2002 the LyX Team
- * Read the file COPYING
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
  *
  * \author unknown
- * \author John Levon <moz@compsoc.man.ac.uk>
- */ 
-
-#ifndef LYXSCREEN_H
-#define LYXSCREEN_H
-
-#ifdef __GNUG__
-#pragma interface
-#endif
+ * \author John Levon
+ *
+ * Full author contact details are available in file CREDITS.
+ */
 
-#include <X11/Xlib.h>
+#ifndef SCREEN_H
+#define SCREEN_H
 
 class LyXText;
-class LyXCursor;
+class CursorSlice;
 class WorkArea;
-class Buffer;
 class BufferView;
 
-struct Row;
-
 /**
- * LScreen - document rendering management
+ * LyXScreen - document rendering management
  *
  * This class is used to manage the on-screen rendering inside the
  * work area; it is responsible for deciding which LyXText rows
@@ -37,108 +30,65 @@ struct Row;
  *
  * The blinking cursor is also handled here.
  */
-class LScreen {
+class LyXScreen {
 public:
-       ///
+       LyXScreen();
+
+       virtual ~LyXScreen();
+
+       /// redraw the screen, without using existing pixmap
+       virtual void redraw(BufferView & bv);
+
+       /**
+        * fitCursor - fit the cursor onto the work area
+        * @param bv the bufferview
+        * @return true if a change was necessary
+        *
+        * Scrolls the screen so that the cursor is visible
+        */
+       virtual bool fitCursor(BufferView *);
+
+       /// hide the visible cursor, if it is visible
+       void hideCursor();
+
+       /// show the cursor if it is not visible
+       void showCursor(BufferView & bv);
+
+       /// toggle the cursor's visibility
+       void toggleCursor(BufferView & bv);
+
+protected:
+       /// cause the display of the given area of the work area
+       virtual void expose(int x, int y, int w, int h) = 0;
+
+       /// get the work area
+       virtual WorkArea & workarea() const = 0;
+
+       /// types of cursor in work area
        enum Cursor_Shape {
-               ///
+               /// normal I-beam
                BAR_SHAPE,
-               ///
+               /// L-shape for locked insets of a different language
                L_SHAPE,
-               ///
+               /// reverse L-shape for RTL text
                REVERSED_L_SHAPE
        };
 
-       ///
-       LScreen(WorkArea &);
-
-       ///
-       ~LScreen();
+       /// paint the cursor and store the background
+       virtual void showCursor(int x, int y, int h, Cursor_Shape shape) = 0;
 
-       void reset();
-       /// Sets the cursor color to LColor::cursor.
-       void setCursorColor();
+       /// hide the cursor
+       virtual void removeCursor() = 0;
 
-       /** Draws the screen form textposition y. Uses as much of
-           the already printed pixmap as possible */
-       void draw(LyXText *, BufferView *, unsigned int y);
+private:
+       /// grey out (no buffer)
+       void greyOut();
 
-       /// Redraws the screen, without using existing pixmap
-       void redraw(LyXText *, BufferView *);
+       /// is the cursor currently displayed
+       bool cursor_visible_;
 
-       /**
-        * topCursorVisible - get a new "top" to make the cursor visible
-        * @param c the cursor
-        * @param top_y the current y location of the containing region
-        *
-        * This helper function calculates a new y co-ordinate for
-        * the top of the containing region such that the cursor contained
-        * within the LyXText is "nicely" visible.
-        */ 
-       unsigned int topCursorVisible(LyXCursor const & c, int top_y);
-       /// Redraws the screen such that the cursor is visible
-       bool fitCursor(LyXText *, BufferView *);
-       ///
-       void showCursor(LyXText const *, BufferView const *);
-       ///
-       void hideCursor();
-       ///
-       void cursorToggle(BufferView *) const;
-       ///
-       void showManualCursor(LyXText const *, int x, int y,
-                             int asc, int desc,
-                             Cursor_Shape shape);
-       /// returns 1 if first has changed, otherwise 0
-       bool fitManualCursor(LyXText *, BufferView *, int, int, int, int);
-       ///
-       void toggleSelection(LyXText *, BufferView *, bool = true,
-                            int y_offset = 0, int x_offset = 0);
-       ///
-       void toggleToggle(LyXText *, BufferView *,
-                         int y_offset = 0, int x_offset = 0);
-
-       /** Updates part of the screen. If text->status is
-           LyXText::NEED_MORE_REFRESH, we update from the
-           point of change and to the end of the screen.
-           If text->status is LyXText::NEED_VERY_LITTLE_REFRESH,
-           we only update the current row. */
-       void update(LyXText *, BufferView *, int y_offset=0, int x_offset=0);
-       ///
-       bool forceClear() const { return force_clear; }
-
-       ///
-       bool cursor_visible;
-private:
-       /// Copies specified area of pixmap to screen
-       void expose(int x, int y, int exp_width, int exp_height);
-
-       /// y1 and y2 are coordinates of the screen
-       void drawFromTo(LyXText *, BufferView *, int y1, int y2,
-                       int y_offset = 0, int x_offset = 0, bool internal=false);
-
-       /// y is a coordinate of the text
-       void drawOneRow(LyXText *, BufferView *, Row * row,
-                       int y_text, int y_offset = 0, int x_offset = 0);
-
-       ///
-       WorkArea & owner;
-
-       ///
-       Pixmap cursor_pixmap;
-       ///
-       int cursor_pixmap_x;
-       ///
-       int cursor_pixmap_y;
-       ///
-       int cursor_pixmap_w;
-       ///
-       int cursor_pixmap_h;
-       ///
-       GC gc_copy;
-       ///
-       bool force_clear;
+       /// is the screen displaying text or the splash screen?
+       bool greyed_out_;
 };
 
-#endif
+#endif // SCREEN_H