From 0dbbba56da52fb1752b5a2f16d23c4d0ceb0377d Mon Sep 17 00:00:00 2001
From: zhuzihcu <zhuzichu520@gmail.com>
Date: Thu, 25 May 2023 17:00:48 +0800
Subject: [PATCH] update

---
 example/qml/TestWindow.qml                    |   4 +
 example/qml/component/CodeExpander.qml        | 169 +++++++++---------
 example/src/AppInfo.cpp                       |  29 ++-
 example/src/AppInfo.h                         |   4 +
 example/src/main.cpp                          |  23 +--
 src/FluApp.cpp                                |   2 -
 src/FluApp.h                                  |   1 +
 src/imports/FluentUI/Controls/FluDivider.qml  |   5 -
 src/imports/FluentUI/Controls/FluIcon.qml     |   5 +
 .../FluentUI/Controls/FluIconButton.qml       |  10 +-
 10 files changed, 136 insertions(+), 116 deletions(-)

diff --git a/example/qml/TestWindow.qml b/example/qml/TestWindow.qml
index b8d65357..f75f284a 100644
--- a/example/qml/TestWindow.qml
+++ b/example/qml/TestWindow.qml
@@ -18,6 +18,10 @@ FluWindow {
     launchMode: FluWindow.SingleTask
     visible: true
 
+    Component.onCompleted: {
+//        FluApp.init(window)
+    }
+
     FluNavigationView2{
         id:nav_view
         anchors.fill: parent
diff --git a/example/qml/component/CodeExpander.qml b/example/qml/component/CodeExpander.qml
index 3f673a68..fd98792c 100644
--- a/example/qml/component/CodeExpander.qml
+++ b/example/qml/component/CodeExpander.qml
@@ -24,6 +24,11 @@ FluExpander{
             color:FluTheme.dark ? Qt.rgba(50/255,50/255,50/255,1) : Qt.rgba(247/255,247/255,247/255,1)
             border.color: FluTheme.dark ? Qt.rgba(45/255,45/255,45/255,1) : Qt.rgba(226/255,229/255,234/255,1)
             border.width: 1
+            Behavior on color{
+                ColorAnimation {
+                    duration: 300
+                }
+            }
         }
     }
 
@@ -42,91 +47,91 @@ FluExpander{
     }
 
     function htmlEncode(e){
-      var i,s;
-      for(i in s={
-        "&":/&/g,//""//":/"/g,"'":/'/g,
-        "<":/</g,">":/>/g,"<br/>":/\n/g,
-        " ":/ /g,"  ":/\t/g
-      })e=e.replace(s[i],i);
-      return e;
+        var i,s;
+        for(i in s={
+                "&":/&/g,//""//":/"/g,"'":/'/g,
+                "<":/</g,">":/>/g,"<br/>":/\n/g,
+                " ":/ /g,"  ":/\t/g
+            })e=e.replace(s[i],i);
+        return e;
     }
 
     function highlightQmlCode(code) {
-      // 定义 QML 关键字列表
-      var qmlKeywords = [
-        "FluTextButton",
-        "FluAppBar",
-          "FluAutoSuggestBox",
-          "FluBadge",
-          "FluButton",
-          "FluCalendarPicker",
-          "FluCalendarView",
-          "FluCarousel",
-          "FluCheckBox",
-          "FluColorPicker",
-          "FluColorView",
-          "FluComboBox",
-          "FluContentDialog",
-          "FluContentPage",
-          "FluDatePicker",
-          "FluDivider",
-          "FluDropDownButton",
-          "FluExpander",
-          "FluFilledButton",
-          "FluFlipView",
-          "FluFocusRectangle",
-          "FluIcon",
-          "FluIconButton",
-          "FluInfoBar",
-          "FluItem",
-          "FluMediaPlayer",
-          "FluMenu",
-          "FluMenuItem",
-          "FluMultilineTextBox",
-          "FluNavigationView",
-          "FluObject",
-          "FluPaneItem",
-          "FluPaneItemExpander",
-          "FluPaneItemHeader",
-          "FluPaneItemSeparator",
-          "FluPivot",
-          "FluPivotItem",
-          "FluProgressBar",
-          "FluProgressRing",
-          "FluRadioButton",
-          "FluRectangle",
-          "FluScrollablePage",
-          "FluScrollBar",
-          "FluShadow",
-          "FluSlider",
-          "FluTabView",
-          "FluText",
-          "FluTextArea",
-          "FluTextBox",
-          "FluTextBoxBackground",
-          "FluTextBoxMenu",
-          "FluTextButton",
-          "FluTextFiled",
-          "FluTimePicker",
-          "FluToggleSwitch",
-          "FluTooltip",
-          "FluTreeView",
-          "FluWindow",
-          "FluWindowResize",
-          "FluToggleButton",
-          "FluTableView",
-          "FluColors",
-          "FluTheme",
-          "FluStatusView",
-          "FluRatingControl",
-          "FluPasswordBox",
-          "FluBreadcrumbBar",
-          "FluCopyableText",
-          "FluAcrylic"
-      ];
-      code = code.replace(/\n/g, "<br>");
-      code = code.replace(/ /g, "&nbsp;");
-      return code.replace(RegExp("\\b(" + qmlKeywords.join("|") + ")\\b", "g"), "<span style='color: #c23a80'>$1</span>");
+        // 定义 QML 关键字列表
+        var qmlKeywords = [
+                    "FluTextButton",
+                    "FluAppBar",
+                    "FluAutoSuggestBox",
+                    "FluBadge",
+                    "FluButton",
+                    "FluCalendarPicker",
+                    "FluCalendarView",
+                    "FluCarousel",
+                    "FluCheckBox",
+                    "FluColorPicker",
+                    "FluColorView",
+                    "FluComboBox",
+                    "FluContentDialog",
+                    "FluContentPage",
+                    "FluDatePicker",
+                    "FluDivider",
+                    "FluDropDownButton",
+                    "FluExpander",
+                    "FluFilledButton",
+                    "FluFlipView",
+                    "FluFocusRectangle",
+                    "FluIcon",
+                    "FluIconButton",
+                    "FluInfoBar",
+                    "FluItem",
+                    "FluMediaPlayer",
+                    "FluMenu",
+                    "FluMenuItem",
+                    "FluMultilineTextBox",
+                    "FluNavigationView",
+                    "FluObject",
+                    "FluPaneItem",
+                    "FluPaneItemExpander",
+                    "FluPaneItemHeader",
+                    "FluPaneItemSeparator",
+                    "FluPivot",
+                    "FluPivotItem",
+                    "FluProgressBar",
+                    "FluProgressRing",
+                    "FluRadioButton",
+                    "FluRectangle",
+                    "FluScrollablePage",
+                    "FluScrollBar",
+                    "FluShadow",
+                    "FluSlider",
+                    "FluTabView",
+                    "FluText",
+                    "FluTextArea",
+                    "FluTextBox",
+                    "FluTextBoxBackground",
+                    "FluTextBoxMenu",
+                    "FluTextButton",
+                    "FluTextFiled",
+                    "FluTimePicker",
+                    "FluToggleSwitch",
+                    "FluTooltip",
+                    "FluTreeView",
+                    "FluWindow",
+                    "FluWindowResize",
+                    "FluToggleButton",
+                    "FluTableView",
+                    "FluColors",
+                    "FluTheme",
+                    "FluStatusView",
+                    "FluRatingControl",
+                    "FluPasswordBox",
+                    "FluBreadcrumbBar",
+                    "FluCopyableText",
+                    "FluAcrylic"
+                ];
+        code = code.replace(/\n/g, "<br>");
+        code = code.replace(/ /g, "&nbsp;");
+        return code.replace(RegExp("\\b(" + qmlKeywords.join("|") + ")\\b", "g"), "<span style='color: #c23a80'>$1</span>");
     }
 
 
diff --git a/example/src/AppInfo.cpp b/example/src/AppInfo.cpp
index 91a2d08f..734ae203 100644
--- a/example/src/AppInfo.cpp
+++ b/example/src/AppInfo.cpp
@@ -1,7 +1,9 @@
 #include "AppInfo.h"
+
+#include <QQmlContext>
+#include <QDebug>
 #include "lang/En.h"
 #include "lang/Zh.h"
-#include <QDebug>
 
 #define STR(x) #x
 #define VER_JOIN(a,b,c,d) STR(a.b.c.d)
@@ -15,6 +17,16 @@ AppInfo::AppInfo(QObject *parent)
     lang(new En());
 }
 
+void AppInfo::init(QQmlApplicationEngine *engine){
+    QQmlContext * context = engine->rootContext();
+    Lang* lang = this->lang();
+    context->setContextProperty("lang",lang);
+    QObject::connect(this,&AppInfo::langChanged,this,[=]{
+        context->setContextProperty("lang",this->lang());
+    });
+    context->setContextProperty("appInfo",this);
+}
+
 void AppInfo::changeLang(const QString& locale){
     if(_lang){
         _lang->deleteLater();
@@ -27,3 +39,18 @@ void AppInfo::changeLang(const QString& locale){
         lang(new En());
     }
 }
+
+bool AppInfo::isOwnerProcess(IPC *ipc){
+    QString activeWindowEvent = "activeWindow";
+    if(!ipc->isCurrentOwner()){
+        ipc->postEvent(activeWindowEvent,QString().toUtf8(),0);
+        return false;
+    }
+    if(ipc->isAttached()){
+        ipc->registerEventHandler(activeWindowEvent,[=](const QByteArray&){
+            Q_EMIT this->activeWindow();
+            return true;
+        });
+    }
+    return true;
+}
diff --git a/example/src/AppInfo.h b/example/src/AppInfo.h
index 828152b0..8e3fb9d1 100644
--- a/example/src/AppInfo.h
+++ b/example/src/AppInfo.h
@@ -2,6 +2,8 @@
 #define APPINFO_H
 
 #include <QObject>
+#include <QQmlApplicationEngine>
+#include "tool/IPC.h"
 #include "lang/Lang.h"
 #include "stdafx.h"
 
@@ -12,6 +14,8 @@ class AppInfo : public QObject
     Q_PROPERTY_AUTO(Lang*,lang)
 public:
     explicit AppInfo(QObject *parent = nullptr);
+    void init(QQmlApplicationEngine *engine);
+    bool isOwnerProcess(IPC *ipc);
     Q_INVOKABLE void changeLang(const QString& locale);
     Q_SIGNAL void activeWindow();
 };
diff --git a/example/src/main.cpp b/example/src/main.cpp
index d923b320..e3f1d2cf 100644
--- a/example/src/main.cpp
+++ b/example/src/main.cpp
@@ -6,13 +6,11 @@
 #include <QProcess>
 #include <FramelessHelper/Quick/framelessquickmodule.h>
 #include <FramelessHelper/Core/private/framelessconfig_p.h>
-#include "lang/Lang.h"
 #include "AppInfo.h"
-#include "tool/IPC.h"
 
 FRAMELESSHELPER_USE_NAMESPACE
 
-    int main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
     //将样式设置为Basic,不然会导致组件显示异常
     qputenv("QT_QUICK_CONTROLS_STYLE","Basic");
@@ -31,28 +29,13 @@ FRAMELESSHELPER_USE_NAMESPACE
 #endif
     AppInfo* appInfo = new AppInfo();
     IPC ipc(0);
-    QString activeWindowEvent = "activeWindow";
-    if(!ipc.isCurrentOwner()){
-        ipc.postEvent(activeWindowEvent,QString().toUtf8(),0);
-        delete appInfo;
+    if(!appInfo->isOwnerProcess(&ipc)){
         return 0;
     }
-    if(ipc.isAttached()){
-        ipc.registerEventHandler(activeWindowEvent,[&appInfo](const QByteArray&){
-            Q_EMIT appInfo->activeWindow();
-            return true;
-        });
-    }
     app.setQuitOnLastWindowClosed(false);
     QQmlApplicationEngine engine;
     FramelessHelper::Quick::registerTypes(&engine);
-    QQmlContext * context = engine.rootContext();
-    Lang* lang = appInfo->lang();
-    context->setContextProperty("lang",lang);
-    QObject::connect(appInfo,&AppInfo::langChanged,&app,[context,appInfo]{
-        context->setContextProperty("lang",appInfo->lang());
-    });
-    context->setContextProperty("appInfo",appInfo);
+    appInfo->init(&engine);
     const QUrl url(QStringLiteral("qrc:/example/qml/App.qml"));
     //    const QUrl url(QStringLiteral("qrc:/example/qml/TestWindow.qml"));
     QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
diff --git a/src/FluApp.cpp b/src/FluApp.cpp
index 5e4e0676..eb6966ed 100644
--- a/src/FluApp.cpp
+++ b/src/FluApp.cpp
@@ -23,11 +23,9 @@ FluApp *FluApp::getInstance()
 FluApp::FluApp(QObject *parent)
     : QObject{parent}
 {
-    QFontDatabase::addApplicationFont(":/FluentUI/Font/Segoe_Fluent_Icons.ttf");
 }
 
 FluApp::~FluApp(){
-
 }
 
 void FluApp::init(QQuickWindow *window){
diff --git a/src/FluApp.h b/src/FluApp.h
index ecdbcbfa..d116455f 100644
--- a/src/FluApp.h
+++ b/src/FluApp.h
@@ -27,6 +27,7 @@ class FluApp : public QObject
      */
     Q_PROPERTY_AUTO(QJsonObject,routes);
 
+    QML_FOREIGN(FluApp)
     QML_NAMED_ELEMENT(FluApp)
     QML_SINGLETON
 private:
diff --git a/src/imports/FluentUI/Controls/FluDivider.qml b/src/imports/FluentUI/Controls/FluDivider.qml
index 3efaa46b..b41ef1c0 100644
--- a/src/imports/FluentUI/Controls/FluDivider.qml
+++ b/src/imports/FluentUI/Controls/FluDivider.qml
@@ -4,9 +4,4 @@ import FluentUI
 
 Rectangle {
     color: FluTheme.dark ? Window.active ? Qt.rgba(55/255,55/255,55/255,1):Qt.rgba(45/255,45/255,45/255,1) : Qt.rgba(226/255,230/255,234/255,1)
-    Behavior on color{
-        ColorAnimation {
-            duration: 300
-        }
-    }
 }
diff --git a/src/imports/FluentUI/Controls/FluIcon.qml b/src/imports/FluentUI/Controls/FluIcon.qml
index 156990aa..cade7301 100644
--- a/src/imports/FluentUI/Controls/FluIcon.qml
+++ b/src/imports/FluentUI/Controls/FluIcon.qml
@@ -13,4 +13,9 @@ Text {
     verticalAlignment: Text.AlignVCenter
     color: iconColor
     text: (String.fromCharCode(iconSource).toString(16))
+
+    FontLoader{
+        source: "../Font/Segoe_Fluent_Icons.ttf"
+    }
+
 }
diff --git a/src/imports/FluentUI/Controls/FluIconButton.qml b/src/imports/FluentUI/Controls/FluIconButton.qml
index cdd28aed..05231efc 100644
--- a/src/imports/FluentUI/Controls/FluIconButton.qml
+++ b/src/imports/FluentUI/Controls/FluIconButton.qml
@@ -51,17 +51,15 @@ Button {
         }
     }
     contentItem: Item{
-        Text {
+        FluIcon {
             id:text_icon
-            font.family: "Segoe Fluent Icons"
             font.pixelSize: iconSize
-            width: iconSize
-            height: iconSize
+            iconSize: control.iconSize
             horizontalAlignment: Text.AlignHCenter
             verticalAlignment: Text.AlignVCenter
             anchors.centerIn: parent
-            color:control.iconColor
-            text: (String.fromCharCode(iconSource).toString(16));
+            iconColor: control.iconColor
+            iconSource: control.iconSource;
         }
         FluTooltip{
             id:tool_tip