From 05fedeedb28df769ce16efea39be1cc5e2916b98 Mon Sep 17 00:00:00 2001
From: Yuhang Zhao <zhaoyuhang@rankyee.com>
Date: 周三, 06 12月 2023 14:13:01 +0800
Subject: [PATCH] minor tweaks

---
 src/quick/quickwindowagent.h                |   16 ++--
 src/core/contexts/abstractwindowcontext.cpp |    8 +-
 src/widgets/widgetwindowagent.cpp           |   16 ++--
 src/core/contexts/abstractwindowcontext_p.h |   24 ++++----
 src/widgets/widgetwindowagent.h             |   16 ++--
 examples/mainwindow/mainwindow.cpp          |   31 +++++++++-
 src/quick/quickwindowagent.cpp              |   16 ++--
 7 files changed, 76 insertions(+), 51 deletions(-)

diff --git a/examples/mainwindow/mainwindow.cpp b/examples/mainwindow/mainwindow.cpp
index ae7cd16..adcf6cd 100644
--- a/examples/mainwindow/mainwindow.cpp
+++ b/examples/mainwindow/mainwindow.cpp
@@ -53,16 +53,41 @@
         return menuBar;
     }();
 
-    static const auto buttonStyleSheet = QLatin1String{ "QPushButton{color:black;};QPushButton:hover{background-color:black;color:white;}" };
+    static const auto buttonStyleSheet = QLatin1String{ R"(
+QPushButton {
+    background-color:white;
+    color:black;
+}
+QPushButton:hover {
+    background-color:black;
+    color:white;
+}
+QPushButton:pressed {
+    background-color:red;
+    color:white;
+}
+)" };
 
     auto iconButton = new QPushButton("I");
+    iconButton->setFlat(true);
+    iconButton->setAttribute(Qt::WA_Hover);
+    iconButton->setMouseTracking(true);
     iconButton->setStyleSheet(buttonStyleSheet);
     auto minButton = new QPushButton("鈥�");
+    minButton->setFlat(true);
+    minButton->setAttribute(Qt::WA_Hover);
+    minButton->setMouseTracking(true);
     minButton->setStyleSheet(buttonStyleSheet);
     auto maxButton = new QPushButton("馃棖");
-    maxButton->setStyleSheet(buttonStyleSheet);
     maxButton->setCheckable(true);
+    maxButton->setFlat(true);
+    maxButton->setAttribute(Qt::WA_Hover);
+    maxButton->setMouseTracking(true);
+    maxButton->setStyleSheet(buttonStyleSheet);
     auto closeButton = new QPushButton("鉁�");
+    closeButton->setFlat(true);
+    closeButton->setAttribute(Qt::WA_Hover);
+    closeButton->setMouseTracking(true);
     closeButton->setStyleSheet(buttonStyleSheet);
 
     auto windowBar = new QWK::WindowBar();
@@ -97,5 +122,5 @@
     setMenuWidget(windowBar);
     setCentralWidget(clockWidget);
     setWindowTitle("Example MainWindow");
-    resize(1024, 768);
+    resize(640, 480);
 }
diff --git a/src/core/contexts/abstractwindowcontext.cpp b/src/core/contexts/abstractwindowcontext.cpp
index 9e0d7cd..1c0e739 100644
--- a/src/core/contexts/abstractwindowcontext.cpp
+++ b/src/core/contexts/abstractwindowcontext.cpp
@@ -8,7 +8,7 @@
 
     AbstractWindowContext::~AbstractWindowContext() = default;
 
-    bool AbstractWindowContext::setHitTestVisible(QObject *obj, bool visible) {
+    bool AbstractWindowContext::setHitTestVisible(const QObject *obj, bool visible) {
         Q_ASSERT(obj);
         if (!obj) {
             return false;
@@ -38,7 +38,7 @@
     }
 
     bool AbstractWindowContext::setSystemButton(CoreWindowAgent::SystemButton button,
-                                                QObject *obj) {
+                                                const QObject *obj) {
         Q_ASSERT(obj);
         Q_ASSERT(button != CoreWindowAgent::Unknown);
         if (!obj || (button == CoreWindowAgent::Unknown)) {
@@ -52,7 +52,7 @@
         return true;
     }
 
-    bool AbstractWindowContext::setTitleBar(QObject *item) {
+    bool AbstractWindowContext::setTitleBar(const QObject *item) {
         Q_ASSERT(item);
         if (!item) {
             return false;
@@ -90,7 +90,7 @@
                 continue;
             }
             if (m_delegate->mapGeometryToScene(currentButton).contains(pos)) {
-                *button = CoreWindowAgent::WindowIcon;
+                *button = static_cast<CoreWindowAgent::SystemButton>(i);
                 return true;
             }
         }
diff --git a/src/core/contexts/abstractwindowcontext_p.h b/src/core/contexts/abstractwindowcontext_p.h
index 996a0e3..b1202ea 100644
--- a/src/core/contexts/abstractwindowcontext_p.h
+++ b/src/core/contexts/abstractwindowcontext_p.h
@@ -25,15 +25,15 @@
         inline QObject *host() const;
         inline QWindow *window() const;
 
-        inline bool isHitTestVisible(QObject *obj) const;
-        bool setHitTestVisible(QObject *obj, bool visible);
+        inline bool isHitTestVisible(const QObject *obj) const;
+        bool setHitTestVisible(const QObject *obj, bool visible);
         bool setHitTestVisible(const QRect &rect, bool visible);
 
-        inline QObject *systemButton(CoreWindowAgent::SystemButton button) const;
-        bool setSystemButton(CoreWindowAgent::SystemButton button, QObject *obj);
+        inline const QObject *systemButton(CoreWindowAgent::SystemButton button) const;
+        bool setSystemButton(CoreWindowAgent::SystemButton button, const QObject *obj);
 
-        inline QObject *titleBar() const;
-        bool setTitleBar(QObject *obj);
+        inline const QObject *titleBar() const;
+        bool setTitleBar(const QObject *obj);
 
         void showSystemMenu(const QPoint &pos);
 
@@ -46,11 +46,11 @@
         std::unique_ptr<WindowItemDelegate> m_delegate;
         QWindow *m_windowHandle;
 
-        QSet<QObject *> m_hitTestVisibleItems;
+        QSet<const QObject *> m_hitTestVisibleItems;
         QList<QRect> m_hitTestVisibleRects;
 
-        QObject *m_titleBar{};
-        std::array<QObject *, CoreWindowAgent::NumSystemButton> m_systemButtons{};
+        const QObject *m_titleBar{};
+        std::array<const QObject *, CoreWindowAgent::NumSystemButton> m_systemButtons{};
 
         // Cached shape
         mutable bool hitTestVisibleShapeDirty{};
@@ -65,16 +65,16 @@
         return m_windowHandle;
     }
 
-    inline bool AbstractWindowContext::isHitTestVisible(QObject *obj) const {
+    inline bool AbstractWindowContext::isHitTestVisible(const QObject *obj) const {
         return m_hitTestVisibleItems.contains(obj);
     }
 
-    inline QObject *
+    inline const QObject *
         AbstractWindowContext::systemButton(CoreWindowAgent::SystemButton button) const {
         return m_systemButtons[button];
     }
 
-    inline QObject *AbstractWindowContext::titleBar() const {
+    inline const QObject *AbstractWindowContext::titleBar() const {
         return m_titleBar;
     }
 
diff --git a/src/quick/quickwindowagent.cpp b/src/quick/quickwindowagent.cpp
index 59949f2..80c10e3 100644
--- a/src/quick/quickwindowagent.cpp
+++ b/src/quick/quickwindowagent.cpp
@@ -41,12 +41,12 @@
         return true;
     }
 
-    QQuickItem *QuickWindowAgent::titleBar() const {
+    const QQuickItem *QuickWindowAgent::titleBar() const {
         Q_D(const QuickWindowAgent);
-        return static_cast<QQuickItem *>(d->context->titleBar());
+        return static_cast<const QQuickItem *>(d->context->titleBar());
     }
 
-    void QuickWindowAgent::setTitleBar(QQuickItem *item) {
+    void QuickWindowAgent::setTitleBar(const QQuickItem *item) {
         Q_D(QuickWindowAgent);
         if (!d->context->setTitleBar(item)) {
             return;
@@ -54,12 +54,12 @@
         Q_EMIT titleBarWidgetChanged(item);
     }
 
-    QQuickItem *QuickWindowAgent::systemButton(SystemButton button) const {
+    const QQuickItem *QuickWindowAgent::systemButton(SystemButton button) const {
         Q_D(const QuickWindowAgent);
-        return static_cast<QQuickItem *>(d->context->systemButton(button));
+        return static_cast<const QQuickItem *>(d->context->systemButton(button));
     }
 
-    void QuickWindowAgent::setSystemButton(SystemButton button, QQuickItem *item) {
+    void QuickWindowAgent::setSystemButton(SystemButton button, const QQuickItem *item) {
         Q_D(QuickWindowAgent);
         if (!d->context->setSystemButton(button, item)) {
             return;
@@ -67,12 +67,12 @@
         Q_EMIT systemButtonChanged(button, item);
     }
 
-    bool QuickWindowAgent::isHitTestVisible(QQuickItem *item) const {
+    bool QuickWindowAgent::isHitTestVisible(const QQuickItem *item) const {
         Q_D(const QuickWindowAgent);
         return d->context->isHitTestVisible(item);
     }
 
-    void QuickWindowAgent::setHitTestVisible(QQuickItem *item, bool visible) {
+    void QuickWindowAgent::setHitTestVisible(const QQuickItem *item, bool visible) {
         Q_D(QuickWindowAgent);
         d->context->setHitTestVisible(item, visible);
     }
diff --git a/src/quick/quickwindowagent.h b/src/quick/quickwindowagent.h
index eb408ed..53e8652 100644
--- a/src/quick/quickwindowagent.h
+++ b/src/quick/quickwindowagent.h
@@ -21,19 +21,19 @@
     public:
         bool setup(QQuickWindow *window);
 
-        QQuickItem *titleBar() const;
-        void setTitleBar(QQuickItem *item);
+        const QQuickItem *titleBar() const;
+        void setTitleBar(const QQuickItem *item);
 
-        QQuickItem *systemButton(SystemButton button) const;
-        void setSystemButton(SystemButton button, QQuickItem *item);
+        const QQuickItem *systemButton(SystemButton button) const;
+        void setSystemButton(SystemButton button, const QQuickItem *item);
 
-        bool isHitTestVisible(QQuickItem *item) const;
-        void setHitTestVisible(QQuickItem *item, bool visible = true);
+        bool isHitTestVisible(const QQuickItem *item) const;
+        void setHitTestVisible(const QQuickItem *item, bool visible = true);
         void setHitTestVisible(const QRect &rect, bool visible = true);
 
     Q_SIGNALS:
-        void titleBarWidgetChanged(QQuickItem *item);
-        void systemButtonChanged(SystemButton button, QQuickItem *item);
+        void titleBarWidgetChanged(const QQuickItem *item);
+        void systemButtonChanged(SystemButton button, const QQuickItem *item);
 
     protected:
         QuickWindowAgent(QuickWindowAgentPrivate &d, QObject *parent = nullptr);
diff --git a/src/widgets/widgetwindowagent.cpp b/src/widgets/widgetwindowagent.cpp
index 8f4a76d..e7068fb 100644
--- a/src/widgets/widgetwindowagent.cpp
+++ b/src/widgets/widgetwindowagent.cpp
@@ -42,12 +42,12 @@
         return true;
     }
 
-    QWidget *WidgetWindowAgent::titleBar() const {
+    const QWidget *WidgetWindowAgent::titleBar() const {
         Q_D(const WidgetWindowAgent);
-        return static_cast<QWidget *>(d->context->titleBar());
+        return static_cast<const QWidget *>(d->context->titleBar());
     }
 
-    void WidgetWindowAgent::setTitleBar(QWidget *w) {
+    void WidgetWindowAgent::setTitleBar(const QWidget *w) {
         Q_D(WidgetWindowAgent);
         if (!d->context->setTitleBar(w)) {
             return;
@@ -55,12 +55,12 @@
         Q_EMIT titleBarWidgetChanged(w);
     }
 
-    QWidget *WidgetWindowAgent::systemButton(SystemButton button) const {
+    const QWidget *WidgetWindowAgent::systemButton(SystemButton button) const {
         Q_D(const WidgetWindowAgent);
-        return static_cast<QWidget *>(d->context->systemButton(button));
+        return static_cast<const QWidget *>(d->context->systemButton(button));
     }
 
-    void WidgetWindowAgent::setSystemButton(SystemButton button, QWidget *w) {
+    void WidgetWindowAgent::setSystemButton(SystemButton button, const QWidget *w) {
         Q_D(WidgetWindowAgent);
         if (!d->context->setSystemButton(button, w)) {
             return;
@@ -68,12 +68,12 @@
         Q_EMIT systemButtonChanged(button, w);
     }
 
-    bool WidgetWindowAgent::isHitTestVisible(QWidget *w) const {
+    bool WidgetWindowAgent::isHitTestVisible(const QWidget *w) const {
         Q_D(const WidgetWindowAgent);
         return d->context->isHitTestVisible(w);
     }
 
-    void WidgetWindowAgent::setHitTestVisible(QWidget *w, bool visible) {
+    void WidgetWindowAgent::setHitTestVisible(const QWidget *w, bool visible) {
         Q_D(WidgetWindowAgent);
         d->context->setHitTestVisible(w, visible);
     }
diff --git a/src/widgets/widgetwindowagent.h b/src/widgets/widgetwindowagent.h
index 791646a..cec5a88 100644
--- a/src/widgets/widgetwindowagent.h
+++ b/src/widgets/widgetwindowagent.h
@@ -20,19 +20,19 @@
     public:
         bool setup(QWidget *w);
 
-        QWidget *titleBar() const;
-        void setTitleBar(QWidget *w);
+        const QWidget *titleBar() const;
+        void setTitleBar(const QWidget *w);
 
-        QWidget *systemButton(SystemButton button) const;
-        void setSystemButton(SystemButton button, QWidget *w);
+        const QWidget *systemButton(SystemButton button) const;
+        void setSystemButton(SystemButton button, const QWidget *w);
 
-        bool isHitTestVisible(QWidget *w) const;
-        void setHitTestVisible(QWidget *w, bool visible = true);
+        bool isHitTestVisible(const QWidget *w) const;
+        void setHitTestVisible(const QWidget *w, bool visible = true);
         void setHitTestVisible(const QRect &rect, bool visible = true);
 
     Q_SIGNALS:
-        void titleBarWidgetChanged(QWidget *w);
-        void systemButtonChanged(SystemButton button, QWidget *w);
+        void titleBarWidgetChanged(const QWidget *w);
+        void systemButtonChanged(SystemButton button, const QWidget *w);
 
     protected:
         WidgetWindowAgent(WidgetWindowAgentPrivate &d, QObject *parent = nullptr);

--
Gitblit v1.9.1