From c77ab1212bd9a356ddeb03af6bb17c0bdf8ed955 Mon Sep 17 00:00:00 2001
From: Yuhang Zhao <zhaoyuhang@rankyee.com>
Date: 周一, 11 12月 2023 15:56:59 +0800
Subject: [PATCH] tweak quick API

---
 examples/qml/main.qml          |   34 ++++++++++++++++
 src/quick/quickwindowagent.h   |   19 +++++----
 examples/qml/main.cpp          |    2 +
 src/quick/CMakeLists.txt       |    1 
 src/quick/qwkquickglobal.h     |   10 +++++
 src/quick/qwkquickglobal.cpp   |   22 +++++++++++
 src/quick/quickwindowagent.cpp |    4 +-
 7 files changed, 81 insertions(+), 11 deletions(-)

diff --git a/examples/qml/main.cpp b/examples/qml/main.cpp
index 4dbda50..1898550 100644
--- a/examples/qml/main.cpp
+++ b/examples/qml/main.cpp
@@ -1,3 +1,4 @@
+#include <QWKQuick/qwkquickglobal.h>
 #include <QGuiApplication>
 #include <QQmlApplicationEngine>
 
@@ -13,6 +14,7 @@
     QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
     QGuiApplication application(argc, argv);
     QQmlApplicationEngine engine;
+    QWK::registerTypes(&engine);
     engine.load(QUrl(QStringLiteral("qrc:///main.qml")));
     return application.exec();
 }
\ No newline at end of file
diff --git a/examples/qml/main.qml b/examples/qml/main.qml
index b319421..7f5c228 100644
--- a/examples/qml/main.qml
+++ b/examples/qml/main.qml
@@ -1,9 +1,41 @@
 import QtQuick 2.15
 import QtQuick.Window 2.15
+import QtQuick.Controls 2.15
+import QWindowKit 1.0
 
 Window {
     id: window
-    visible: true
     width: 640
     height: 480
+    color: "#f0f0f0"
+    title: qsTr("Hello, world!")
+    Component.onCompleted: {
+        windowAgent.setup(window)
+        window.visible = true
+    }
+
+    WindowAgent {
+        id: windowAgent
+    }
+
+    Rectangle {
+        id: titleBar
+        anchors {
+            top: parent.top
+            left: parent.left
+            right: parent.right
+        }
+        height: 32
+        color: "white"
+        Component.onCompleted: windowAgent.setTitleBar(titleBar)
+
+        Text {
+            anchors.centerIn: parent
+            horizontalAlignment: Text.AlignHCenter
+            verticalAlignment: Text.AlignVCenter
+            text: window.title
+            font.pixelSize: 14
+            color: window.active ? "black" : "gray"
+        }
+    }
 }
\ No newline at end of file
diff --git a/src/quick/CMakeLists.txt b/src/quick/CMakeLists.txt
index 0591a42..1d61653 100644
--- a/src/quick/CMakeLists.txt
+++ b/src/quick/CMakeLists.txt
@@ -5,6 +5,7 @@
 
 set(_src
     qwkquickglobal.h
+    qwkquickglobal.cpp
     quickitemdelegate_p.h
     quickitemdelegate.cpp
     quickwindowagent.h
diff --git a/src/quick/quickwindowagent.cpp b/src/quick/quickwindowagent.cpp
index 7fc72f5..9cee1b5 100644
--- a/src/quick/quickwindowagent.cpp
+++ b/src/quick/quickwindowagent.cpp
@@ -72,12 +72,12 @@
         return d->context->isHitTestVisible(item);
     }
 
-    void QuickWindowAgent::setHitTestVisible(const QQuickItem *item, bool visible) {
+    void QuickWindowAgent::setHitTestVisible_item(const QQuickItem *item, bool visible) {
         Q_D(QuickWindowAgent);
         d->context->setHitTestVisible(item, visible);
     }
 
-    void QuickWindowAgent::setHitTestVisible(const QRect &rect, bool visible) {
+    void QuickWindowAgent::setHitTestVisible_rect(const QRect &rect, bool visible) {
         Q_D(QuickWindowAgent);
         d->context->setHitTestVisible(rect, visible);
     }
diff --git a/src/quick/quickwindowagent.h b/src/quick/quickwindowagent.h
index 714ffcf..e2460d4 100644
--- a/src/quick/quickwindowagent.h
+++ b/src/quick/quickwindowagent.h
@@ -19,17 +19,20 @@
         ~QuickWindowAgent() override;
 
     public:
-        bool setup(QQuickWindow *window);
+        Q_INVOKABLE bool setup(QQuickWindow *window);
 
-        const QQuickItem *titleBar() const;
-        void setTitleBar(const QQuickItem *item);
+        Q_INVOKABLE const QQuickItem *titleBar() const;
+        Q_INVOKABLE void setTitleBar(const QQuickItem *item);
 
-        const QQuickItem *systemButton(SystemButton button) const;
-        void setSystemButton(SystemButton button, const QQuickItem *item);
+        Q_INVOKABLE const QQuickItem *systemButton(SystemButton button) const;
+        Q_INVOKABLE void setSystemButton(SystemButton button, const QQuickItem *item);
 
-        bool isHitTestVisible(const QQuickItem *item) const;
-        void setHitTestVisible(const QQuickItem *item, bool visible = true);
-        void setHitTestVisible(const QRect &rect, bool visible = true);
+        Q_INVOKABLE bool isHitTestVisible(const QQuickItem *item) const;
+        Q_INVOKABLE inline void setHitTestVisible(const QQuickItem *item, bool visible = true) {
+            setHitTestVisible_item(item, visible);
+        }
+        Q_INVOKABLE void setHitTestVisible_item(const QQuickItem *item, bool visible = true);
+        Q_INVOKABLE void setHitTestVisible_rect(const QRect &rect, bool visible = true);
 
     Q_SIGNALS:
         void titleBarWidgetChanged(const QQuickItem *item);
diff --git a/src/quick/qwkquickglobal.cpp b/src/quick/qwkquickglobal.cpp
new file mode 100644
index 0000000..834dd6d
--- /dev/null
+++ b/src/quick/qwkquickglobal.cpp
@@ -0,0 +1,22 @@
+#include "qwkquickglobal.h"
+#include "quickwindowagent.h"
+#include <QtQml/QQmlEngine>
+
+namespace QWK {
+
+    static constexpr const char kModuleUri[] = "QWindowKit";
+
+    void registerTypes(QQmlEngine *engine) {
+        Q_UNUSED(engine);
+
+        static bool once = false;
+        if (once) {
+            return;
+        }
+        once = true;
+
+        qmlRegisterType<QuickWindowAgent>(kModuleUri, 1, 0, "WindowAgent");
+        qmlRegisterModule(kModuleUri, 1, 0);
+    }
+
+}
diff --git a/src/quick/qwkquickglobal.h b/src/quick/qwkquickglobal.h
index a5c613e..cfec206 100644
--- a/src/quick/qwkquickglobal.h
+++ b/src/quick/qwkquickglobal.h
@@ -15,4 +15,14 @@
 #  endif
 #endif
 
+QT_BEGIN_NAMESPACE
+class QQmlEngine;
+QT_END_NAMESPACE
+
+namespace QWK {
+
+    QWK_QUICK_EXPORT void registerTypes(QQmlEngine *engine);
+
+}
+
 #endif // QWKQUICKGLOBAL_H

--
Gitblit v1.9.1