]> git.lyx.org Git - features.git/commitdiff
- restore a backing pixmap painting strategy: the pixmap is drawn at expose() time.
authorAbdelrazak Younes <younes@lyx.org>
Thu, 2 Nov 2006 22:53:10 +0000 (22:53 +0000)
committerAbdelrazak Younes <younes@lyx.org>
Thu, 2 Nov 2006 22:53:10 +0000 (22:53 +0000)
- 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
src/frontends/qt4/GuiWorkArea.h

index 749e849765d5fa2b25f1a6fd5418af7f802e1346..fb8a25df255871a7566521ab80e0ad04e9febf83 100644 (file)
@@ -39,7 +39,6 @@
 #include <QMimeData>
 #include <QUrl>
 #include <QDragEnterEvent>
-#include <QPixmap>
 #include <QPainter>
 #include <QScrollBar>
 
 // 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;
+
+       QPainter pain(viewport());
+       pain.drawPixmap(rc, screen_, rc);
+}
 
-       if (!buffer_view_) {
-               lyxerr << "no bufferview" << endl;
-               return;
-       }
 
-       QLPainter pain(viewport());
 
-       if (rc.width() == 3) { // FIXME HACK
+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);
-               return;
        }
-
-       if (!buffer_view_->buffer()) {
+       else if (!buffer_view_->buffer()) {
                lyxerr << "no buffer: " << endl;
                doGreyOut(pain);
                updateScrollbar();
-               return;
+       }
+       else {
+               paintText(*buffer_view_, pain);
        }
 
-       //lyxerr << "real drawing" << endl;
-       paintText(*buffer_view_, pain);
-}
-
-
-
-void GuiWorkArea::expose(int x, int y, int w, int h)
-{
        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();
 }
 
index b81e48d06bdda9a49f0bd832fd7c02d68022aa2a..8745d3e4164f151f94767825ec10aaf631a8d539 100644 (file)
@@ -23,6 +23,7 @@
 #include <QResizeEvent>
 #include <QKeyEvent>
 #include <QTimer>
+#include <QPixmap>
 
 #include <queue>
 
@@ -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