X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fscreen.h;h=d0d3dc741e4f455fbd76a4ea5e70419e2f07aac9;hb=39ec3d0eb81f6e3ade7bc183f7590f3a0bcd6cf7;hp=b1c8dba237df1f940439b3ccd1a544b732d295a6;hpb=92e53dc01bc00bef85c9b523841b2649cc96f970;p=lyx.git diff --git a/src/frontends/screen.h b/src/frontends/screen.h index b1c8dba237..d0d3dc741e 100644 --- a/src/frontends/screen.h +++ b/src/frontends/screen.h @@ -1,128 +1,94 @@ // -*- C++ -*- -/* This file is part of - * ====================================================== +/** + * \file screen.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * - * LyX, The Document Processor + * \author unknown + * \author John Levon * - * Copyright 1995 Matthias Ettrich - * Copyright 1995-2001 The LyX Team - * - * ====================================================== */ - -#ifndef LYXSCREEN_H -#define LYXSCREEN_H - -#ifdef __GNUG__ -#pragma interface -#endif + * Full author contact details are available in file CREDITS. + */ -#include +#ifndef SCREEN_H +#define SCREEN_H class LyXText; +class CursorSlice; class WorkArea; -class Buffer; class BufferView; -struct Row; - -/** The class LScreen is used for the main Textbody. - Concretely, the screen is held in a pixmap. This pixmap is kept up to - date and used to optimize drawing on the screen. - This class also handles the drawing of the cursor and partly the selection. +/** + * 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 + * need re-drawing. + * + * This class will arrange for LyXText to paint onto a pixmap + * provided by the WorkArea widget. + * + * 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_; - /// Returns a new top so that the cursor is visible - unsigned int topCursorVisible(LyXText const *); - /// 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