summaryrefslogtreecommitdiffstats
path: root/src/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/kernel/qwindow.cpp35
-rw-r--r--src/gui/kernel/qwindow.h7
-rw-r--r--src/gui/kernel/qwindow_p.h9
3 files changed, 51 insertions, 0 deletions
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;