Minor tweaks.

Signed-off-by: Yuhang Zhao <2546789017@qq.com>
This commit is contained in:
Yuhang Zhao 2020-10-23 14:03:04 +08:00
parent 286fc26d3f
commit 9d4a3a453c
4 changed files with 250 additions and 516 deletions

View File

@ -3,5 +3,4 @@ TEMPLATE = app
QT += widgets QT += widgets
HEADERS += widget.h HEADERS += widget.h
SOURCES += widget.cpp main.cpp SOURCES += widget.cpp main.cpp
FORMS += widget.ui
include($$PWD/../common.pri) include($$PWD/../common.pri)

View File

@ -24,13 +24,19 @@
#include "widget.h" #include "widget.h"
#include "../../winnativeeventfilter.h" #include "../../winnativeeventfilter.h"
#include "ui_widget.h"
#include <dwmapi.h> #include <dwmapi.h>
#include <QCheckBox>
#include <QColorDialog> #include <QColorDialog>
#include <QEvent>
#include <QHBoxLayout>
#include <QLabel>
#include <QMessageBox> #include <QMessageBox>
#include <QOperatingSystemVersion> #include <QOperatingSystemVersion>
#include <QPainter> #include <QPainter>
#include <QPushButton>
#include <QSettings> #include <QSettings>
#include <QSpacerItem>
#include <QVBoxLayout>
#include <qt_windows.h> #include <qt_windows.h>
// Some old SDK doesn't have this value. // Some old SDK doesn't have this value.
@ -94,17 +100,37 @@ const QLatin1String g_sSystemButtonsStyleSheet(R"(
background-color: #8c0a15; background-color: #8c0a15;
} }
)"); )");
const QLatin1String g_sTitleLabelStyleSheet(R"(
#titleLabel {
color: rgb(%1, %2, %3);
}
)");
const QLatin1String g_sTitleBarStyleSheet(R"(
#titleBarWidget {
background-color: rgba(%1, %2, %3, %4);
border-top: 1px solid rgba(%5, %6, %7, %8);
}
)");
const QLatin1String g_sMinimizeButtonImageDark(":/images/button_minimize_black.svg");
const QLatin1String g_sMaximizeButtonImageDark(":/images/button_maximize_black.svg");
const QLatin1String g_sRestoreButtonImageDark(":/images/button_restore_black.svg");
const QLatin1String g_sCloseButtonImageDark(":/images/button_close_black.svg");
const QLatin1String g_sMinimizeButtonImageLight(":/images/button_minimize_white.svg");
const QLatin1String g_sMaximizeButtonImageLight(":/images/button_maximize_white.svg");
const QLatin1String g_sRestoreButtonImageLight(":/images/button_restore_white.svg");
const QLatin1String g_sCloseButtonImageLight(":/images/button_close_white.svg");
} // namespace } // namespace
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) Widget::Widget(QWidget *parent) : QWidget(parent)
{ {
m_bIsWin10OrGreater = isWin10OrGreater(); m_bIsWin10OrGreater = isWin10OrGreater();
m_bIsWin10_1803OrGreater = isWin10OrGreater(g_vAcrylicEffectVersion); m_bIsWin10_1803OrGreater = isWin10OrGreater(g_vAcrylicEffectVersion);
g_cColorizationColor = colorizationColor(); g_cColorizationColor = colorizationColor();
ui->setupUi(this); setupUi();
ui->forceAcrylicCB->setEnabled(m_bIsWin10_1803OrGreater); forceAcrylicCB->setEnabled(m_bIsWin10_1803OrGreater);
if (shouldDrawBorder()) { if (shouldDrawBorder()) {
layout()->setContentsMargins(1, 1, 1, 1); layout()->setContentsMargins(1, 1, 1, 1);
} else { } else {
@ -112,35 +138,35 @@ Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
} }
updateTitleBar(); updateTitleBar();
connect(ui->iconButton, &QPushButton::clicked, this, [this]() { connect(iconButton, &QPushButton::clicked, this, [this]() {
POINT pos = {}; POINT pos = {};
GetCursorPos(&pos); GetCursorPos(&pos);
const auto hwnd = reinterpret_cast<HWND>(rawHandle()); const auto hwnd = reinterpret_cast<HWND>(rawHandle());
SendMessageW(hwnd, WM_CONTEXTMENU, reinterpret_cast<WPARAM>(hwnd), MAKELPARAM(pos.x, pos.y)); SendMessageW(hwnd, WM_CONTEXTMENU, reinterpret_cast<WPARAM>(hwnd), MAKELPARAM(pos.x, pos.y));
}); });
connect(ui->minimizeButton, &QPushButton::clicked, this, &Widget::showMinimized); connect(minimizeButton, &QPushButton::clicked, this, &Widget::showMinimized);
connect(ui->maximizeButton, &QPushButton::clicked, this, [this]() { connect(maximizeButton, &QPushButton::clicked, this, [this]() {
if (isMaximized()) { if (isMaximized()) {
showNormal(); showNormal();
} else { } else {
showMaximized(); showMaximized();
} }
}); });
connect(ui->closeButton, &QPushButton::clicked, this, &Widget::close); connect(closeButton, &QPushButton::clicked, this, &Widget::close);
connect(ui->moveCenterButton, &QPushButton::clicked, this, [this]() { connect(moveCenterButton, &QPushButton::clicked, this, [this]() {
WinNativeEventFilter::moveWindowToDesktopCenter(rawHandle()); WinNativeEventFilter::moveWindowToDesktopCenter(rawHandle());
}); });
connect(this, &Widget::windowTitleChanged, ui->titleLabel, &QLabel::setText); connect(this, &Widget::windowTitleChanged, titleLabel, &QLabel::setText);
connect(this, &Widget::windowIconChanged, ui->iconButton, &QPushButton::setIcon); connect(this, &Widget::windowIconChanged, iconButton, &QPushButton::setIcon);
connect(ui->customizeTitleBarCB, &QCheckBox::stateChanged, this, [this](int state) { connect(customizeTitleBarCB, &QCheckBox::stateChanged, this, [this](int state) {
const bool enable = state == Qt::Checked; const bool enable = state == Qt::Checked;
ui->preserveWindowFrameCB->setEnabled(enable); preserveWindowFrameCB->setEnabled(enable);
WinNativeEventFilter::updateQtFrame(windowHandle(), WinNativeEventFilter::updateQtFrame(windowHandle(),
enable ? WinNativeEventFilter::getSystemMetric( enable ? WinNativeEventFilter::getSystemMetric(
rawHandle(), rawHandle(),
WinNativeEventFilter::SystemMetric::TitleBarHeight) WinNativeEventFilter::SystemMetric::TitleBarHeight)
: 0); : 0);
ui->titleBarWidget->setVisible(enable); titleBarWidget->setVisible(enable);
if (enable) { if (enable) {
qunsetenv(g_sUseNativeTitleBar); qunsetenv(g_sUseNativeTitleBar);
} else { } else {
@ -148,7 +174,7 @@ Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
} }
updateWindow(); updateWindow();
}); });
connect(ui->preserveWindowFrameCB, &QCheckBox::stateChanged, this, [this](int state) { connect(preserveWindowFrameCB, &QCheckBox::stateChanged, this, [this](int state) {
const bool enable = state == Qt::Checked; const bool enable = state == Qt::Checked;
if (enable) { if (enable) {
qputenv(g_sPreserveWindowFrame, "1"); qputenv(g_sPreserveWindowFrame, "1");
@ -165,10 +191,10 @@ Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
updateTitleBar(); updateTitleBar();
updateWindow(); updateWindow();
}); });
connect(ui->blurEffectCB, &QCheckBox::stateChanged, this, [this](int state) { connect(blurEffectCB, &QCheckBox::stateChanged, this, [this](int state) {
const bool enable = state == Qt::Checked; const bool enable = state == Qt::Checked;
QColor color = {0, 0, 0, 127}; QColor color = {0, 0, 0, 127};
const bool useAcrylicEffect = m_bIsWin10_1803OrGreater && ui->forceAcrylicCB->isChecked(); const bool useAcrylicEffect = m_bIsWin10_1803OrGreater && forceAcrylicCB->isChecked();
if (useAcrylicEffect) { if (useAcrylicEffect) {
if (enable && m_bShowColorDialog) { if (enable && m_bShowColorDialog) {
color = QColorDialog::getColor(color, color = QColorDialog::getColor(color,
@ -188,11 +214,11 @@ Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
"solve this issue temporarily.")); "solve this issue temporarily."));
} }
}); });
connect(ui->extendToTitleBarCB, &QCheckBox::stateChanged, this, [this](int state) { connect(extendToTitleBarCB, &QCheckBox::stateChanged, this, [this](int state) {
m_bExtendToTitleBar = state == Qt::Checked; m_bExtendToTitleBar = state == Qt::Checked;
updateTitleBar(); updateTitleBar();
}); });
connect(ui->forceAcrylicCB, &QCheckBox::stateChanged, this, [this](int state) { connect(forceAcrylicCB, &QCheckBox::stateChanged, this, [this](int state) {
if (!m_bIsWin10_1803OrGreater) { if (!m_bIsWin10_1803OrGreater) {
return; return;
} }
@ -201,20 +227,19 @@ Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
} else { } else {
qunsetenv(g_sForceUseAcrylicEffect); qunsetenv(g_sForceUseAcrylicEffect);
} }
if (ui->blurEffectCB->isChecked()) { if (blurEffectCB->isChecked()) {
ui->blurEffectCB->click(); blurEffectCB->click();
ui->blurEffectCB->click(); blurEffectCB->click();
} }
}); });
connect(ui->resizableCB, &QCheckBox::stateChanged, this, [this](int state) { connect(resizableCB, &QCheckBox::stateChanged, this, [this](int state) {
const bool enable = state == Qt::Checked; const bool enable = state == Qt::Checked;
ui->maximizeButton->setEnabled(enable); maximizeButton->setEnabled(enable);
WinNativeEventFilter::setWindowResizable(rawHandle(), enable); WinNativeEventFilter::setWindowResizable(rawHandle(), enable);
}); });
WinNativeEventFilter::WINDOWDATA data = {}; WinNativeEventFilter::WINDOWDATA data = {};
data.ignoreObjects << ui->iconButton << ui->minimizeButton << ui->maximizeButton data.ignoreObjects << iconButton << minimizeButton << maximizeButton << closeButton;
<< ui->closeButton;
WinNativeEventFilter::addFramelessWindow(this, &data); WinNativeEventFilter::addFramelessWindow(this, &data);
installEventFilter(this); installEventFilter(this);
@ -222,9 +247,150 @@ Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
initWindow(); initWindow();
} }
Widget::~Widget() void Widget::retranslateUi()
{ {
delete ui; setWindowTitle(tr("Widget"));
iconButton->setText({});
titleLabel->setText({});
minimizeButton->setText({});
maximizeButton->setText({});
closeButton->setText({});
customizeTitleBarCB->setText(tr("Enable customized title bar"));
preserveWindowFrameCB->setText(tr("Preserve window frame"));
blurEffectCB->setText(tr("Enable blur effect"));
extendToTitleBarCB->setText(tr("Extend to title bar"));
forceAcrylicCB->setText(tr("Force enabling Acrylic effect"));
resizableCB->setText(tr("Resizable"));
moveCenterButton->setText(tr("Move to desktop center"));
}
void Widget::setupUi()
{
resize(1056, 600);
verticalLayout_3 = new QVBoxLayout(this);
titleBarWidget = new QWidget(this);
titleBarWidget->setObjectName(QLatin1String("titleBarWidget"));
QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(titleBarWidget->sizePolicy().hasHeightForWidth());
titleBarWidget->setSizePolicy(sizePolicy);
titleBarWidget->setMinimumSize(QSize(0, 30));
titleBarWidget->setMaximumSize(QSize(16777215, 30));
horizontalLayout = new QHBoxLayout(titleBarWidget);
horizontalLayout->setSpacing(0);
horizontalLayout->setContentsMargins(0, 0, 0, 0);
horizontalSpacer_7 = new QSpacerItem(3, 20, QSizePolicy::Fixed, QSizePolicy::Minimum);
horizontalLayout->addItem(horizontalSpacer_7);
iconButton = new QPushButton(titleBarWidget);
iconButton->setObjectName(QLatin1String("iconButton"));
horizontalLayout->addWidget(iconButton);
horizontalSpacer = new QSpacerItem(3, 20, QSizePolicy::Fixed, QSizePolicy::Minimum);
horizontalLayout->addItem(horizontalSpacer);
titleLabel = new QLabel(titleBarWidget);
titleLabel->setObjectName(QLatin1String("titleLabel"));
QFont font;
font.setPointSize(10);
titleLabel->setFont(font);
horizontalLayout->addWidget(titleLabel);
horizontalSpacer_2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
horizontalLayout->addItem(horizontalSpacer_2);
minimizeButton = new QPushButton(titleBarWidget);
minimizeButton->setObjectName(QLatin1String("minimizeButton"));
QSizePolicy sizePolicy1(QSizePolicy::Fixed, QSizePolicy::Fixed);
sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(minimizeButton->sizePolicy().hasHeightForWidth());
minimizeButton->setSizePolicy(sizePolicy1);
const QSize systemButtonSize = {45, 30};
minimizeButton->setMinimumSize(systemButtonSize);
minimizeButton->setMaximumSize(systemButtonSize);
QIcon icon;
icon.addFile(g_sMinimizeButtonImageDark, {}, QIcon::Normal, QIcon::Off);
minimizeButton->setIcon(icon);
minimizeButton->setIconSize(systemButtonSize);
horizontalLayout->addWidget(minimizeButton);
maximizeButton = new QPushButton(titleBarWidget);
maximizeButton->setObjectName(QLatin1String("maximizeButton"));
sizePolicy1.setHeightForWidth(maximizeButton->sizePolicy().hasHeightForWidth());
maximizeButton->setSizePolicy(sizePolicy1);
maximizeButton->setMinimumSize(systemButtonSize);
maximizeButton->setMaximumSize(systemButtonSize);
QIcon icon1;
icon1.addFile(g_sMaximizeButtonImageDark, {}, QIcon::Normal, QIcon::Off);
maximizeButton->setIcon(icon1);
maximizeButton->setIconSize(systemButtonSize);
horizontalLayout->addWidget(maximizeButton);
closeButton = new QPushButton(titleBarWidget);
closeButton->setObjectName(QLatin1String("closeButton"));
sizePolicy1.setHeightForWidth(closeButton->sizePolicy().hasHeightForWidth());
closeButton->setSizePolicy(sizePolicy1);
closeButton->setMinimumSize(systemButtonSize);
closeButton->setMaximumSize(systemButtonSize);
QIcon icon2;
icon2.addFile(g_sCloseButtonImageDark, {}, QIcon::Normal, QIcon::Off);
closeButton->setIcon(icon2);
closeButton->setIconSize(systemButtonSize);
horizontalLayout->addWidget(closeButton);
verticalLayout_3->addWidget(titleBarWidget);
contentsWidget = new QWidget(this);
QSizePolicy sizePolicy2(QSizePolicy::Expanding, QSizePolicy::Expanding);
sizePolicy2.setHorizontalStretch(0);
sizePolicy2.setVerticalStretch(0);
sizePolicy2.setHeightForWidth(contentsWidget->sizePolicy().hasHeightForWidth());
contentsWidget->setSizePolicy(sizePolicy2);
verticalLayout_2 = new QVBoxLayout(contentsWidget);
verticalSpacer_2 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
verticalLayout_2->addItem(verticalSpacer_2);
horizontalLayout_2 = new QHBoxLayout();
horizontalSpacer_3 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
horizontalLayout_2->addItem(horizontalSpacer_3);
controlPanelWidget = new QWidget(contentsWidget);
QSizePolicy sizePolicy3(QSizePolicy::Maximum, QSizePolicy::Maximum);
sizePolicy3.setHorizontalStretch(0);
sizePolicy3.setVerticalStretch(0);
sizePolicy3.setHeightForWidth(controlPanelWidget->sizePolicy().hasHeightForWidth());
controlPanelWidget->setSizePolicy(sizePolicy3);
verticalLayout = new QVBoxLayout(controlPanelWidget);
customizeTitleBarCB = new QCheckBox(controlPanelWidget);
QFont font1;
font1.setPointSize(15);
font1.setBold(true);
font1.setWeight(75);
customizeTitleBarCB->setFont(font1);
verticalLayout->addWidget(customizeTitleBarCB);
preserveWindowFrameCB = new QCheckBox(controlPanelWidget);
preserveWindowFrameCB->setFont(font1);
verticalLayout->addWidget(preserveWindowFrameCB);
blurEffectCB = new QCheckBox(controlPanelWidget);
blurEffectCB->setFont(font1);
verticalLayout->addWidget(blurEffectCB);
extendToTitleBarCB = new QCheckBox(controlPanelWidget);
extendToTitleBarCB->setFont(font1);
verticalLayout->addWidget(extendToTitleBarCB);
forceAcrylicCB = new QCheckBox(controlPanelWidget);
forceAcrylicCB->setFont(font1);
verticalLayout->addWidget(forceAcrylicCB);
resizableCB = new QCheckBox(controlPanelWidget);
resizableCB->setFont(font1);
verticalLayout->addWidget(resizableCB);
horizontalLayout_2->addWidget(controlPanelWidget);
horizontalSpacer_4 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
horizontalLayout_2->addItem(horizontalSpacer_4);
verticalLayout_2->addLayout(horizontalLayout_2);
verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
verticalLayout_2->addItem(verticalSpacer);
horizontalLayout_3 = new QHBoxLayout();
horizontalSpacer_5 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
horizontalLayout_3->addItem(horizontalSpacer_5);
moveCenterButton = new QPushButton(contentsWidget);
moveCenterButton->setFont(font1);
horizontalLayout_3->addWidget(moveCenterButton);
horizontalSpacer_6 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
horizontalLayout_3->addItem(horizontalSpacer_6);
verticalLayout_2->addLayout(horizontalLayout_3);
verticalLayout_3->addWidget(contentsWidget);
retranslateUi();
} }
bool Widget::isNormaled() const bool Widget::isNormaled() const
@ -235,7 +401,7 @@ bool Widget::isNormaled() const
bool Widget::shouldDrawBorder(const bool ignoreWindowState) const bool Widget::shouldDrawBorder(const bool ignoreWindowState) const
{ {
return m_bIsWin10OrGreater && (ignoreWindowState ? true : isNormaled()) return m_bIsWin10OrGreater && (ignoreWindowState ? true : isNormaled())
&& !ui->preserveWindowFrameCB->isChecked() && ui->customizeTitleBarCB->isChecked(); && !preserveWindowFrameCB->isChecked() && customizeTitleBarCB->isChecked();
} }
bool Widget::shouldDrawThemedBorder(const bool ignoreWindowState) const bool Widget::shouldDrawThemedBorder(const bool ignoreWindowState) const
@ -380,7 +546,7 @@ bool Widget::eventFilter(QObject *object, QEvent *event)
} }
} }
updateTitleBar(); updateTitleBar();
ui->moveCenterButton->setEnabled(isNormaled()); moveCenterButton->setEnabled(isNormaled());
break; break;
} }
case QEvent::WinIdChange: case QEvent::WinIdChange:
@ -406,7 +572,7 @@ bool Widget::nativeEvent(const QByteArray &eventType, void *message, long *resul
Q_ASSERT(eventType == "windows_generic_MSG"); Q_ASSERT(eventType == "windows_generic_MSG");
Q_ASSERT(message); Q_ASSERT(message);
Q_ASSERT(result); Q_ASSERT(result);
if (ui->customizeTitleBarCB->isChecked()) { if (customizeTitleBarCB->isChecked()) {
const auto msg = static_cast<LPMSG>(message); const auto msg = static_cast<LPMSG>(message);
switch (msg->message) { switch (msg->message) {
case WM_NCRBUTTONUP: { case WM_NCRBUTTONUP: {
@ -466,22 +632,22 @@ void Widget::updateTitleBar()
{ {
const bool themedTitleBar = shouldDrawThemedTitleBar() && isActiveWindow(); const bool themedTitleBar = shouldDrawThemedTitleBar() && isActiveWindow();
if (themedTitleBar && !m_bExtendToTitleBar) { if (themedTitleBar && !m_bExtendToTitleBar) {
ui->minimizeButton->setIcon(QIcon(QLatin1String(":/images/button_minimize_white.svg"))); minimizeButton->setIcon(QIcon(g_sMinimizeButtonImageLight));
ui->closeButton->setIcon(QIcon(QLatin1String(":/images/button_close_white.svg"))); closeButton->setIcon(QIcon(g_sCloseButtonImageLight));
if (isMaximized()) { if (isMaximized()) {
ui->maximizeButton->setIcon(QIcon(QLatin1String(":/images/button_restore_white.svg"))); maximizeButton->setIcon(QIcon(g_sRestoreButtonImageLight));
} }
if (isNormaled()) { if (isNormaled()) {
ui->maximizeButton->setIcon(QIcon(QLatin1String(":/images/button_maximize_white.svg"))); maximizeButton->setIcon(QIcon(g_sMaximizeButtonImageLight));
} }
} else { } else {
ui->minimizeButton->setIcon(QIcon(QLatin1String(":/images/button_minimize_black.svg"))); minimizeButton->setIcon(QIcon(g_sMinimizeButtonImageDark));
ui->closeButton->setIcon(QIcon(QLatin1String(":/images/button_close_black.svg"))); closeButton->setIcon(QIcon(g_sCloseButtonImageDark));
if (isMaximized()) { if (isMaximized()) {
ui->maximizeButton->setIcon(QIcon(QLatin1String(":/images/button_restore_black.svg"))); maximizeButton->setIcon(QIcon(g_sRestoreButtonImageDark));
} }
if (isNormaled()) { if (isNormaled()) {
ui->maximizeButton->setIcon(QIcon(QLatin1String(":/images/button_maximize_black.svg"))); maximizeButton->setIcon(QIcon(g_sMaximizeButtonImageDark));
} }
} }
const QColor titleBarBackgroundColor = m_bExtendToTitleBar const QColor titleBarBackgroundColor = m_bExtendToTitleBar
@ -495,42 +661,32 @@ void Widget::updateTitleBar()
|| isFullScreen()) || isFullScreen())
? Qt::transparent ? Qt::transparent
: borderColor(); : borderColor();
ui->titleBarWidget->setStyleSheet(g_sSystemButtonsStyleSheet titleBarWidget->setStyleSheet(
+ QLatin1String(R"( g_sSystemButtonsStyleSheet
#titleLabel { + g_sTitleLabelStyleSheet.arg(QString::number(titleBarTextColor.red()),
color: rgb(%1, %2, %3); QString::number(titleBarTextColor.green()),
} QString::number(titleBarTextColor.blue()))
)") + g_sTitleBarStyleSheet.arg(QString::number(titleBarBackgroundColor.red()),
.arg(QString::number(titleBarTextColor.red()), QString::number(titleBarBackgroundColor.green()),
QString::number(titleBarTextColor.green()), QString::number(titleBarBackgroundColor.blue()),
QString::number(titleBarTextColor.blue())) QString::number(titleBarBackgroundColor.alpha()),
+ QLatin1String(R"( QString::number(titleBarBorderColor.red()),
#titleBarWidget { QString::number(titleBarBorderColor.green()),
background-color: rgba(%1, %2, %3, %4); QString::number(titleBarBorderColor.blue()),
border-top: 1px solid rgba(%5, %6, %7, %8); QString::number(titleBarBorderColor.alpha())));
}
)")
.arg(QString::number(titleBarBackgroundColor.red()),
QString::number(titleBarBackgroundColor.green()),
QString::number(titleBarBackgroundColor.blue()),
QString::number(titleBarBackgroundColor.alpha()),
QString::number(titleBarBorderColor.red()),
QString::number(titleBarBorderColor.green()),
QString::number(titleBarBorderColor.blue()),
QString::number(titleBarBorderColor.alpha())));
} }
void Widget::initWindow() void Widget::initWindow()
{ {
if (m_bIsWin10OrGreater) { if (m_bIsWin10OrGreater) {
//ui->preserveWindowFrameCB->click(); //preserveWindowFrameCB->click();
if (m_bIsWin10_1803OrGreater) { if (m_bIsWin10_1803OrGreater) {
ui->forceAcrylicCB->click(); forceAcrylicCB->click();
} }
} }
ui->customizeTitleBarCB->click(); customizeTitleBarCB->click();
ui->extendToTitleBarCB->click(); extendToTitleBarCB->click();
ui->blurEffectCB->click(); blurEffectCB->click();
ui->resizableCB->click(); resizableCB->click();
m_bShowColorDialog = true; m_bShowColorDialog = true;
} }

View File

@ -26,12 +26,6 @@
#include <QWidget> #include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui {
QT_FORWARD_DECLARE_CLASS(Widget)
}
QT_END_NAMESPACE
#if (QT_VERSION < QT_VERSION_CHECK(5, 13, 0)) #if (QT_VERSION < QT_VERSION_CHECK(5, 13, 0))
#define Q_DISABLE_MOVE(Class) \ #define Q_DISABLE_MOVE(Class) \
Class(Class &&) = delete; \ Class(Class &&) = delete; \
@ -42,6 +36,13 @@ QT_END_NAMESPACE
Q_DISABLE_MOVE(Class) Q_DISABLE_MOVE(Class)
#endif #endif
QT_FORWARD_DECLARE_CLASS(QVBoxLayout)
QT_FORWARD_DECLARE_CLASS(QHBoxLayout)
QT_FORWARD_DECLARE_CLASS(QSpacerItem)
QT_FORWARD_DECLARE_CLASS(QPushButton)
QT_FORWARD_DECLARE_CLASS(QLabel)
QT_FORWARD_DECLARE_CLASS(QCheckBox)
class Widget : public QWidget class Widget : public QWidget
{ {
Q_OBJECT Q_OBJECT
@ -63,7 +64,7 @@ public:
}; };
explicit Widget(QWidget *parent = nullptr); explicit Widget(QWidget *parent = nullptr);
~Widget() override; ~Widget() override = default;
bool isNormaled() const; bool isNormaled() const;
@ -86,6 +87,8 @@ public:
void *rawHandle() const; void *rawHandle() const;
void retranslateUi();
protected: protected:
bool eventFilter(QObject *object, QEvent *event) override; bool eventFilter(QObject *object, QEvent *event) override;
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
@ -96,12 +99,27 @@ protected:
void paintEvent(QPaintEvent *event) override; void paintEvent(QPaintEvent *event) override;
private: private:
void setupUi();
void updateWindow(); void updateWindow();
void updateTitleBar(); void updateTitleBar();
void initWindow(); void initWindow();
private: private:
Ui::Widget *ui = nullptr;
bool m_bIsWin10OrGreater = false, m_bIsWin10_1803OrGreater = false, m_bExtendToTitleBar = false, bool m_bIsWin10OrGreater = false, m_bIsWin10_1803OrGreater = false, m_bExtendToTitleBar = false,
m_bShowColorDialog = false; m_bShowColorDialog = false;
QVBoxLayout *verticalLayout_3 = nullptr, *verticalLayout_2 = nullptr, *verticalLayout = nullptr;
QWidget *titleBarWidget = nullptr, *contentsWidget = nullptr, *controlPanelWidget = nullptr;
QHBoxLayout *horizontalLayout = nullptr, *horizontalLayout_2 = nullptr,
*horizontalLayout_3 = nullptr;
QSpacerItem *horizontalSpacer_7 = nullptr, *horizontalSpacer = nullptr,
*horizontalSpacer_2 = nullptr, *verticalSpacer_2 = nullptr,
*horizontalSpacer_3 = nullptr, *horizontalSpacer_4 = nullptr,
*verticalSpacer = nullptr, *horizontalSpacer_5 = nullptr,
*horizontalSpacer_6 = nullptr;
QPushButton *iconButton = nullptr, *minimizeButton = nullptr, *maximizeButton = nullptr,
*closeButton = nullptr, *moveCenterButton = nullptr;
QLabel *titleLabel = nullptr;
QCheckBox *customizeTitleBarCB = nullptr, *preserveWindowFrameCB = nullptr,
*blurEffectCB = nullptr, *extendToTitleBarCB = nullptr, *forceAcrylicCB = nullptr,
*resizableCB = nullptr;
}; };

View File

@ -1,439 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Widget</class>
<widget class="QWidget" name="Widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1056</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>Widget</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QWidget" name="titleBarWidget" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<spacer name="horizontalSpacer_7">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>3</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="iconButton">
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>3</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="titleLabel">
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="minimizeButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>45</width>
<height>30</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>45</width>
<height>30</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../images.qrc">
<normaloff>:/images/button_minimize_black.svg</normaloff>:/images/button_minimize_black.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>45</width>
<height>30</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="maximizeButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>45</width>
<height>30</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>45</width>
<height>30</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../images.qrc">
<normaloff>:/images/button_maximize_black.svg</normaloff>:/images/button_maximize_black.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>45</width>
<height>30</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="closeButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>45</width>
<height>30</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>45</width>
<height>30</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../images.qrc">
<normaloff>:/images/button_close_black.svg</normaloff>:/images/button_close_black.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>45</width>
<height>30</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="contentsWidget" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QWidget" name="controlPanelWidget" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QCheckBox" name="customizeTitleBarCB">
<property name="font">
<font>
<pointsize>15</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Enable customized title bar</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="preserveWindowFrameCB">
<property name="font">
<font>
<pointsize>15</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Preserve window frame</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="blurEffectCB">
<property name="font">
<font>
<pointsize>15</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Enable blur effect</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="extendToTitleBarCB">
<property name="font">
<font>
<pointsize>15</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Extend to title bar</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="forceAcrylicCB">
<property name="font">
<font>
<pointsize>15</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Force enabling Acrylic effect</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="resizableCB">
<property name="font">
<font>
<pointsize>15</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Resizable</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="moveCenterButton">
<property name="font">
<font>
<pointsize>15</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Move to desktop center</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_6">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources>
<include location="../images.qrc"/>
</resources>
<connections/>
</ui>