From 18c1d671371ef8d94506a9a6dd6ee3680ef80fd3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Samuel=20R=C3=B8dal?= Date: Tue, 21 Jun 2011 17:00:25 +0200 Subject: [PATCH] Made QExposeEvent public and added exposeEvent() in QWindow. This is needed for applications that use QBackingStore directly. --- examples/qpa/windows/window.cpp | 7 +++++-- examples/qpa/windows/window.h | 1 + src/corelib/kernel/qcoreevent.cpp | 1 + src/gui/kernel/qevent.cpp | 23 +++++++++++++++++++++++ src/gui/kernel/qevent.h | 11 +++++++++++ src/gui/kernel/qevent_p.h | 12 ------------ src/gui/kernel/qwindow.cpp | 8 ++++++++ src/gui/kernel/qwindow.h | 2 ++ 8 files changed, 51 insertions(+), 14 deletions(-) diff --git a/examples/qpa/windows/window.cpp b/examples/qpa/windows/window.cpp index 1c09c6b..bbfc6a3 100644 --- a/examples/qpa/windows/window.cpp +++ b/examples/qpa/windows/window.cpp @@ -38,8 +38,6 @@ Window::Window(QWindow *parent) m_image.fill(colorTable[m_backgroundColorIndex % (sizeof(colorTable) / sizeof(colorTable[0]))].rgba()); m_lastPos = QPoint(-1, -1); - - render(); } void Window::mousePressEvent(QMouseEvent *event) @@ -71,6 +69,11 @@ void Window::mouseReleaseEvent(QMouseEvent *event) render(); } +void Window::exposeEvent(QExposeEvent *) +{ + render(); +} + void Window::resizeEvent(QResizeEvent *) { QImage old = m_image; diff --git a/examples/qpa/windows/window.h b/examples/qpa/windows/window.h index f716145..546cf67 100644 --- a/examples/qpa/windows/window.h +++ b/examples/qpa/windows/window.h @@ -13,6 +13,7 @@ protected: void keyPressEvent(QKeyEvent *); + void exposeEvent(QExposeEvent *); void resizeEvent(QResizeEvent *); private: diff --git a/src/corelib/kernel/qcoreevent.cpp b/src/corelib/kernel/qcoreevent.cpp index fbc935d..49c6da4 100644 --- a/src/corelib/kernel/qcoreevent.cpp +++ b/src/corelib/kernel/qcoreevent.cpp @@ -126,6 +126,7 @@ QT_BEGIN_NAMESPACE \value Enter Mouse enters widget's boundaries. \value EnterEditFocus An editor widget gains focus for editing. \value EnterWhatsThisMode Send to toplevel widgets when the application enters "What's This?" mode. + \value Expose Sent to a window when its on-screen contents are invalidated and need to be flushed from the backing store. \value FileOpen File open request (QFileOpenEvent). \value FocusIn Widget gains keyboard focus (QFocusEvent). \value FocusOut Widget loses keyboard focus (QFocusEvent). diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp index f5a5c28..988d70c 100644 --- a/src/gui/kernel/qevent.cpp +++ b/src/gui/kernel/qevent.cpp @@ -1145,6 +1145,29 @@ QMoveEvent::~QMoveEvent() Returns the old position of the widget. */ +/*! + \class QExposeEvent + \brief The QExposeEvent class contains event parameters for expose events. + + \ingroup events + + Expose events are sent to widgets when an area of the widget is invalidated + and needs to be flushed from the backing store. + + The event handler QWindow::exposeEvent() receives expose events. +*/ +QExposeEvent::QExposeEvent(const QRegion &exposeRegion) + : QEvent(Expose) + , rgn(exposeRegion) +{ +} + +/*! + \internal +*/ +QExposeEvent::~QExposeEvent() +{ +} /*! \class QResizeEvent diff --git a/src/gui/kernel/qevent.h b/src/gui/kernel/qevent.h index fc9e811..809a3d6 100644 --- a/src/gui/kernel/qevent.h +++ b/src/gui/kernel/qevent.h @@ -300,6 +300,17 @@ protected: friend class QCoreApplication; }; +class Q_GUI_EXPORT QExposeEvent : public QEvent +{ +public: + QExposeEvent(const QRegion &rgn); + ~QExposeEvent(); + + inline const QRegion ®ion() const { return rgn; } + +protected: + QRegion rgn; +}; class Q_GUI_EXPORT QResizeEvent : public QEvent { diff --git a/src/gui/kernel/qevent_p.h b/src/gui/kernel/qevent_p.h index a53b2c5..731cfc9 100644 --- a/src/gui/kernel/qevent_p.h +++ b/src/gui/kernel/qevent_p.h @@ -167,18 +167,6 @@ public: QScrollEvent::ScrollState state; }; -class QExposeEvent : public QEvent -{ -public: - inline QExposeEvent(const QRegion &rgn) - : QEvent(Expose) - , region(rgn) - { - } - - QRegion region; -}; - QT_END_NAMESPACE #endif // QEVENT_P_H diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp index f56962d..d060adf 100644 --- a/src/gui/kernel/qwindow.cpp +++ b/src/gui/kernel/qwindow.cpp @@ -454,6 +454,10 @@ bool QWindow::close() return true; } +void QWindow::exposeEvent(QExposeEvent *) +{ +} + void QWindow::resizeEvent(QResizeEvent *) { } @@ -510,6 +514,10 @@ bool QWindow::event(QEvent *event) destroy(); break; + case QEvent::Expose: + exposeEvent(static_cast(event)); + break; + default: return QObject::event(event); } diff --git a/src/gui/kernel/qwindow.h b/src/gui/kernel/qwindow.h index af882b5..20b6074 100644 --- a/src/gui/kernel/qwindow.h +++ b/src/gui/kernel/qwindow.h @@ -57,6 +57,7 @@ QT_MODULE(Gui) class QWindowPrivate; +class QExposeEvent; class QResizeEvent; class QShowEvent; class QHideEvent; @@ -179,6 +180,7 @@ Q_SIGNALS: void backBufferReady(); protected: + virtual void exposeEvent(QExposeEvent *); virtual void resizeEvent(QResizeEvent *); virtual void showEvent(QShowEvent *); -- 2.7.4