From a001bde5bfc8b782231d7f9c42dbeb82ff25fc81 Mon Sep 17 00:00:00 2001 From: Gunnar Sletta Date: Mon, 29 Aug 2011 08:26:37 +0200 Subject: QWindow::mapToGlobal/mapFromGlobal and move() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: If1909b9ce468a8708cb25d5a2fbe8ebd90bd958a Reviewed-on: http://codereview.qt.nokia.com/3702 Reviewed-by: Qt Sanity Bot Reviewed-by: Samuel Rødal --- src/gui/kernel/qwindow.cpp | 35 +++++++++++++++++++++++++++++++++++ src/gui/kernel/qwindow.h | 7 +++++++ src/gui/kernel/qwindow_p.h | 9 +++++++++ 3 files changed, 51 insertions(+) (limited to 'src/gui') diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp index d850cd6020..6fbc249631 100644 --- a/src/gui/kernel/qwindow.cpp +++ b/src/gui/kernel/qwindow.cpp @@ -631,6 +631,41 @@ void QWindow::wheelEvent(QWheelEvent *) } #endif //QT_NO_WHEELEVENT + + +/*! + \fn QPoint QWindow::mapToGlobal(const QPoint &pos) const + + Translates the window coordinate \a pos to global screen + coordinates. For example, \c{mapToGlobal(QPoint(0,0))} would give + the global coordinates of the top-left pixel of the window. + + \sa mapFromGlobal() +*/ + +QPoint QWindow::mapToGlobal(const QPoint &pos) const +{ + return pos + d_func()->globalPosition(); +} + + + +/*! + \fn QPoint QWindow::mapFromGlobal(const QPoint &pos) const + + Translates the global screen coordinate \a pos to window + coordinates. + + \sa mapToGlobal() +*/ + +QPoint QWindow::mapFromGlobal(const QPoint &pos) const +{ + return pos - d_func()->globalPosition(); +} + + + Q_GUI_EXPORT QWindowPrivate *qt_window_private(QWindow *window) { return window->d_func(); diff --git a/src/gui/kernel/qwindow.h b/src/gui/kernel/qwindow.h index 6c8fda5768..c64ad13363 100644 --- a/src/gui/kernel/qwindow.h +++ b/src/gui/kernel/qwindow.h @@ -155,6 +155,7 @@ public: void setBaseSize(const QSize &size); void setSizeIncrement(const QSize &size); + void setGeometry(int x, int y, int w, int h) { setGeometry(QRect(x, y, w, h)); } void setGeometry(const QRect &rect); QRect geometry() const; @@ -166,6 +167,9 @@ public: inline QSize size() const { return geometry().size(); } inline QPoint pos() const { return geometry().topLeft(); } + inline void move(const QPoint &pt) { setGeometry(QRect(pt, size())); } + inline void move(int x, int y) { move(QPoint(x, y)); } + inline void resize(const QSize &size) { setGeometry(QRect(pos(), size)); } inline void resize(int w, int h) { setGeometry(QRect(x(), y(), w, h)); } @@ -183,6 +187,9 @@ public: QScreen *screen() const; void setScreen(QScreen *screen); + QPoint mapToGlobal(const QPoint &pos) const; + QPoint mapFromGlobal(const QPoint &pos) const; + public Q_SLOTS: inline void show() { setVisible(true); } inline void hide() { setVisible(false); } diff --git a/src/gui/kernel/qwindow_p.h b/src/gui/kernel/qwindow_p.h index 0a051ae965..38b90fdd73 100644 --- a/src/gui/kernel/qwindow_p.h +++ b/src/gui/kernel/qwindow_p.h @@ -81,6 +81,15 @@ public: void maybeQuitOnLastWindowClosed(); + QPoint globalPosition() const { + Q_Q(const QWindow); + QPoint offset = q->pos(); + for (const QWindow *p = q->parent(); p; p = p->parent()) + offset += p->pos(); + return offset; + } + + QWindow::SurfaceType surfaceType; Qt::WindowFlags windowFlags; QWindow *parentWindow; -- cgit v1.2.3