From d796c9dd933ab96ec83b9a634feedd5d32e1ba3f Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Tue, 8 Nov 2011 12:31:36 -0600 Subject: Test conversion to TQt3 from Qt3 8c6fc1f8e35fd264dd01c582ca5e7549b32ab731 --- doc/html/geometry.html | 122 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 doc/html/geometry.html (limited to 'doc/html/geometry.html') diff --git a/doc/html/geometry.html b/doc/html/geometry.html new file mode 100644 index 000000000..8c26de976 --- /dev/null +++ b/doc/html/geometry.html @@ -0,0 +1,122 @@ + + + + + +Window Geometry + + + + + + + +
+ +Home + | +All Classes + | +Main Classes + | +Annotated + | +Grouped Classes + | +Functions +

Window Geometry

+ + +

Overview +

+

TQWidget provides several functions that deal with a widget's +geometry. Some of these functions operate on the pure client area +(i.e. the window excluding the window frame), others include the +window frame. The differentiation is done in a way that covers the +most common usage transparently. +

+ + +
Including the window frame: +x(), y(), frameGeometry(), pos() and move() +
Excluding the window frame: +geometry(), width(), height(), rect() and size() +
+

Note that the distinction only matters for decorated top-level +widgets. For all child widgets, the frame geometry is equal to the +widget's client geometry. +

This diagram shows most of the functions in use: +

Geometry diagram
+

Unix/X11 peculiarities +

+

On Unix/X11, a window does not have a frame until the window manager +decorates it. This happens asynchronously at some point in time after +calling show() and the first paint event the window receives: or it +does not happen at all. Bear in mind that X11 is policy-free (others +call it flexible). Thus you cannot make any safe assumption about the +decoration frame your window will get. Basic rule: there's always one +user who uses a window manager that breaks your assumption, and who +will complain to you. +

Furthermore, a toolkit cannot simply place windows on the screen. All +TQt can do is to send certain hints to the window manager. The window +manager, a separate process, may either obey, ignore or misunderstand +them. Due to the partially unclear Inter-Client Communication +Conventions Manual (ICCCM), window placement is handled tquite +differently in existing window managers. +

X11 provides no standard or easy way to get the frame geometry once +the window is decorated. TQt solves this problem with nifty heuristics +and clever code that works on a wide range of window managers that +exist today. Don't be surprised if you find one where frameGeometry() +returns bogus results though. +

Nor does X11 provide a way to maximize a window. The showMaximized() +function in TQt therefore has to emulate the feature. Its result +depends on the result of frameGeometry() and the capability of the +window manager to do proper window placement, neither of which can be +guaranteed. +

Restoring a Window's Geometry +

+

A common task in modern applications is to restore a window's geometry +in a later session. On Windows, this is basically storing the result +of geometry() and calling setGeometry() in the next session before +calling show(). On X11, this won't work because an invisible window +doesn't have a frame yet. The window manager would decorate the window +later. When this happens, the window shifts towards the bottom/right +corner of the screen depending on the size of the decoration frame. X +theoretically provides a way to avoid this shift. Our tests have +shown, though, that almost all window managers fail to implement this +feature. +

A workaround is to call setGeometry() after show(). This has the +two disadvantages that the widget appears at a wrong place for a +millisecond (results in flashing) and that currently only every +second window manager gets it right. A safer solution is to store +both pos() and size() and to restore the geometry using resize() and +move() before calling show(), as demonstrated in the following +example: +

+    MyWidget* widget = new MyWidget
+    ...
+    TQPoint p = widget->pos();   // store position
+    TQSize s = widget->size();   // store size
+    ...
+    widget = new MyWidget;
+    widget->resize( s );        // restore size
+    widget->move( p );          // restore position
+    widget->show();             // show widget
+
+ +

This method works on both MS-Windows and most existing X11 window +managers. +

+ +


+ +
Copyright © 2007 +TrolltechTrademarks +
TQt 3.3.8
+
+ -- cgit v1.2.1