QScreen's physicalSize can change. Ensure siblings are updated.
I have found the following scenarios when the physical size can appear to change even though you can't actually stretch your monitor: 1) VNC allows setting the resolution. Physical size will then be a fraction of the physical size of the monitor on which you display the VNC window. 2) When you rotate your display, the width and height are reversed. 3) MacOS X simulates a change in physical size when you change the mode to one whose aspect ratio does not match your monitor, and also when you use simulated HiDPI mode on a non-HiDPI monitor. While this info is basically wrong, since we are now querying the OS for it, we might as well make sure it is propagated all the way through to the QScreen object's properties. Also, make sure that when geometry changes on one screen, all the siblings are informed of the change in virtual geometry. Also simplified the signals (don't need separate ones to inform of changes which are fundamentally related to each other and always change together). Change-Id: I6a98a1c203e24e8fbeef6e90999671e56dc0c655 Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
This commit is contained in:
parent
02549ed219
commit
3dad01ed58
@ -1946,13 +1946,12 @@ void QGuiApplicationPrivate::reportGeometryChange(QWindowSystemInterfacePrivate:
|
|||||||
Qt::ScreenOrientation primaryOrientation = s->primaryOrientation();
|
Qt::ScreenOrientation primaryOrientation = s->primaryOrientation();
|
||||||
s->d_func()->updatePrimaryOrientation();
|
s->d_func()->updatePrimaryOrientation();
|
||||||
|
|
||||||
emit s->sizeChanged(s->size());
|
|
||||||
emit s->geometryChanged(s->geometry());
|
emit s->geometryChanged(s->geometry());
|
||||||
emit s->physicalDotsPerInchXChanged(s->physicalDotsPerInchX());
|
emit s->physicalSizeChanged(s->physicalSize());
|
||||||
emit s->physicalDotsPerInchYChanged(s->physicalDotsPerInchY());
|
|
||||||
emit s->physicalDotsPerInchChanged(s->physicalDotsPerInch());
|
emit s->physicalDotsPerInchChanged(s->physicalDotsPerInch());
|
||||||
emit s->availableSizeChanged(s->availableSize());
|
emit s->logicalDotsPerInchChanged(s->logicalDotsPerInch());
|
||||||
emit s->availableGeometryChanged(s->availableGeometry());
|
foreach (QScreen* sibling, s->virtualSiblings())
|
||||||
|
emit sibling->virtualGeometryChanged(sibling->virtualGeometry());
|
||||||
|
|
||||||
if (s->primaryOrientation() != primaryOrientation)
|
if (s->primaryOrientation() != primaryOrientation)
|
||||||
emit s->primaryOrientationChanged(s->primaryOrientation());
|
emit s->primaryOrientationChanged(s->primaryOrientation());
|
||||||
@ -1974,8 +1973,8 @@ void QGuiApplicationPrivate::reportAvailableGeometryChange(
|
|||||||
QScreen *s = e->screen.data();
|
QScreen *s = e->screen.data();
|
||||||
s->d_func()->availableGeometry = e->availableGeometry;
|
s->d_func()->availableGeometry = e->availableGeometry;
|
||||||
|
|
||||||
emit s->availableSizeChanged(s->availableSize());
|
foreach (QScreen* sibling, s->virtualSiblings())
|
||||||
emit s->availableGeometryChanged(s->availableGeometry());
|
emit sibling->virtualGeometryChanged(sibling->virtualGeometry());
|
||||||
}
|
}
|
||||||
|
|
||||||
void QGuiApplicationPrivate::reportLogicalDotsPerInchChange(QWindowSystemInterfacePrivate::ScreenLogicalDotsPerInchEvent *e)
|
void QGuiApplicationPrivate::reportLogicalDotsPerInchChange(QWindowSystemInterfacePrivate::ScreenLogicalDotsPerInchEvent *e)
|
||||||
@ -1990,8 +1989,6 @@ void QGuiApplicationPrivate::reportLogicalDotsPerInchChange(QWindowSystemInterfa
|
|||||||
QScreen *s = e->screen.data();
|
QScreen *s = e->screen.data();
|
||||||
s->d_func()->logicalDpi = QDpi(e->dpiX, e->dpiY);
|
s->d_func()->logicalDpi = QDpi(e->dpiX, e->dpiY);
|
||||||
|
|
||||||
emit s->logicalDotsPerInchXChanged(s->logicalDotsPerInchX());
|
|
||||||
emit s->logicalDotsPerInchYChanged(s->logicalDotsPerInchY());
|
|
||||||
emit s->logicalDotsPerInchChanged(s->logicalDotsPerInch());
|
emit s->logicalDotsPerInchChanged(s->logicalDotsPerInch());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,20 +70,20 @@ class Q_GUI_EXPORT QScreen : public QObject
|
|||||||
|
|
||||||
Q_PROPERTY(QString name READ name CONSTANT)
|
Q_PROPERTY(QString name READ name CONSTANT)
|
||||||
Q_PROPERTY(int depth READ depth CONSTANT)
|
Q_PROPERTY(int depth READ depth CONSTANT)
|
||||||
Q_PROPERTY(QSize size READ size NOTIFY sizeChanged)
|
Q_PROPERTY(QSize size READ size NOTIFY geometryChanged)
|
||||||
Q_PROPERTY(QSize availableSize READ availableSize NOTIFY availableSizeChanged)
|
Q_PROPERTY(QSize availableSize READ availableSize NOTIFY virtualGeometryChanged)
|
||||||
Q_PROPERTY(QSize virtualSize READ virtualSize NOTIFY sizeChanged)
|
Q_PROPERTY(QSize virtualSize READ virtualSize NOTIFY virtualGeometryChanged)
|
||||||
Q_PROPERTY(QSize availableVirtualSize READ availableVirtualSize NOTIFY availableSizeChanged)
|
Q_PROPERTY(QSize availableVirtualSize READ availableVirtualSize NOTIFY virtualGeometryChanged)
|
||||||
Q_PROPERTY(QRect geometry READ geometry NOTIFY geometryChanged)
|
Q_PROPERTY(QRect geometry READ geometry NOTIFY geometryChanged)
|
||||||
Q_PROPERTY(QRect availableGeometry READ availableGeometry NOTIFY availableGeometryChanged)
|
Q_PROPERTY(QRect availableGeometry READ availableGeometry NOTIFY virtualGeometryChanged)
|
||||||
Q_PROPERTY(QRect virtualGeometry READ virtualGeometry NOTIFY sizeChanged)
|
Q_PROPERTY(QRect virtualGeometry READ virtualGeometry NOTIFY virtualGeometryChanged)
|
||||||
Q_PROPERTY(QRect availableVirtualGeometry READ availableVirtualGeometry NOTIFY availableGeometryChanged)
|
Q_PROPERTY(QRect availableVirtualGeometry READ availableVirtualGeometry NOTIFY virtualGeometryChanged)
|
||||||
Q_PROPERTY(QSizeF physicalSize READ physicalSize CONSTANT)
|
Q_PROPERTY(QSizeF physicalSize READ physicalSize NOTIFY physicalSizeChanged)
|
||||||
Q_PROPERTY(qreal physicalDotsPerInchX READ physicalDotsPerInchX NOTIFY physicalDotsPerInchXChanged)
|
Q_PROPERTY(qreal physicalDotsPerInchX READ physicalDotsPerInchX NOTIFY physicalDotsPerInchChanged)
|
||||||
Q_PROPERTY(qreal physicalDotsPerInchY READ physicalDotsPerInchY NOTIFY physicalDotsPerInchYChanged)
|
Q_PROPERTY(qreal physicalDotsPerInchY READ physicalDotsPerInchY NOTIFY physicalDotsPerInchChanged)
|
||||||
Q_PROPERTY(qreal physicalDotsPerInch READ physicalDotsPerInch NOTIFY physicalDotsPerInchChanged)
|
Q_PROPERTY(qreal physicalDotsPerInch READ physicalDotsPerInch NOTIFY physicalDotsPerInchChanged)
|
||||||
Q_PROPERTY(qreal logicalDotsPerInchX READ logicalDotsPerInchX NOTIFY logicalDotsPerInchXChanged)
|
Q_PROPERTY(qreal logicalDotsPerInchX READ logicalDotsPerInchX NOTIFY logicalDotsPerInchChanged)
|
||||||
Q_PROPERTY(qreal logicalDotsPerInchY READ logicalDotsPerInchY NOTIFY logicalDotsPerInchYChanged)
|
Q_PROPERTY(qreal logicalDotsPerInchY READ logicalDotsPerInchY NOTIFY logicalDotsPerInchChanged)
|
||||||
Q_PROPERTY(qreal logicalDotsPerInch READ logicalDotsPerInch NOTIFY logicalDotsPerInchChanged)
|
Q_PROPERTY(qreal logicalDotsPerInch READ logicalDotsPerInch NOTIFY logicalDotsPerInchChanged)
|
||||||
Q_PROPERTY(Qt::ScreenOrientation primaryOrientation READ primaryOrientation NOTIFY primaryOrientationChanged)
|
Q_PROPERTY(Qt::ScreenOrientation primaryOrientation READ primaryOrientation NOTIFY primaryOrientationChanged)
|
||||||
Q_PROPERTY(Qt::ScreenOrientation orientation READ orientation NOTIFY orientationChanged)
|
Q_PROPERTY(Qt::ScreenOrientation orientation READ orientation NOTIFY orientationChanged)
|
||||||
@ -138,16 +138,11 @@ public:
|
|||||||
qreal refreshRate() const;
|
qreal refreshRate() const;
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void sizeChanged(const QSize &size);
|
|
||||||
void geometryChanged(const QRect &geometry);
|
void geometryChanged(const QRect &geometry);
|
||||||
void physicalDotsPerInchXChanged(qreal dpi);
|
void physicalSizeChanged(const QSizeF &size);
|
||||||
void physicalDotsPerInchYChanged(qreal dpi);
|
|
||||||
void physicalDotsPerInchChanged(qreal dpi);
|
void physicalDotsPerInchChanged(qreal dpi);
|
||||||
void logicalDotsPerInchXChanged(qreal dpi);
|
|
||||||
void logicalDotsPerInchYChanged(qreal dpi);
|
|
||||||
void logicalDotsPerInchChanged(qreal dpi);
|
void logicalDotsPerInchChanged(qreal dpi);
|
||||||
void availableSizeChanged(const QSize &size);
|
void virtualGeometryChanged(const QRect &rect);
|
||||||
void availableGeometryChanged(const QRect &rect);
|
|
||||||
void primaryOrientationChanged(Qt::ScreenOrientation orientation);
|
void primaryOrientationChanged(Qt::ScreenOrientation orientation);
|
||||||
void orientationChanged(Qt::ScreenOrientation orientation);
|
void orientationChanged(Qt::ScreenOrientation orientation);
|
||||||
void refreshRateChanged(qreal refreshRate);
|
void refreshRateChanged(qreal refreshRate);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user