summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Arne Vestbø <[email protected]>2024-11-12 11:54:10 +0100
committerTor Arne Vestbø <[email protected]>2024-11-21 17:49:37 +0100
commit6d4a717152ff0592fd433b4692119d768346c2c9 (patch)
tree4c648265cc52718eca36380cecdb1ba938b70f3b
parentefa0d60fe465542c8233b1e6d9ed35806967c86c (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.txt1
-rw-r--r--tests/manual/windowflags/controllerwindow.cpp7
-rw-r--r--tests/manual/windowflags/controllerwindow.h5
-rw-r--r--tests/manual/windowflags/controls.cpp58
-rw-r--r--tests/manual/windowflags/controls.h2
-rw-r--r--tests/manual/windowflags/previewwindow.cpp21
-rw-r--r--tests/manual/windowflags/previewwindow.h9
-rw-r--r--tests/manual/windowflags/windowflags.pro2
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