X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxscreen.h;h=f611e8a6e118411a27a5f9c955c68c1dc611a5d7;hb=98c966c64594611e469313314abd1e59524adb4a;hp=9d60bf11c869d4f8fd2eb53b34a073aa5b53493d;hpb=a040c0bc6f017d0591bbc7ad1aa590589dbc40ff;p=lyx.git diff --git a/src/lyxscreen.h b/src/lyxscreen.h index 9d60bf11c8..f611e8a6e1 100644 --- a/src/lyxscreen.h +++ b/src/lyxscreen.h @@ -1,11 +1,11 @@ // -*- C++ -*- /* This file is part of - * ====================================================== - * + * ====================================================== + * * LyX, The Document Processor - * - * Copyright 1995 Matthias Ettrich - * Copyright 1995-1999 The LyX Team + * + * Copyright 1995 Matthias Ettrich + * Copyright 1995-2001 The LyX Team * * ====================================================== */ @@ -16,13 +16,14 @@ #pragma interface #endif -#include FORMS_H_LOCATION #include -#include "lyxdraw.h" class LyXText; +class WorkArea; +class Buffer; +class BufferView; + struct Row; -typedef unsigned short Dimension; /** The class LyXScreen is used for the main Textbody. Concretely, the screen is held in a pixmap. This pixmap is kept up to @@ -32,123 +33,80 @@ typedef unsigned short Dimension; class LyXScreen { public: /// - LyXScreen(Window window, - Dimension width, - Dimension height, - Dimension offset_x, - Dimension offset_y, - LyXText *text_ptr); + enum Cursor_Shape { + /// + BAR_SHAPE, + /// + L_SHAPE, + /// + REVERSED_L_SHAPE + }; + + /// + LyXScreen(WorkArea &); + /// ~LyXScreen(); - /** Return the forground pixmap. This function is a _hack_, - we should be rid of it as soon as possible. But to do that - a lot in the mathcode and the figinset has to be rewritten. - Tasks for 0.13. */ - Pixmap getForeground() { return foreground; }; - + /// Sets the cursor color to LColor::cursor. + void setCursorColor(); + /** Draws the screen form textposition y. Uses as much of - the already printed pixmap as possible */ - void Draw(long y ); + the already printed pixmap as possible */ + void draw(LyXText *, BufferView *, unsigned int y); /// Redraws the screen, without using existing pixmap - void Redraw(); - + void redraw(LyXText *, BufferView *); + /// Returns a new top so that the cursor is visible - long TopCursorVisible(); + unsigned int topCursorVisible(LyXText const *); /// Redraws the screen such that the cursor is visible - int FitCursor(); + bool fitCursor(LyXText *, BufferView *); /// - void ShowCursor(); + void showCursor(LyXText const *, BufferView const *); /// - void HideCursor(); + void hideCursor(); /// - void CursorToggle(); + void cursorToggle(BufferView *) const; /// - void ShowManualCursor(long x, long y, int asc, int desc); - /// - void HideManualCursor(long x, long y, int asc, int desc); + void showManualCursor(LyXText const *, int x, int y, + int asc, int desc, + Cursor_Shape shape); /// returns 1 if first has changed, otherwise 0 - int FitManualCursor(long, long, int, int); + bool fitManualCursor(LyXText *, BufferView *, int, int, int, int); /// - void ToggleSelection(bool = true); + void toggleSelection(LyXText *, BufferView *, bool = true, + int y_offset = 0, int x_offset = 0); /// - void ToggleToggle(); - - /** 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(); + void toggleToggle(LyXText *, BufferView *, + int y_offset = 0, int x_offset = 0); - /** Updates part of the screen. Updates till row with cursor, - or only current row */ - void SmallUpdate(); - - /** Functions for drawing into the LyXScreen. The number of - drawing functions should be minimized, now there - is too many. And also there is mixed X and XForms drawing - functions called. Not good. */ - void drawPoint(GC gc, int x, int y); - /// - void drawLine(gc_type t, int baseline, int x, int length); - /// - void drawLine(GC gc, int a, int b, int c, int d); - /// - void drawLines(GC gc, XPoint *p, int np); - /// - void drawVerticalLine(gc_type t, int x, int y1, int y2); - /// - void drawOnOffLine(int baseline, int x, int length); - /// - void drawThickLine(int baseline, int x, int length); - /// - void drawTableLine(int baseline, int x, int length, bool on_off); - /// - void drawVerticalTableLine(int x, int y1, int y2, bool on_off); - /// - void drawVerticalOnOffLine(int x, int y1, int y2); - /// - void drawArc(GC gc, int x, int y, - unsigned int w, unsigned int h, - int a1, int a2); - /// - void drawSegments(GC gc, XSegment *s, int ns); - /// - void fillRectangle(gc_type t, int, int, int, int); - /// - void drawRectangle(gc_type t, int x, int y, int width, int height); - /// - void drawFrame(int ft, int x, int y, int w, int h, - FL_COLOR col, int b); - /// - int drawText(LyXFont const &font, char const*, - int n, int baseline, int x); + /** 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); /// - int drawString(LyXFont const &font, string const &str, - int baseline, int x); - - /// first visible pixel-row - long first; + 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); + void expose(int x, int y, int exp_width, int exp_height); /// y1 and y2 are coordinates of the screen - void DrawFromTo(int y1, int y2); - + 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(Row* row, long &y_text); + void drawOneRow(LyXText *, BufferView *, Row * row, + int y_text, int y_offset = 0, int x_offset = 0); /// - LyXText *text; + WorkArea & owner; - /// - Pixmap foreground; /// Pixmap cursor_pixmap; /// @@ -160,131 +118,9 @@ private: /// int cursor_pixmap_h; /// - Window _window; - /// - Dimension _width; - /// - Dimension _height; - /// - Dimension _offset_x; + GC gc_copy; /// - Dimension _offset_y; - /// - long screen_refresh_y; - /// - Row *screen_refresh_row; - /// - friend class InsetFormula; + bool force_clear; }; -// Some of the easy to inline draw methods: - -inline void LyXScreen::drawPoint(GC gc, int x, int y) -{ - XDrawPoint(fl_display, foreground, gc, - x, y); -} - - -inline void LyXScreen::drawLine(GC gc, int a, int b, int c, int d) -{ - XDrawLine(fl_display, foreground, gc, a, b, c, d); -} - - -inline void LyXScreen::drawLine(gc_type t, int baseline, int x, int length) -{ - drawLine(getGC(t), x, baseline, x + length, baseline); -} - - -inline void LyXScreen::drawLines(GC gc, XPoint *p, int np) -{ - XDrawLines(fl_display, foreground, gc, p, np, CoordModeOrigin); -} - - -inline void LyXScreen::drawVerticalLine(gc_type t, int x, int y1, int y2) -{ - drawLine(getGC(t), - x, - y1, - x, - y2); -} - - -inline void LyXScreen::drawOnOffLine(int baseline, int x, int length) -{ - drawLine(getGC(gc_on_off_line), - x, - baseline, - x + length, - baseline); -} - - -inline void LyXScreen::drawThickLine(int baseline, int x, int length) -{ - drawLine(getGC(gc_thick_line), - x, - baseline, - x + length, - baseline); -} - - -inline void LyXScreen::drawVerticalOnOffLine(int x, int y1, int y2) -{ - drawLine(getGC(gc_fill), - x, - y1, - x, - y2); -} - - -inline void LyXScreen::drawArc(GC gc, int x, int y, - unsigned int w, unsigned int h, - int a1, int a2) -{ - XDrawArc(fl_display, foreground, gc, - x, y, - w, h, a1, a2); -} - - -inline void LyXScreen::drawSegments(GC gc, XSegment *s, int ns) -{ - XDrawSegments(fl_display, foreground, gc, s, ns); -} - - -inline void LyXScreen::fillRectangle(gc_type t, int a, int b, int c, int d) -{ - XFillRectangle(fl_display, foreground, getGC(t), - a, b, c, d); -} - - -inline void LyXScreen::drawRectangle(gc_type t, int x, int y, int width, int height) -{ - XDrawRectangle(fl_display, foreground, getGC(t), - x, y, width, height); -} - - -inline int LyXScreen::drawText(LyXFont const &font, char const*fs, - int n, int baseline, int x) -{ - return font.drawText(fs, n, foreground, baseline, x); -} - - -inline int LyXScreen::drawString(LyXFont const &font, string const &str, - int baseline, int x) -{ - return font.drawString(str, foreground, baseline, x); -} - #endif