From ff3c643f091dce5671c03336ccacd30bbde51c07 Mon Sep 17 00:00:00 2001 From: Abdelrazak Younes Date: Thu, 2 Nov 2006 22:53:10 +0000 Subject: [PATCH] - restore a backing pixmap painting strategy: the pixmap is drawn at expose() time. - the cursor is still a widget, the width is 2-pixel on Windows and 1-pixel on other platforms. The full screen refresh on blinking cursor bug is now gone. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@15695 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/frontends/qt4/GuiWorkArea.C | 83 ++++++++++++++------------------- src/frontends/qt4/GuiWorkArea.h | 13 ++---- 2 files changed, 39 insertions(+), 57 deletions(-) diff --git a/src/frontends/qt4/GuiWorkArea.C b/src/frontends/qt4/GuiWorkArea.C index 749e849765..fb8a25df25 100644 --- a/src/frontends/qt4/GuiWorkArea.C +++ b/src/frontends/qt4/GuiWorkArea.C @@ -39,7 +39,6 @@ #include #include #include -#include #include #include @@ -50,8 +49,10 @@ // On windows-XP the UserGuide PageDown scroll test is faster without event pruning (16 s) // than with it (23 s). #ifdef Q_WS_WIN +int const CursorWidth = 2; #define USE_EVENT_PRUNING 0 #else +int const CursorWidth = 1; #define USE_EVENT_PRUNING 0 #endif @@ -120,7 +121,7 @@ public: CursorWidget(QWidget * parent) : QWidget(parent) { - resize(2, 20); + resize(CursorWidth, 20); } void paintEvent(QPaintEvent *) @@ -165,10 +166,16 @@ public: } */ } - /// shown? - bool on_; /// CursorShape shape_; + /// + bool show_hcursor_; + /// + bool show_vcursor_; + /// + bool lshape_cursor_; + /// + QColor cursor_color_; }; @@ -496,6 +503,7 @@ void GuiWorkArea::mouseDoubleClickEvent(QMouseEvent * e) void GuiWorkArea::resizeEvent(QResizeEvent * ev) { cursor_->hide(); + screen_ = QPixmap(ev->size().width(), ev->size().height()); verticalScrollBar()->setPageStep(viewport()->height()); QAbstractScrollArea::resizeEvent(ev); resizeBufferView(); @@ -554,64 +562,45 @@ void GuiWorkArea::doGreyOut(QLPainter & pain) void GuiWorkArea::paintEvent(QPaintEvent * ev) { - /* - lyxerr[Debug::GUI] << BOOST_CURRENT_FUNCTION - << "\n QWidget width\t" << this->width() - << "\n QWidget height\t" << this->height() - << "\n viewport width\t" << viewport()->width() - << "\n viewport height\t" << viewport()->height() - << "\n QPaintEvent x\t" << e->rect().x() - << "\n QPaintEvent y\t" << e->rect().y() - << "\n QPaintEvent w\t" << e->rect().width() - << "\n QPaintEvent h\t" << e->rect().height() - << endl; - */ - QRect const rc = ev->rect(); - //lyxerr << "paintEvent begin: x: " << rc.x() - // << " y: " << rc.y() - // << " w: " << rc.width() - // << " h: " << rc.height() << endl; + lyxerr[Debug::PAINTING] << "paintEvent begin: x: " << rc.x() + << " y: " << rc.y() + << " w: " << rc.width() + << " h: " << rc.height() << endl; - if (!buffer_view_) { - lyxerr << "no bufferview" << endl; - return; - } - - QLPainter pain(viewport()); - - if (rc.width() == 3) { // FIXME HACK - // Assume splash screen drawing is requested when - // width == 3 - lyxerr << "splash screen requested" << endl; - doGreyOut(pain); - return; - } - - if (!buffer_view_->buffer()) { - lyxerr << "no buffer: " << endl; - doGreyOut(pain); - updateScrollbar(); - return; - } - - //lyxerr << "real drawing" << endl; - paintText(*buffer_view_, pain); + QPainter pain(viewport()); + pain.drawPixmap(rc, screen_, rc); } void GuiWorkArea::expose(int x, int y, int w, int h) { + QLPainter pain(&screen_); + + if (w == 3) { // FIXME HACK + // Assume splash screen drawing is requested when + // width == 3 + lyxerr << "splash screen requested" << endl; + doGreyOut(pain); + } + else if (!buffer_view_->buffer()) { + lyxerr << "no buffer: " << endl; + doGreyOut(pain); + updateScrollbar(); + } + else { + paintText(*buffer_view_, pain); + } + update(x, y, w, h); } void GuiWorkArea::showCursor(int x, int y, int h, CursorShape shape) { - cursor_->setGeometry(x, y, 2, h); + cursor_->setGeometry(x, y, CursorWidth, h); cursor_->shape_ = shape; - cursor_->on_ = true; cursor_->show(); } diff --git a/src/frontends/qt4/GuiWorkArea.h b/src/frontends/qt4/GuiWorkArea.h index b81e48d06b..8745d3e416 100644 --- a/src/frontends/qt4/GuiWorkArea.h +++ b/src/frontends/qt4/GuiWorkArea.h @@ -23,6 +23,7 @@ #include #include #include +#include #include @@ -167,18 +168,10 @@ private: /// double_click dc_event_; - /// - bool show_hcursor_; - /// - bool show_vcursor_; - /// - bool lshape_cursor_; - /// - QColor cursor_color_; - /// - CursorShape cursor_shape_; /// CursorWidget * cursor_; + /// + QPixmap screen_; }; } // namespace frontend