diff options
author | Tor Arne Vestbø <[email protected]> | 2024-11-12 11:54:10 +0100 |
---|---|---|
committer | Tor Arne Vestbø <[email protected]> | 2024-11-21 17:49:37 +0100 |
commit | 6d4a717152ff0592fd433b4692119d768346c2c9 (patch) | |
tree | 4c648265cc52718eca36380cecdb1ba938b70f3b | |
parent | efa0d60fe465542c8233b1e6d9ed35806967c86c (diff) |
Improve windowflags manual test
Group the Qt::CustomizeWindowHint specific flags separately, to make
it clear that they only apply if Qt::CustomizeWindowHint is set, and
give the QWindow preview window a title.
Add option to visualize the safe areas of the window.
Change-Id: I25ae7229b47ceaaa02f4be5a8210dbe44f54b6fa
Reviewed-by: Friedemann Kleint <[email protected]>
-rw-r--r-- | tests/manual/windowflags/CMakeLists.txt | 1 | ||||
-rw-r--r-- | tests/manual/windowflags/controllerwindow.cpp | 7 | ||||
-rw-r--r-- | tests/manual/windowflags/controllerwindow.h | 5 | ||||
-rw-r--r-- | tests/manual/windowflags/controls.cpp | 58 | ||||
-rw-r--r-- | tests/manual/windowflags/controls.h | 2 | ||||
-rw-r--r-- | tests/manual/windowflags/previewwindow.cpp | 21 | ||||
-rw-r--r-- | tests/manual/windowflags/previewwindow.h | 9 | ||||
-rw-r--r-- | tests/manual/windowflags/windowflags.pro | 2 |
8 files changed, 75 insertions, 30 deletions
diff --git a/tests/manual/windowflags/CMakeLists.txt b/tests/manual/windowflags/CMakeLists.txt index 27e4fd5ba6b..223f44c2e03 100644 --- a/tests/manual/windowflags/CMakeLists.txt +++ b/tests/manual/windowflags/CMakeLists.txt @@ -16,5 +16,6 @@ qt_internal_add_manual_test(tst_manual_windowflags controls.cpp # undef QT_NO_FOREACH LIBRARIES Qt::Gui + Qt::GuiPrivate Qt::Widgets ) diff --git a/tests/manual/windowflags/controllerwindow.cpp b/tests/manual/windowflags/controllerwindow.cpp index 32979c1cd30..5823bc5360e 100644 --- a/tests/manual/windowflags/controllerwindow.cpp +++ b/tests/manual/windowflags/controllerwindow.cpp @@ -75,7 +75,7 @@ void ControllerWidget::updateStateControl() statesControl->setStates(activePreview->windowStates()); } -void ControllerWidget::updatePreview(QWindow *preview) +void ControllerWidget::updatePreview(PreviewWindow *preview) { activePreview = preview; @@ -91,7 +91,10 @@ void ControllerWidget::updatePreview(QWindow *preview) parentWindow->hide(); } + preview->setVisualizeSafeAreas(safeAreaCheckBox->isChecked()); + preview->setFlags(flags); + preview->update(); if (fixedSizeWindowCheckBox->isChecked()) { preview->setMinimumSize(preview->size()); @@ -172,8 +175,10 @@ void ControllerWidget::createTypeGroupBox() l = new QHBoxLayout; modalWindowCheckBox = createCheckBox(tr("Modal window")); fixedSizeWindowCheckBox = createCheckBox(tr("Fixed size window")); + safeAreaCheckBox = createCheckBox(tr("Visualize safe areas")); l->addWidget(modalWindowCheckBox); l->addWidget(fixedSizeWindowCheckBox); + l->addWidget(safeAreaCheckBox); additionalOptionsGroupBox->setLayout(l); } diff --git a/tests/manual/windowflags/controllerwindow.h b/tests/manual/windowflags/controllerwindow.h index c51ed45a2ed..8a0a1ee4710 100644 --- a/tests/manual/windowflags/controllerwindow.h +++ b/tests/manual/windowflags/controllerwindow.h @@ -35,7 +35,7 @@ private slots: void updateStateControl(); private: - void updatePreview(QWindow *); + void updatePreview(PreviewWindow *); void updatePreview(QWidget *); void createTypeGroupBox(); QCheckBox *createCheckBox(const QString &text); @@ -43,7 +43,7 @@ private: QMainWindow *parentWindow; - QWindow *previewWindow; + PreviewWindow *previewWindow; PreviewWidget *previewWidget; PreviewDialog *previewDialog; @@ -60,6 +60,7 @@ private: QRadioButton *previewDialogButton; QCheckBox *modalWindowCheckBox; QCheckBox *fixedSizeWindowCheckBox; + QCheckBox *safeAreaCheckBox; }; class LogWidget : public QPlainTextEdit diff --git a/tests/manual/windowflags/controls.cpp b/tests/manual/windowflags/controls.cpp index 97bedd03317..9262eb8bc60 100644 --- a/tests/manual/windowflags/controls.cpp +++ b/tests/manual/windowflags/controls.cpp @@ -29,7 +29,7 @@ HintControl::HintControl(QWidget *parent) , windowShadeButtonCheckBox(new QCheckBox(tr("Window shade button"))) , windowStaysOnTopCheckBox(new QCheckBox(tr("Window stays on top"))) , windowStaysOnBottomCheckBox(new QCheckBox(tr("Window stays on bottom"))) - , customizeWindowHintCheckBox(new QCheckBox(tr("Customize window"))) + , customizeWindowGroup(new QGroupBox(tr("Customize window title bar controls"))) , transparentForInputCheckBox(new QCheckBox(tr("Transparent for input"))) , noDropShadowCheckBox(new QCheckBox(tr("No drop shadow"))) { @@ -46,29 +46,45 @@ HintControl::HintControl(QWidget *parent) connect(windowShadeButtonCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged())); connect(windowStaysOnTopCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged())); connect(windowStaysOnBottomCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged())); - connect(customizeWindowHintCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged())); + connect(customizeWindowGroup, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged())); connect(transparentForInputCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged())); connect(noDropShadowCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged())); - QGridLayout *layout = new QGridLayout(this); + auto *layout = new QHBoxLayout(this); layout->setSpacing(0); layout->setContentsMargins(ControlLayoutMargin, ControlLayoutMargin, ControlLayoutMargin, ControlLayoutMargin); - layout->addWidget(msWindowsFixedSizeDialogCheckBox, 0, 0); - layout->addWidget(x11BypassWindowManagerCheckBox, 1, 0); - layout->addWidget(framelessWindowCheckBox, 2, 0); - layout->addWidget(windowTitleCheckBox, 3, 0); - layout->addWidget(windowSystemMenuCheckBox, 4, 0); - layout->addWidget(windowMinimizeButtonCheckBox, 0, 1); - layout->addWidget(windowMaximizeButtonCheckBox, 1, 1); - layout->addWidget(windowFullscreenButtonCheckBox, 2, 1); - layout->addWidget(windowCloseButtonCheckBox, 3, 1); - layout->addWidget(windowContextHelpButtonCheckBox, 4, 1); - layout->addWidget(windowShadeButtonCheckBox, 5, 1); - layout->addWidget(windowStaysOnTopCheckBox, 6, 1); - layout->addWidget(windowStaysOnBottomCheckBox, 7, 1); - layout->addWidget(customizeWindowHintCheckBox, 5, 0); - layout->addWidget(transparentForInputCheckBox, 6, 0); - layout->addWidget(noDropShadowCheckBox, 7, 0); + + auto *basicHintsLayout = new QVBoxLayout; + basicHintsLayout->setSpacing(0); + basicHintsLayout->setContentsMargins(ControlLayoutMargin, ControlLayoutMargin, + ControlLayoutMargin, ControlLayoutMargin); + + basicHintsLayout->addWidget(framelessWindowCheckBox); + basicHintsLayout->addWidget(noDropShadowCheckBox); + basicHintsLayout->addWidget(windowStaysOnTopCheckBox); + basicHintsLayout->addWidget(windowStaysOnBottomCheckBox); + basicHintsLayout->addWidget(transparentForInputCheckBox); + basicHintsLayout->addWidget(msWindowsFixedSizeDialogCheckBox); + basicHintsLayout->addWidget(x11BypassWindowManagerCheckBox); + layout->addLayout(basicHintsLayout); + + customizeWindowGroup->setCheckable(true); + customizeWindowGroup->setChecked(false); + auto *customizeWindowLayout = new QVBoxLayout(customizeWindowGroup); + customizeWindowLayout->setSpacing(0); + customizeWindowLayout->setContentsMargins(ControlLayoutMargin, ControlLayoutMargin, + ControlLayoutMargin, ControlLayoutMargin); + + customizeWindowLayout->addWidget(windowTitleCheckBox); + customizeWindowLayout->addWidget(windowSystemMenuCheckBox); + customizeWindowLayout->addWidget(windowMinimizeButtonCheckBox); + customizeWindowLayout->addWidget(windowShadeButtonCheckBox); + customizeWindowLayout->addWidget(windowMaximizeButtonCheckBox); + customizeWindowLayout->addWidget(windowFullscreenButtonCheckBox); + customizeWindowLayout->addWidget(windowCloseButtonCheckBox); + customizeWindowLayout->addWidget(windowContextHelpButtonCheckBox); + + layout->addWidget(customizeWindowGroup); } Qt::WindowFlags HintControl::hints() const @@ -100,7 +116,7 @@ Qt::WindowFlags HintControl::hints() const flags |= Qt::WindowStaysOnTopHint; if (windowStaysOnBottomCheckBox->isChecked()) flags |= Qt::WindowStaysOnBottomHint; - if (customizeWindowHintCheckBox->isChecked()) + if (customizeWindowGroup->isChecked()) flags |= Qt::CustomizeWindowHint; if (transparentForInputCheckBox->isChecked()) flags |= Qt::WindowTransparentForInput; @@ -124,7 +140,7 @@ void HintControl::setHints(Qt::WindowFlags flags) windowShadeButtonCheckBox->setChecked(flags & Qt::WindowShadeButtonHint); windowStaysOnTopCheckBox->setChecked(flags & Qt::WindowStaysOnTopHint); windowStaysOnBottomCheckBox->setChecked(flags & Qt::WindowStaysOnBottomHint); - customizeWindowHintCheckBox->setChecked(flags & Qt::CustomizeWindowHint); + customizeWindowGroup->setChecked(flags & Qt::CustomizeWindowHint); transparentForInputCheckBox->setChecked(flags & Qt::WindowTransparentForInput); noDropShadowCheckBox->setChecked(flags & Qt::NoDropShadowWindowHint); } diff --git a/tests/manual/windowflags/controls.h b/tests/manual/windowflags/controls.h index 7918468be85..8435a5a4f58 100644 --- a/tests/manual/windowflags/controls.h +++ b/tests/manual/windowflags/controls.h @@ -44,7 +44,7 @@ private: QCheckBox *windowShadeButtonCheckBox; QCheckBox *windowStaysOnTopCheckBox; QCheckBox *windowStaysOnBottomCheckBox; - QCheckBox *customizeWindowHintCheckBox; + QGroupBox *customizeWindowGroup; QCheckBox *transparentForInputCheckBox; QCheckBox *noDropShadowCheckBox; }; diff --git a/tests/manual/windowflags/previewwindow.cpp b/tests/manual/windowflags/previewwindow.cpp index 5a048ef5cfd..3164745281f 100644 --- a/tests/manual/windowflags/previewwindow.cpp +++ b/tests/manual/windowflags/previewwindow.cpp @@ -10,15 +10,28 @@ #include <QPainter> #include <QLinearGradient> +#include <QtGui/qpa/qplatformwindow.h> + #include "previewwindow.h" +PreviewWindow::PreviewWindow(QWindow *parent) + : QRasterWindow(parent) +{ + setTitle(tr("Preview <QWindow> Qt %1").arg(QLatin1StringView(QT_VERSION_STR))); + resize(400, 400); +} + void PreviewWindow::paintEvent(QPaintEvent *event) { QPainter painter(this); - QLinearGradient gradient(0, 0, width(), height()); - gradient.setColorAt(0, QColor("#64b3f4")); - gradient.setColorAt(1, QColor("#c2e59c")); - painter.fillRect(QRect(0, 0, width(), height()), gradient); + QRect rect(0, 0, width(), height()); + if (m_visualizeSafeAreas) { + painter.fillRect(rect, QGradient::WarmFlame); + QMargins safeAreaMargins = handle()->safeAreaMargins(); + rect.adjust(safeAreaMargins.left(), safeAreaMargins.top(), + safeAreaMargins.right(), safeAreaMargins.bottom()); + } + painter.fillRect(rect, QGradient::DustyGrass); } static void formatWindowFlags(QTextStream &str, Qt::WindowFlags flags) diff --git a/tests/manual/windowflags/previewwindow.h b/tests/manual/windowflags/previewwindow.h index 3bfae9c0e9d..e2625d987c1 100644 --- a/tests/manual/windowflags/previewwindow.h +++ b/tests/manual/windowflags/previewwindow.h @@ -13,7 +13,16 @@ QT_END_NAMESPACE class PreviewWindow : public QRasterWindow { +public: + PreviewWindow(QWindow *parent = nullptr); + void setVisualizeSafeAreas(bool enable) + { + m_visualizeSafeAreas = enable; + } + +protected: void paintEvent(QPaintEvent *event); + bool m_visualizeSafeAreas = false; }; class PreviewWidget : public QWidget diff --git a/tests/manual/windowflags/windowflags.pro b/tests/manual/windowflags/windowflags.pro index 4cd60ae6cff..8616cf967c1 100644 --- a/tests/manual/windowflags/windowflags.pro +++ b/tests/manual/windowflags/windowflags.pro @@ -9,4 +9,4 @@ SOURCES = controllerwindow.cpp \ main.cpp \ controls.cpp -QT += widgets +QT += widgets gui-private |