From 8b6bce4e3df5a6e27142164901fc0240a004a592 Mon Sep 17 00:00:00 2001 From: amass <168062547@qq.com> Date: Sat, 31 Aug 2024 04:13:21 +0800 Subject: [PATCH] add basic. --- Examples/FluentWindow/main.cpp | 2 + Fluent/AccentColor.cpp | 4 + Fluent/AccentColor.h | 22 + Fluent/CMakeLists.txt | 21 +- Fluent/CircularReveal.cpp | 66 +++ Fluent/CircularReveal.h | 31 ++ Fluent/Colors.cpp | 135 ++++++ Fluent/Colors.h | 56 +++ Fluent/Frameless.cpp | 363 +++++++++++++++- Fluent/Frameless.h | 9 + Fluent/TextStyle.cpp | 48 +++ Fluent/TextStyle.h | 25 ++ Fluent/Theme.cpp | 100 +++++ Fluent/Theme.h | 33 +- Fluent/Utilities.cpp | 61 +++ Fluent/Utilities.h | 82 ++++ Fluent/qml/Acrylic.qml | 66 +-- Fluent/qml/AppBar.qml | 368 ++++++++++++---- Fluent/qml/Button.qml | 64 +++ Fluent/qml/ContentDialog.qml | 164 +++++++ Fluent/qml/ControlBackground.qml | 52 +++ Fluent/qml/FilledButton.qml | 60 +++ Fluent/qml/FocusRectangle.qml | 20 + Fluent/qml/Icon.qml | 40 +- Fluent/qml/IconButton.qml | 159 +++++-- Fluent/qml/Image.qml | 48 +++ Fluent/qml/ImageButton.qml | 17 + Fluent/qml/InfoBar.qml | 488 +++++++++++---------- Fluent/qml/Loader.qml | 5 + Fluent/qml/Object.qml | 14 +- Fluent/qml/Popup.qml | 54 +++ Fluent/qml/ProgressRing.qml | 92 ++++ Fluent/qml/Router.qml | 83 +++- Fluent/qml/ScrollBar.qml | 187 ++++++++ Fluent/qml/Shadow.qml | 11 +- Fluent/qml/Text.qml | 7 +- Fluent/qml/Tooltip.qml | 31 ++ Fluent/qml/Window.qml | 573 +++++++++++++++++-------- Fluent/resources/FluentIcons.ttf | Bin 0 -> 408752 bytes Fluent/resources/btn_close_hovered.png | Bin 0 -> 10314 bytes Fluent/resources/btn_close_normal.png | Bin 0 -> 10096 bytes Fluent/resources/btn_close_pushed.png | Bin 0 -> 10276 bytes Fluent/resources/btn_max_hovered.png | Bin 0 -> 10301 bytes Fluent/resources/btn_max_normal.png | Bin 0 -> 10128 bytes Fluent/resources/btn_max_pushed.png | Bin 0 -> 10412 bytes Fluent/resources/btn_min_hovered.png | Bin 0 -> 10143 bytes Fluent/resources/btn_min_normal.png | Bin 0 -> 10083 bytes Fluent/resources/btn_min_pushed.png | Bin 0 -> 10260 bytes 48 files changed, 3029 insertions(+), 632 deletions(-) create mode 100644 Fluent/AccentColor.cpp create mode 100644 Fluent/AccentColor.h create mode 100644 Fluent/CircularReveal.cpp create mode 100644 Fluent/CircularReveal.h create mode 100644 Fluent/Colors.cpp create mode 100644 Fluent/Colors.h create mode 100644 Fluent/TextStyle.cpp create mode 100644 Fluent/TextStyle.h create mode 100644 Fluent/qml/Button.qml create mode 100644 Fluent/qml/ContentDialog.qml create mode 100644 Fluent/qml/ControlBackground.qml create mode 100644 Fluent/qml/FilledButton.qml create mode 100644 Fluent/qml/FocusRectangle.qml create mode 100644 Fluent/qml/Image.qml create mode 100644 Fluent/qml/ImageButton.qml create mode 100644 Fluent/qml/Loader.qml create mode 100644 Fluent/qml/Popup.qml create mode 100644 Fluent/qml/ProgressRing.qml create mode 100644 Fluent/qml/ScrollBar.qml create mode 100644 Fluent/qml/Tooltip.qml create mode 100644 Fluent/resources/FluentIcons.ttf create mode 100644 Fluent/resources/btn_close_hovered.png create mode 100644 Fluent/resources/btn_close_normal.png create mode 100644 Fluent/resources/btn_close_pushed.png create mode 100644 Fluent/resources/btn_max_hovered.png create mode 100644 Fluent/resources/btn_max_normal.png create mode 100644 Fluent/resources/btn_max_pushed.png create mode 100644 Fluent/resources/btn_min_hovered.png create mode 100644 Fluent/resources/btn_min_normal.png create mode 100644 Fluent/resources/btn_min_pushed.png diff --git a/Examples/FluentWindow/main.cpp b/Examples/FluentWindow/main.cpp index 3f98da5..267e69b 100644 --- a/Examples/FluentWindow/main.cpp +++ b/Examples/FluentWindow/main.cpp @@ -2,10 +2,12 @@ #include "Rectangle.h" #include #include +#include int main(int argc, char *argv[]) { LOG(info) << "app start..."; QGuiApplication app(argc, argv); + QQuickStyle::setStyle("Basic"); QQmlApplicationEngine engine; QObject::connect( &engine, &QQmlApplicationEngine::objectCreationFailed, &app, []() { QCoreApplication::exit(-1); }, diff --git a/Fluent/AccentColor.cpp b/Fluent/AccentColor.cpp new file mode 100644 index 0000000..ba1f472 --- /dev/null +++ b/Fluent/AccentColor.cpp @@ -0,0 +1,4 @@ +#include "AccentColor.h" + +AccentColor::AccentColor(QObject *parent) : QObject{parent} { +} diff --git a/Fluent/AccentColor.h b/Fluent/AccentColor.h new file mode 100644 index 0000000..80aa8c8 --- /dev/null +++ b/Fluent/AccentColor.h @@ -0,0 +1,22 @@ +#ifndef __ACCENTCOLOR_H__ +#define __ACCENTCOLOR_H__ + +#include "Utilities.h" +#include + +class AccentColor : public QObject { + Q_OBJECT + + Q_PROPERTY_AUTO(QColor, darkest) + Q_PROPERTY_AUTO(QColor, darker) + Q_PROPERTY_AUTO(QColor, dark) + Q_PROPERTY_AUTO(QColor, normal) + Q_PROPERTY_AUTO(QColor, light) + Q_PROPERTY_AUTO(QColor, lighter) + Q_PROPERTY_AUTO(QColor, lightest) + QML_ELEMENT +public: + AccentColor(QObject *parent = nullptr); +}; + +#endif // __ACCENTCOLOR_H__ diff --git a/Fluent/CMakeLists.txt b/Fluent/CMakeLists.txt index 964319a..d3daa1e 100644 --- a/Fluent/CMakeLists.txt +++ b/Fluent/CMakeLists.txt @@ -1,5 +1,5 @@ -find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Gui Quick) -find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Gui Quick) +find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Gui Quick QuickControls2) +find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Gui Quick QuickControls2) qt_standard_project_setup(REQUIRES 6.5) @@ -16,25 +16,41 @@ qt6_add_qml_module(Fluent URI Fluent VERSION 1.0 SOURCES + AccentColor.h AccentColor.cpp App.h App.cpp + CircularReveal.h CircularReveal.cpp + Colors.h Colors.cpp Frameless.h Frameless.cpp Icons.h Rectangle.h Rectangle.cpp + TextStyle.h TextStyle.cpp Theme.h Theme.cpp Utilities.h Utilities.cpp QML_FILES qml/Acrylic.qml qml/AppBar.qml + qml/Button.qml + qml/ContentDialog.qml + qml/ControlBackground.qml + qml/FilledButton.qml + qml/FocusRectangle.qml qml/Icon.qml qml/IconButton.qml + qml/ImageButton.qml qml/InfoBar.qml + qml/Loader.qml qml/Object.qml + qml/Popup.qml + qml/ProgressRing.qml qml/Router.qml + qml/ScrollBar.qml qml/Shadow.qml qml/Text.qml + qml/Tooltip.qml qml/Window.qml RESOURCES resources/noise.png + resources/FluentIcons.ttf ) target_include_directories(Fluent @@ -44,4 +60,5 @@ target_include_directories(Fluent target_link_libraries(Fluent PUBLIC Qt${QT_VERSION_MAJOR}::Gui PRIVATE Qt${QT_VERSION_MAJOR}::Quick + INTERFACE Qt${QT_VERSION_MAJOR}::QuickControls2 ) diff --git a/Fluent/CircularReveal.cpp b/Fluent/CircularReveal.cpp new file mode 100644 index 0000000..13c1184 --- /dev/null +++ b/Fluent/CircularReveal.cpp @@ -0,0 +1,66 @@ +#include "CircularReveal.h" +#include +#include +#include + +CircularReveal::CircularReveal(QQuickItem *parent) : QQuickPaintedItem(parent) { + m_target = nullptr; + m_radius = 0; + _anim = new QPropertyAnimation(this, "radius", this); + _anim->setDuration(333); + _anim->setEasingCurve(QEasingCurve::OutCubic); + setVisible(false); + connect(_anim, &QPropertyAnimation::finished, this, [=]() { + update(); + setVisible(false); + Q_EMIT animationFinished(); + }); + connect(this, &CircularReveal::radiusChanged, this, [=]() { update(); }); +} + +void CircularReveal::paint(QPainter *painter) { + painter->save(); + painter->drawImage(QRect(0, 0, static_cast(width()), static_cast(height())), _source); + QPainterPath path; + path.moveTo(_center.x(), _center.y()); + path.addEllipse(QPointF(_center.x(), _center.y()), m_radius, m_radius); + painter->setCompositionMode(QPainter::CompositionMode_Clear); + if (m_darkToLight) { + painter->fillPath(path, Qt::white); + } else { + QPainterPath outerRect; + outerRect.addRect(0, 0, width(), height()); + outerRect = outerRect.subtracted(path); + painter->fillPath(outerRect, Qt::black); + } + painter->restore(); +} + +[[maybe_unused]] void CircularReveal::start(int w, int h, const QPoint ¢er, int radius) { + if (_anim->state() == QAbstractAnimation::Running) { + _anim->stop(); + int currentRadius = m_radius; + _anim->setStartValue(currentRadius); + _anim->setEndValue(m_darkToLight ? 0 : radius); + } else { + if (m_darkToLight) { + _anim->setStartValue(radius); + _anim->setEndValue(0); + } else { + _anim->setStartValue(0); + _anim->setEndValue(radius); + } + } + _center = center; + _grabResult = m_target->grabToImage(QSize(w, h)); + connect(_grabResult.data(), &QQuickItemGrabResult::ready, this, + &CircularReveal::handleGrabResult); +} + +void CircularReveal::handleGrabResult() { + _grabResult.data()->image().swap(_source); + update(); + setVisible(true); + Q_EMIT imageChanged(); + _anim->start(); +} diff --git a/Fluent/CircularReveal.h b/Fluent/CircularReveal.h new file mode 100644 index 0000000..1f6c35b --- /dev/null +++ b/Fluent/CircularReveal.h @@ -0,0 +1,31 @@ +#ifndef __CIRCULARREVEAL_H__ +#define __CIRCULARREVEAL_H__ + +#include "Utilities.h" +#include +#include +#include +#include + +class CircularReveal : public QQuickPaintedItem { + Q_OBJECT + QML_ELEMENT + Q_PROPERTY_AUTO_P(QQuickItem *, target) + Q_PROPERTY_AUTO(int, radius) + Q_PROPERTY_AUTO(bool, darkToLight) +public: + explicit CircularReveal(QQuickItem *parent = nullptr); + void paint(QPainter *painter) override; + Q_INVOKABLE void start(int w, int h, const QPoint ¢er, int radius); + Q_SIGNAL void imageChanged(); + Q_SIGNAL void animationFinished(); + Q_SLOT void handleGrabResult(); + +private: + QPropertyAnimation *_anim = nullptr; + QImage _source; + QPoint _center; + QSharedPointer _grabResult; +}; + +#endif // __CIRCULARREVEAL_H__ diff --git a/Fluent/Colors.cpp b/Fluent/Colors.cpp new file mode 100644 index 0000000..edf32f9 --- /dev/null +++ b/Fluent/Colors.cpp @@ -0,0 +1,135 @@ +#include "Colors.h" + +Colors *Colors::instance() { + static Colors *self = nullptr; + if (self == nullptr) { + self = new Colors(); + } + return self; +} + +Colors *Colors::create(QQmlEngine *, QJSEngine *) { + auto ret = instance(); + QJSEngine::setObjectOwnership(ret, QJSEngine::CppOwnership); + return ret; +} + +Colors::Colors(QObject *parent) : QObject{parent} { + m_Transparent = QColor(0, 0, 0, 0); + m_Black = QColor(0, 0, 0); + m_White = QColor(255, 255, 255); + m_Grey10 = QColor(250, 249, 248); + m_Grey20 = QColor(243, 242, 241); + m_Grey30 = QColor(237, 235, 233); + m_Grey40 = QColor(225, 223, 221); + m_Grey50 = QColor(210, 208, 206); + m_Grey60 = QColor(200, 198, 196); + m_Grey70 = QColor(190, 185, 184); + m_Grey80 = QColor(179, 176, 173); + m_Grey90 = QColor(161, 159, 157); + m_Grey100 = QColor(151, 149, 146); + m_Grey110 = QColor(138, 136, 134); + m_Grey120 = QColor(121, 119, 117); + m_Grey130 = QColor(96, 94, 92); + m_Grey140 = QColor(72, 70, 68); + m_Grey150 = QColor(59, 58, 57); + m_Grey160 = QColor(50, 49, 48); + m_Grey170 = QColor(41, 40, 39); + m_Grey180 = QColor(37, 36, 35); + m_Grey190 = QColor(32, 31, 30); + m_Grey200 = QColor(27, 26, 25); + m_Grey210 = QColor(22, 21, 20); + m_Grey220 = QColor(17, 16, 15); + + auto yellow = new AccentColor(this); + yellow->darkest(QColor(249, 168, 37)); + yellow->darker(QColor(251, 192, 45)); + yellow->dark(QColor(253, 212, 53)); + yellow->normal(QColor(255, 235, 59)); + yellow->light(QColor(255, 238, 88)); + yellow->lighter(QColor(255, 241, 118)); + yellow->lightest(QColor(255, 245, 155)); + m_Yellow = yellow; + + auto orange = new AccentColor(this); + orange->darkest(QColor(153, 61, 7)); + orange->darker(QColor(172, 68, 8)); + orange->dark(QColor(209, 88, 10)); + orange->normal(QColor(247, 99, 12)); + orange->light(QColor(248, 122, 48)); + orange->lighter(QColor(249, 145, 84)); + orange->lightest(QColor(250, 192, 106)); + m_Orange = orange; + + auto red = new AccentColor(this); + red->darkest(QColor(143, 10, 21)); + red->darker(QColor(162, 11, 24)); + red->dark(QColor(185, 13, 28)); + red->normal(QColor(232, 17, 35)); + red->light(QColor(236, 64, 79)); + red->lighter(QColor(238, 88, 101)); + red->lightest(QColor(240, 107, 118)); + m_Red = red; + + auto magenta = new AccentColor(this); + magenta->darkest(QColor(111, 0, 79)); + magenta->darker(QColor(160, 7, 108)); + magenta->dark(QColor(181, 13, 125)); + magenta->normal(QColor(227, 0, 140)); + magenta->light(QColor(234, 77, 168)); + magenta->lighter(QColor(238, 110, 193)); + magenta->lightest(QColor(241, 140, 213)); + m_Magenta = magenta; + + auto purple = new AccentColor(this); + purple->darkest(QColor(44, 15, 118)); + purple->darker(QColor(61, 15, 153)); + purple->dark(QColor(78, 17, 174)); + purple->normal(QColor(104, 33, 122)); + purple->light(QColor(123, 76, 157)); + purple->lighter(QColor(141, 110, 189)); + purple->lightest(QColor(158, 142, 217)); + m_Purple = purple; + + auto blue = new AccentColor(this); + blue->darkest(QColor(0, 74, 131)); + blue->darker(QColor(0, 84, 148)); + blue->dark(QColor(0, 102, 180)); + blue->normal(QColor(0, 120, 212)); + blue->light(QColor(38, 140, 220)); + blue->lighter(QColor(76, 160, 224)); + blue->lightest(QColor(96, 171, 228)); + m_Blue = blue; + + auto teal = new AccentColor(this); + teal->darkest(QColor(0, 110, 91)); + teal->darker(QColor(0, 124, 103)); + teal->dark(QColor(0, 151, 125)); + teal->normal(QColor(0, 178, 148)); + teal->light(QColor(38, 189, 164)); + teal->lighter(QColor(77, 201, 180)); + teal->lightest(QColor(96, 207, 188)); + m_Teal = teal; + + auto green = new AccentColor(this); + green->darkest(QColor(9, 76, 9)); + green->darker(QColor(12, 93, 12)); + green->dark(QColor(14, 111, 14)); + green->normal(QColor(16, 124, 16)); + green->light(QColor(39, 137, 57)); + green->lighter(QColor(76, 156, 76)); + green->lightest(QColor(106, 173, 106)); + m_Green = green; +} + +AccentColor *Colors::createAccentColor(const QColor &primaryColor) { + auto accentColor = new AccentColor(this); + accentColor->normal(primaryColor); + accentColor->dark(Utilities::instance()->withOpacity(primaryColor, 0.9)); + accentColor->light(Utilities::instance()->withOpacity(primaryColor, 0.9)); + accentColor->darker(Utilities::instance()->withOpacity(accentColor->dark(), 0.8)); + accentColor->lighter(Utilities::instance()->withOpacity(accentColor->light(), 0.8)); + accentColor->darkest(Utilities::instance()->withOpacity(accentColor->darker(), 0.7)); + accentColor->lightest(Utilities::instance()->withOpacity(accentColor->lighter(), 0.7)); + return accentColor; +} diff --git a/Fluent/Colors.h b/Fluent/Colors.h new file mode 100644 index 0000000..6e07eeb --- /dev/null +++ b/Fluent/Colors.h @@ -0,0 +1,56 @@ +#ifndef __COLORS_H__ +#define __COLORS_H__ + +#include "AccentColor.h" +#include "Utilities.h" +#include + +class Colors : public QObject { + Q_OBJECT + + Q_PROPERTY_AUTO(QColor, Transparent) + Q_PROPERTY_AUTO(QColor, Black) + Q_PROPERTY_AUTO(QColor, White) + Q_PROPERTY_AUTO(QColor, Grey10) + Q_PROPERTY_AUTO(QColor, Grey20) + Q_PROPERTY_AUTO(QColor, Grey30) + Q_PROPERTY_AUTO(QColor, Grey40) + Q_PROPERTY_AUTO(QColor, Grey50) + Q_PROPERTY_AUTO(QColor, Grey60) + Q_PROPERTY_AUTO(QColor, Grey70) + Q_PROPERTY_AUTO(QColor, Grey80) + Q_PROPERTY_AUTO(QColor, Grey90) + Q_PROPERTY_AUTO(QColor, Grey100) + Q_PROPERTY_AUTO(QColor, Grey110) + Q_PROPERTY_AUTO(QColor, Grey120) + Q_PROPERTY_AUTO(QColor, Grey130) + Q_PROPERTY_AUTO(QColor, Grey140) + Q_PROPERTY_AUTO(QColor, Grey150) + Q_PROPERTY_AUTO(QColor, Grey160) + Q_PROPERTY_AUTO(QColor, Grey170) + Q_PROPERTY_AUTO(QColor, Grey180) + Q_PROPERTY_AUTO(QColor, Grey190) + Q_PROPERTY_AUTO(QColor, Grey200) + Q_PROPERTY_AUTO(QColor, Grey210) + Q_PROPERTY_AUTO(QColor, Grey220) + Q_PROPERTY_AUTO_P(AccentColor *, Yellow) + Q_PROPERTY_AUTO_P(AccentColor *, Orange) + Q_PROPERTY_AUTO_P(AccentColor *, Red) + Q_PROPERTY_AUTO_P(AccentColor *, Magenta) + Q_PROPERTY_AUTO_P(AccentColor *, Purple) + Q_PROPERTY_AUTO_P(AccentColor *, Blue) + Q_PROPERTY_AUTO_P(AccentColor *, Teal) + Q_PROPERTY_AUTO_P(AccentColor *, Green) + QML_ELEMENT + QML_SINGLETON + +public: + static Colors *instance(); + static Colors *create(QQmlEngine *, QJSEngine *); + Q_INVOKABLE AccentColor *createAccentColor(const QColor &primaryColor); + +protected: + Colors(QObject *parent = nullptr); +}; + +#endif // __COLORS_H__ diff --git a/Fluent/Frameless.cpp b/Fluent/Frameless.cpp index 3994172..7632e8d 100644 --- a/Fluent/Frameless.cpp +++ b/Fluent/Frameless.cpp @@ -1,4 +1,5 @@ #include "Frameless.h" +#include "Theme.h" #include "Utilities.h" #include #include @@ -19,6 +20,121 @@ static inline void setShadow(HWND hwnd) { } } +enum WINDOWCOMPOSITIONATTRIB { + WCA_UNDEFINED = 0, + WCA_NCRENDERING_ENABLED = 1, + WCA_NCRENDERING_POLICY = 2, + WCA_TRANSITIONS_FORCEDISABLED = 3, + WCA_ALLOW_NCPAINT = 4, + WCA_CAPTION_BUTTON_BOUNDS = 5, + WCA_NONCLIENT_RTL_LAYOUT = 6, + WCA_FORCE_ICONIC_REPRESENTATION = 7, + WCA_EXTENDED_FRAME_BOUNDS = 8, + WCA_HAS_ICONIC_BITMAP = 9, + WCA_THEME_ATTRIBUTES = 10, + WCA_NCRENDERING_EXILED = 11, + WCA_NCADORNMENTINFO = 12, + WCA_EXCLUDED_FROM_LIVEPREVIEW = 13, + WCA_VIDEO_OVERLAY_ACTIVE = 14, + WCA_FORCE_ACTIVEWINDOW_APPEARANCE = 15, + WCA_DISALLOW_PEEK = 16, + WCA_CLOAK = 17, + WCA_CLOAKED = 18, + WCA_ACCENT_POLICY = 19, + WCA_FREEZE_REPRESENTATION = 20, + WCA_EVER_UNCLOAKED = 21, + WCA_VISUAL_OWNER = 22, + WCA_HOLOGRAPHIC = 23, + WCA_EXCLUDED_FROM_DDA = 24, + WCA_PASSIVEUPDATEMODE = 25, + WCA_USEDARKMODECOLORS = 26, + WCA_CORNER_STYLE = 27, + WCA_PART_COLOR = 28, + WCA_DISABLE_MOVESIZE_FEEDBACK = 29, + WCA_LAST = 30 +}; + +enum _DWM_SYSTEMBACKDROP_TYPE { + _DWMSBT_AUTO, // [Default] Let DWM automatically decide the system-drawn backdrop for this + // window. + _DWMSBT_NONE, // [Disable] Do not draw any system backdrop. + _DWMSBT_MAINWINDOW, // [Mica] Draw the backdrop material effect corresponding to a + // long-lived window. + _DWMSBT_TRANSIENTWINDOW, // [Acrylic] Draw the backdrop material effect corresponding to a + // transient window. + _DWMSBT_TABBEDWINDOW, // [Mica Alt] Draw the backdrop material effect corresponding to a + // window with a tabbed title bar. +}; + +enum ACCENT_STATE { + ACCENT_DISABLED = 0, + ACCENT_ENABLE_GRADIENT = 1, + ACCENT_ENABLE_TRANSPARENTGRADIENT = 2, + ACCENT_ENABLE_BLURBEHIND = 3, // Traditional DWM blur + ACCENT_ENABLE_ACRYLICBLURBEHIND = 4, // RS4 1803 + ACCENT_ENABLE_HOST_BACKDROP = 5, // RS5 1809 + ACCENT_INVALID_STATE = 6 // Using this value will remove the window background +}; + +enum ACCENT_FLAG { + ACCENT_NONE = 0, + ACCENT_ENABLE_ACRYLIC = 1, + ACCENT_ENABLE_ACRYLIC_WITH_LUMINOSITY = 482, +}; + +struct WINDOWCOMPOSITIONATTRIBDATA { + WINDOWCOMPOSITIONATTRIB Attrib; + PVOID pvData; + SIZE_T cbData; +}; +using PWINDOWCOMPOSITIONATTRIBDATA = WINDOWCOMPOSITIONATTRIBDATA *; + +struct ACCENT_POLICY { + DWORD dwAccentState; + DWORD dwAccentFlags; + DWORD dwGradientColor; // #AABBGGRR + DWORD dwAnimationId; +}; +using PACCENT_POLICY = ACCENT_POLICY *; + +typedef HRESULT(WINAPI *DwmSetWindowAttributeFunc)(HWND hwnd, DWORD dwAttribute, LPCVOID pvAttribute, + DWORD cbAttribute); +typedef HRESULT(WINAPI *DwmExtendFrameIntoClientAreaFunc)(HWND hwnd, const MARGINS *pMarInset); +typedef HRESULT(WINAPI *DwmIsCompositionEnabledFunc)(BOOL *pfEnabled); +typedef HRESULT(WINAPI *DwmEnableBlurBehindWindowFunc)(HWND hWnd, const DWM_BLURBEHIND *pBlurBehind); +typedef BOOL(WINAPI *SetWindowCompositionAttributeFunc)(HWND hwnd, const WINDOWCOMPOSITIONATTRIBDATA *); + +static DwmSetWindowAttributeFunc pDwmSetWindowAttribute = nullptr; +static DwmExtendFrameIntoClientAreaFunc pDwmExtendFrameIntoClientArea = nullptr; +static DwmIsCompositionEnabledFunc pDwmIsCompositionEnabled = nullptr; +static DwmEnableBlurBehindWindowFunc pDwmEnableBlurBehindWindow = nullptr; +static SetWindowCompositionAttributeFunc pSetWindowCompositionAttribute = nullptr; +static RTL_OSVERSIONINFOW GetRealOSVersionImpl() { + HMODULE hMod = ::GetModuleHandleW(L"ntdll.dll"); + using RtlGetVersionPtr = NTSTATUS(WINAPI *)(PRTL_OSVERSIONINFOW); + auto pRtlGetVersion = reinterpret_cast(::GetProcAddress(hMod, "RtlGetVersion")); + RTL_OSVERSIONINFOW rovi{}; + rovi.dwOSVersionInfoSize = sizeof(rovi); + pRtlGetVersion(&rovi); + return rovi; +} + +RTL_OSVERSIONINFOW GetRealOSVersion() { + static const auto result = GetRealOSVersionImpl(); + return result; +} + +static inline bool isWin7Only() { + RTL_OSVERSIONINFOW rovi = GetRealOSVersion(); + return rovi.dwMajorVersion = 7; +} + +static inline bool isWin11OrGreater() { + RTL_OSVERSIONINFOW rovi = GetRealOSVersion(); + return (rovi.dwMajorVersion > 10) || + (rovi.dwMajorVersion == 10 && rovi.dwMinorVersion >= 0 && rovi.dwBuildNumber >= 22000); +} + static bool containsCursorToItem(QQuickItem *item) { auto window = item->window(); if ((window == nullptr) || !item || !item->isVisible()) { @@ -32,8 +148,189 @@ static bool containsCursorToItem(QQuickItem *item) { return false; } +static inline bool initializeFunctionPointers() { + HMODULE module = LoadLibraryW(L"dwmapi.dll"); + if (module) { + if (!pDwmSetWindowAttribute) { + pDwmSetWindowAttribute = + reinterpret_cast(GetProcAddress(module, "DwmSetWindowAttribute")); + if (!pDwmSetWindowAttribute) { + return false; + } + } + if (!pDwmExtendFrameIntoClientArea) { + pDwmExtendFrameIntoClientArea = reinterpret_cast( + GetProcAddress(module, "DwmExtendFrameIntoClientArea")); + if (!pDwmExtendFrameIntoClientArea) { + return false; + } + } + if (!pDwmIsCompositionEnabled) { + pDwmIsCompositionEnabled = + reinterpret_cast(::GetProcAddress(module, "DwmIsCompositionEnabled")); + if (!pDwmIsCompositionEnabled) { + return false; + } + } + if (!pDwmEnableBlurBehindWindow) { + pDwmEnableBlurBehindWindow = + reinterpret_cast(GetProcAddress(module, "DwmEnableBlurBehindWindow")); + if (!pDwmEnableBlurBehindWindow) { + return false; + } + } + if (!pSetWindowCompositionAttribute) { + HMODULE user32 = LoadLibraryW(L"user32.dll"); + if (!user32) { + return false; + } + pSetWindowCompositionAttribute = reinterpret_cast( + GetProcAddress(user32, "SetWindowCompositionAttribute")); + if (!pSetWindowCompositionAttribute) { + return false; + } + } + } + return true; +} + +static inline bool isWin1122H2OrGreater() { + RTL_OSVERSIONINFOW rovi = GetRealOSVersion(); + return (rovi.dwMajorVersion > 10) || + (rovi.dwMajorVersion == 10 && rovi.dwMinorVersion >= 0 && rovi.dwBuildNumber >= 22621); +} + +static inline bool setWindowDarkMode(HWND hwnd, const BOOL enable) { + if (!initializeFunctionPointers()) { + return false; + } + return bool(pDwmSetWindowAttribute(hwnd, 20, &enable, sizeof(BOOL))); +} + +static inline bool isCompositionEnabled() { + if (initializeFunctionPointers()) { + BOOL composition_enabled = false; + pDwmIsCompositionEnabled(&composition_enabled); + return composition_enabled; + } + return false; +} + +static inline bool isWin8OrGreater() { + RTL_OSVERSIONINFOW rovi = GetRealOSVersion(); + return (rovi.dwMajorVersion > 6) || (rovi.dwMajorVersion == 6 && rovi.dwMinorVersion >= 2); +} + +static inline bool setWindowEffect(HWND hwnd, const QString &key, const bool &enable) { + static constexpr const MARGINS extendedMargins = {-1, -1, -1, -1}; + if (key == QStringLiteral("mica")) { + if (!isWin11OrGreater() || !initializeFunctionPointers()) { + return false; + } + if (enable) { + pDwmExtendFrameIntoClientArea(hwnd, &extendedMargins); + if (isWin1122H2OrGreater()) { + const DWORD backdropType = _DWMSBT_MAINWINDOW; + pDwmSetWindowAttribute(hwnd, 38, &backdropType, sizeof(backdropType)); + } else { + const BOOL enable = TRUE; + pDwmSetWindowAttribute(hwnd, 1029, &enable, sizeof(enable)); + } + } else { + if (isWin1122H2OrGreater()) { + const DWORD backdropType = _DWMSBT_AUTO; + pDwmSetWindowAttribute(hwnd, 38, &backdropType, sizeof(backdropType)); + } else { + const BOOL enable = FALSE; + pDwmSetWindowAttribute(hwnd, 1029, &enable, sizeof(enable)); + } + } + BOOL isDark = Theme::instance()->dark(); + setWindowDarkMode(hwnd, isDark); + return true; + } + + if (key == QStringLiteral("mica-alt")) { + if (!isWin1122H2OrGreater() || !initializeFunctionPointers()) { + return false; + } + if (enable) { + pDwmExtendFrameIntoClientArea(hwnd, &extendedMargins); + const DWORD backdropType = _DWMSBT_TABBEDWINDOW; + pDwmSetWindowAttribute(hwnd, 38, &backdropType, sizeof(backdropType)); + } else { + const DWORD backdropType = _DWMSBT_AUTO; + pDwmSetWindowAttribute(hwnd, 38, &backdropType, sizeof(backdropType)); + } + BOOL isDark = Theme::instance()->dark(); + setWindowDarkMode(hwnd, isDark); + return true; + } + + if (key == QStringLiteral("acrylic")) { + if (!isWin11OrGreater() || !initializeFunctionPointers()) { + return false; + } + if (enable) { + pDwmExtendFrameIntoClientArea(hwnd, &extendedMargins); + DWORD system_backdrop_type = _DWMSBT_TRANSIENTWINDOW; + pDwmSetWindowAttribute(hwnd, 38, &system_backdrop_type, sizeof(DWORD)); + } else { + const DWORD backdropType = _DWMSBT_AUTO; + pDwmSetWindowAttribute(hwnd, 38, &backdropType, sizeof(backdropType)); + } + BOOL isDark = Theme::instance()->dark(); + setWindowDarkMode(hwnd, isDark); + return true; + } + + if (key == QStringLiteral("dwm-blur")) { + if ((isWin7Only() && !isCompositionEnabled()) || !initializeFunctionPointers()) { + return false; + } + BOOL isDark = Theme::instance()->dark(); + setWindowDarkMode(hwnd, isDark && enable); + if (enable) { + if (isWin8OrGreater()) { + ACCENT_POLICY policy{}; + policy.dwAccentState = ACCENT_ENABLE_BLURBEHIND; + policy.dwAccentFlags = ACCENT_NONE; + WINDOWCOMPOSITIONATTRIBDATA wcad{}; + wcad.Attrib = WCA_ACCENT_POLICY; + wcad.pvData = &policy; + wcad.cbData = sizeof(policy); + pSetWindowCompositionAttribute(hwnd, &wcad); + } else { + DWM_BLURBEHIND bb{}; + bb.fEnable = TRUE; + bb.dwFlags = DWM_BB_ENABLE; + pDwmEnableBlurBehindWindow(hwnd, &bb); + } + } else { + if (isWin8OrGreater()) { + ACCENT_POLICY policy{}; + policy.dwAccentState = ACCENT_DISABLED; + policy.dwAccentFlags = ACCENT_NONE; + WINDOWCOMPOSITIONATTRIBDATA wcad{}; + wcad.Attrib = WCA_ACCENT_POLICY; + wcad.pvData = &policy; + wcad.cbData = sizeof(policy); + pSetWindowCompositionAttribute(hwnd, &wcad); + } else { + DWM_BLURBEHIND bb{}; + bb.fEnable = FALSE; + bb.dwFlags = DWM_BB_ENABLE; + pDwmEnableBlurBehindWindow(hwnd, &bb); + } + } + return true; + } + return false; +} + Frameless::Frameless(QQuickItem *parent) : QQuickItem{parent} { m_isWindows11OrGreater = Utilities::instance()->isWindows11OrGreater(); + m_effect = "normal"; } QQuickItem *Frameless::appBar() const { @@ -119,12 +416,36 @@ void Frameless::setHitTestVisible(QQuickItem *item) { } } +void Frameless::showMaximized() { +#ifdef Q_OS_WIN + HWND hwnd = reinterpret_cast(window()->winId()); + ::ShowWindow(hwnd, 3); +#else + window()->setVisibility(QQuickWindow::Maximized); +#endif +} + +void Frameless::showMinimized() { +#ifdef Q_OS_WIN + HWND hwnd = reinterpret_cast(window()->winId()); + ::ShowWindow(hwnd, 2); +#else + window()->setVisibility(QQuickWindow::Minimized); +#endif +} + +void Frameless::showNormal() { + window()->setVisibility(QQuickWindow::Windowed); +} + void Frameless::onDestruction() { QGuiApplication::instance()->removeNativeEventFilter(this); } void Frameless::componentComplete() { - if (m_disabled) return; + if (m_disabled) { + return; + } int w = window()->width(); int h = window()->height(); m_current = window()->winId(); @@ -150,8 +471,12 @@ void Frameless::componentComplete() { #endif HWND hwnd = reinterpret_cast(window()->winId()); DWORD style = ::GetWindowLongPtr(hwnd, GWL_STYLE); +#if (QT_VERSION == QT_VERSION_CHECK(6, 7, 2)) + style &= ~(WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU); +#endif if (m_fixSize) { ::SetWindowLongPtr(hwnd, GWL_STYLE, style | WS_THICKFRAME | WS_CAPTION); + ; for (int i = 0; i <= QGuiApplication::screens().count() - 1; ++i) { connect(QGuiApplication::screens().at(i), &QScreen::logicalDotsPerInchChanged, this, [=] { SetWindowPos(hwnd, nullptr, 0, 0, 0, 0, @@ -171,6 +496,42 @@ void Frameless::componentComplete() { if (!window()->property("_hideShadow").toBool()) { setShadow(hwnd); } + if (isWin11OrGreater()) { + availableEffects({"mica", "mica-alt", "acrylic", "dwm-blur", "normal"}); + } else if (isWin7Only()) { + availableEffects({"dwm-blur", "normal"}); + } + if (!m_effect.isEmpty()) { + effective(setWindowEffect(hwnd, m_effect, true)); + if (effective()) { + m_currentEffect = effect(); + } + } + connect(this, &Frameless::effectChanged, this, [hwnd, this] { + if (effect() == m_currentEffect) { + return; + } + if (effective()) { + setWindowEffect(hwnd, m_currentEffect, false); + } + effective(setWindowEffect(hwnd, effect(), true)); + if (effective()) { + m_currentEffect = effect(); + } else { + m_effect = "normal"; + m_currentEffect = "normal"; + } + }); + connect(Theme::instance(), &Theme::blurBehindWindowEnabledChanged, this, [this] { + if (Theme::instance()->blurBehindWindowEnabled()) { + effect("normal"); + } + }); + connect(Theme::instance(), &Theme::darkChanged, this, [hwnd, this] { + if (effective() && !m_currentEffect.isEmpty() && m_currentEffect != "normal") { + setWindowDarkMode(hwnd, Theme::instance()->dark()); + } + }); #endif auto appBarHeight = m_appBar->height(); h = qRound(h + appBarHeight); diff --git a/Fluent/Frameless.h b/Fluent/Frameless.h index 9b25041..856eb1d 100644 --- a/Fluent/Frameless.h +++ b/Fluent/Frameless.h @@ -1,12 +1,16 @@ #ifndef FRAMELESS_H #define FRAMELESS_H +#include "Utilities.h" #include #include class Frameless : public QQuickItem, QAbstractNativeEventFilter { Q_OBJECT QML_ELEMENT + Q_PROPERTY_AUTO(QString, effect) + Q_PROPERTY_READONLY_AUTO(bool, effective) + Q_PROPERTY_READONLY_AUTO(QStringList, availableEffects) Q_PROPERTY(QQuickItem *appBar READ appBar WRITE setAppBar NOTIFY appBarChanged) Q_PROPERTY(QQuickItem *maximizeButton READ maximizeButton WRITE setMaximizeButton NOTIFY maximizeButtonChanged) Q_PROPERTY(QQuickItem *minimizedButton READ minimizedButton WRITE setMinimizedButton NOTIFY minimizedButtonChanged) @@ -39,6 +43,10 @@ public: bool disabled() const; void setDisabled(bool disabled); + Q_INVOKABLE void showMaximized(); + Q_INVOKABLE void showMinimized(); + Q_INVOKABLE void showNormal(); + Q_INVOKABLE void setHitTestVisible(QQuickItem *item); Q_INVOKABLE void onDestruction(); void componentComplete() final; @@ -77,6 +85,7 @@ private: int m_margins = 8; QList> m_hitTestList; bool m_isWindows11OrGreater = false; + QString m_currentEffect; }; #endif // FRAMELESS_H diff --git a/Fluent/TextStyle.cpp b/Fluent/TextStyle.cpp new file mode 100644 index 0000000..44c8c2a --- /dev/null +++ b/Fluent/TextStyle.cpp @@ -0,0 +1,48 @@ +#include "TextStyle.h" + +TextStyle::TextStyle(QObject *parent) : QObject{parent} { + m_family = QFont().defaultFamily(); +#ifdef Q_OS_WIN + m_family = "微软雅黑"; +#endif + + QFont caption; + caption.setFamily(m_family); + caption.setPixelSize(12); + Caption(caption); + + QFont body; + body.setFamily(m_family); + body.setPixelSize(13); + Body(body); + + QFont bodyStrong; + bodyStrong.setFamily(m_family); + bodyStrong.setPixelSize(13); + bodyStrong.setWeight(QFont::DemiBold); + BodyStrong(bodyStrong); + + QFont subtitle; + subtitle.setFamily(m_family); + subtitle.setPixelSize(20); + subtitle.setWeight(QFont::DemiBold); + Subtitle(subtitle); + + QFont title; + title.setFamily(m_family); + title.setPixelSize(28); + title.setWeight(QFont::DemiBold); + Title(title); + + QFont titleLarge; + titleLarge.setFamily(m_family); + titleLarge.setPixelSize(40); + titleLarge.setWeight(QFont::DemiBold); + TitleLarge(titleLarge); + + QFont display; + display.setFamily(m_family); + display.setPixelSize(68); + display.setWeight(QFont::DemiBold); + Display(display); +} diff --git a/Fluent/TextStyle.h b/Fluent/TextStyle.h new file mode 100644 index 0000000..3b4aa7b --- /dev/null +++ b/Fluent/TextStyle.h @@ -0,0 +1,25 @@ +#ifndef __TEXTSTYLE_H__ +#define __TEXTSTYLE_H__ + +#include "Utilities.h" +#include +#include + +class TextStyle : public QObject { + Q_OBJECT + QML_ELEMENT + QML_SINGLETON + Q_PROPERTY_AUTO(QString, family) + Q_PROPERTY_AUTO(QFont, Caption) + Q_PROPERTY_AUTO(QFont, Body) + Q_PROPERTY_AUTO(QFont, BodyStrong) + Q_PROPERTY_AUTO(QFont, Subtitle) + Q_PROPERTY_AUTO(QFont, Title) + Q_PROPERTY_AUTO(QFont, TitleLarge) + Q_PROPERTY_AUTO(QFont, Display) + +public: + TextStyle(QObject *parent = nullptr); +}; + +#endif // __TEXTSTYLE_H__ diff --git a/Fluent/Theme.cpp b/Fluent/Theme.cpp index 8787632..4ae4891 100644 --- a/Fluent/Theme.cpp +++ b/Fluent/Theme.cpp @@ -1,6 +1,56 @@ #include "Theme.h" +#include "Colors.h" +#include +#include +#include + +static bool systemDark() { + QPalette palette = QGuiApplication::palette(); + QColor color = palette.color(QPalette::Window).rgb(); + return color.red() * 0.2126 + color.green() * 0.7152 + color.blue() * 0.0722 <= 255.0f / 2; +} + +Theme *Theme::instance() { + static Theme *self = nullptr; + if (self == nullptr) { + self = new Theme(); + } + return self; +} + +Theme *Theme::create(QQmlEngine *, QJSEngine *) { + auto ret = instance(); + QJSEngine::setObjectOwnership(ret, QJSEngine::CppOwnership); + return ret; +} Theme::Theme(QObject *parent) : QObject{parent} { + m_accentColor = Colors::instance()->Blue(); + m_darkMode = ThemeType::DarkMode::Light; + m_nativeText = false; + m_animationEnabled = true; + m_systemDark = systemDark(); + m_desktopImagePath = ""; + m_blurBehindWindowEnabled = false; + QGuiApplication::instance()->installEventFilter(this); + refreshColors(); + connect(this, &Theme::darkModeChanged, this, [=] { Q_EMIT darkChanged(); }); + connect(this, &Theme::darkChanged, this, [=] { refreshColors(); }); + connect(this, &Theme::accentColorChanged, this, [=] { refreshColors(); }); + connect(&m_watcher, &QFileSystemWatcher::fileChanged, this, + [=](const QString &path) { Q_EMIT desktopImagePathChanged(); }); + connect(this, &Theme::blurBehindWindowEnabledChanged, this, [=] { checkUpdateDesktopImage(); }); + startTimer(1000); +} + +bool Theme::dark() const { + if (m_darkMode == ThemeType::DarkMode::Dark) { + return true; + } else if (m_darkMode == ThemeType::DarkMode::System) { + return m_systemDark; + } else { + return false; + } } QColor Theme::fontPrimaryColor() const { @@ -79,3 +129,53 @@ void Theme::setBlurBehindWindowEnabled(bool enabled) { emit blurBehindWindowEnabledChanged(); } } + +void Theme::refreshColors() { + auto isDark = dark(); + primaryColor(isDark ? m_accentColor->lighter() : m_accentColor->dark()); + backgroundColor(isDark ? QColor(0, 0, 0, 255) : QColor(255, 255, 255, 255)); + dividerColor(isDark ? QColor(80, 80, 80, 255) : QColor(210, 210, 210, 255)); + setWindowBackgroundColor(isDark ? QColor(32, 32, 32, 255) : QColor(237, 237, 237, 255)); + setWindowActiveBackgroundColor(isDark ? QColor(26, 26, 26, 255) : QColor(243, 243, 243, 255)); + setFontPrimaryColor(isDark ? QColor(248, 248, 248, 255) : QColor(7, 7, 7, 255)); + fontSecondaryColor(isDark ? QColor(222, 222, 222, 255) : QColor(102, 102, 102, 255)); + fontTertiaryColor(isDark ? QColor(200, 200, 200, 255) : QColor(153, 153, 153, 255)); + setItemNormalColor(isDark ? QColor(255, 255, 255, 0) : QColor(0, 0, 0, 0)); + frameColor(isDark ? QColor(56, 56, 56, qRound(255 * 0.8)) : QColor(243, 243, 243, qRound(255 * 0.8))); + frameActiveColor(isDark ? QColor(48, 48, 48, qRound(255 * 0.8)) : QColor(255, 255, 255, qRound(255 * 0.8))); + setItemHoverColor(isDark ? QColor(255, 255, 255, qRound(255 * 0.06)) : QColor(0, 0, 0, qRound(255 * 0.03))); + itemPressColor(isDark ? QColor(255, 255, 255, qRound(255 * 0.09)) : QColor(0, 0, 0, qRound(255 * 0.06))); + itemCheckColor(isDark ? QColor(255, 255, 255, qRound(255 * 0.12)) : QColor(0, 0, 0, qRound(255 * 0.09))); +} + +void Theme::checkUpdateDesktopImage() { + if (!m_blurBehindWindowEnabled) { + return; + } + QThreadPool::globalInstance()->start([=]() { + m_mutex.lock(); + auto path = Utilities::instance()->getWallpaperFilePath(); + if (m_desktopImagePath != path) { + if (!m_desktopImagePath.isEmpty()) { + m_watcher.removePath(m_desktopImagePath); + } + setDesktopImagePath(path); + m_watcher.addPath(path); + } + m_mutex.unlock(); + }); +} + +bool Theme::eventFilter(QObject *, QEvent *event) { + if (event->type() == QEvent::ApplicationPaletteChange || event->type() == QEvent::ThemeChange) { + m_systemDark = systemDark(); + Q_EMIT darkChanged(); + event->accept(); + return true; + } + return false; +} + +void Theme::timerEvent(QTimerEvent *event) { + checkUpdateDesktopImage(); +} diff --git a/Fluent/Theme.h b/Fluent/Theme.h index 36131f3..88c4c8f 100644 --- a/Fluent/Theme.h +++ b/Fluent/Theme.h @@ -1,7 +1,11 @@ #ifndef THEME_H #define THEME_H +#include "AccentColor.h" +#include "Utilities.h" #include +#include +#include #include #include @@ -9,7 +13,21 @@ class Theme : public QObject { Q_OBJECT QML_ELEMENT QML_SINGLETON + Q_PROPERTY(bool dark READ dark NOTIFY darkChanged) + Q_PROPERTY_AUTO_P(AccentColor *, accentColor) + Q_PROPERTY_AUTO(int, darkMode) + Q_PROPERTY_AUTO(QColor, primaryColor) + Q_PROPERTY_AUTO(QColor, backgroundColor) + Q_PROPERTY_AUTO(QColor, dividerColor) + Q_PROPERTY_AUTO(QColor, itemPressColor) + Q_PROPERTY_AUTO(bool, nativeText) + Q_PROPERTY_AUTO(bool, animationEnabled) Q_PROPERTY(QColor fontPrimaryColor READ fontPrimaryColor WRITE setFontPrimaryColor NOTIFY fontPrimaryColorChanged) + Q_PROPERTY_AUTO(QColor, fontSecondaryColor) + Q_PROPERTY_AUTO(QColor, fontTertiaryColor) + Q_PROPERTY_AUTO(QColor, frameColor) + Q_PROPERTY_AUTO(QColor, frameActiveColor) + Q_PROPERTY_AUTO(QColor, itemCheckColor) Q_PROPERTY(QColor itemNormalColor READ itemNormalColor WRITE setItemNormalColor NOTIFY itemNormalColorChanged) Q_PROPERTY(QColor itemHoverColor READ itemHoverColor WRITE setItemHoverColor NOTIFY itemHoverColorChanged) @@ -23,7 +41,9 @@ class Theme : public QObject { blurBehindWindowEnabledChanged) public: - Theme(QObject *parent = nullptr); + static Theme *instance(); + static Theme *create(QQmlEngine *, QJSEngine *); + bool dark() const; QColor fontPrimaryColor() const; void setFontPrimaryColor(const QColor &color); @@ -47,6 +67,7 @@ public: void setBlurBehindWindowEnabled(bool enabled); signals: + void darkChanged(); void fontPrimaryColorChanged(); void itemNormalColorChanged(); void windowBackgroundColorChanged(); @@ -55,7 +76,17 @@ signals: void blurBehindWindowEnabledChanged(); void itemHoverColorChanged(); +protected: + Theme(QObject *parent = nullptr); + void refreshColors(); + void checkUpdateDesktopImage(); + void timerEvent(QTimerEvent *event) final; + bool eventFilter(QObject *obj, QEvent *event) final; + private: + bool m_systemDark = false; + QMutex m_mutex; + QFileSystemWatcher m_watcher; QColor m_fontPrimaryColor; QColor m_itemNormalColor; QColor m_itemHoverColor; diff --git a/Fluent/Utilities.cpp b/Fluent/Utilities.cpp index 2091f5c..dd43438 100644 --- a/Fluent/Utilities.cpp +++ b/Fluent/Utilities.cpp @@ -1,5 +1,6 @@ #include "Utilities.h" #include +#include Utilities *Utilities::instance() { static Utilities *self = nullptr; @@ -18,10 +19,70 @@ Utilities *Utilities::create(QQmlEngine *, QJSEngine *) { Utilities::Utilities(QObject *parent) : QObject{parent} { } +bool Utilities::isSoftware() { + return QQuickWindow::sceneGraphBackend() == "software"; +} + +void Utilities::deleteLater(QObject *p) { + if (p) { + p->deleteLater(); + } +} + +QColor Utilities::withOpacity(const QColor &color, qreal opacity) { + int alpha = qRound(opacity * 255) & 0xff; + return QColor::fromRgba((alpha << 24) | (color.rgba() & 0xffffff)); +} + QRect Utilities::desktopAvailableGeometry(QQuickWindow *window) { return window->screen()->availableGeometry(); } +QString Utilities::getWallpaperFilePath() { +#if defined(Q_OS_WIN) + wchar_t path[MAX_PATH] = {}; + if (::SystemParametersInfoW(SPI_GETDESKWALLPAPER, MAX_PATH, path, FALSE) == FALSE) { + return {}; + } + return QString::fromWCharArray(path); +#elif defined(Q_OS_LINUX) + auto type = QSysInfo::productType(); + if (type == "uos") { + QProcess process; + QStringList args; + args << "--session"; + args << "--type=method_call"; + args << "--print-reply"; + args << "--dest=com.deepin.wm"; + args << "/com/deepin/wm"; + args << "com.deepin.wm.GetCurrentWorkspaceBackgroundForMonitor"; + args << QString("string:'%1'").arg(currentTimestamp()); + process.start("dbus-send", args); + process.waitForFinished(); + QByteArray result = process.readAllStandardOutput().trimmed(); + int startIndex = result.indexOf("file:///"); + if (startIndex != -1) { + auto path = result.mid(startIndex + 7, result.length() - startIndex - 8); + return path; + } + } +#elif defined(Q_OS_MACOS) + QProcess process; + QStringList args; + args << "-e"; + args << R"(tell application "Finder" to get POSIX path of (desktop picture as alias))"; + process.start("osascript", args); + process.waitForFinished(); + QByteArray result = process.readAllStandardOutput().trimmed(); + if (result.isEmpty()) { + return "/System/Library/CoreServices/DefaultDesktop.heic"; + } + return result; +#else + return {}; +#endif +} + QUrl Utilities::getUrlByFilePath(const QString &path) { return QUrl::fromLocalFile(path); } diff --git a/Fluent/Utilities.h b/Fluent/Utilities.h index 8279333..f6242dd 100644 --- a/Fluent/Utilities.h +++ b/Fluent/Utilities.h @@ -5,6 +5,84 @@ #include #include +#define Q_PROPERTY_AUTO(TYPE, M) \ + Q_PROPERTY(TYPE M MEMBER m_##M NOTIFY M##Changed) \ +public: \ + Q_SIGNAL void M##Changed(); \ + void M(const TYPE &in_##M) { \ + m_##M = in_##M; \ + Q_EMIT M##Changed(); \ + } \ + TYPE M() { \ + return m_##M; \ + } \ + \ +private: \ + TYPE m_##M; + +#define Q_PROPERTY_READONLY_AUTO(TYPE, M) \ + Q_PROPERTY(TYPE M READ M NOTIFY M##Changed FINAL) \ +public: \ + Q_SIGNAL void M##Changed(); \ + void M(const TYPE &in_##M) { \ + m_##M = in_##M; \ + Q_EMIT M##Changed(); \ + } \ + TYPE M() { \ + return m_##M; \ + } \ + \ +private: \ + TYPE m_##M; + +#define Q_PROPERTY_AUTO_P(TYPE, M) \ + Q_PROPERTY(TYPE M MEMBER m_##M NOTIFY M##Changed) \ +public: \ + Q_SIGNAL void M##Changed(); \ + void M(TYPE in_##M) { \ + m_##M = in_##M; \ + Q_EMIT M##Changed(); \ + } \ + TYPE M() { \ + return m_##M; \ + } \ + \ +private: \ + TYPE m_##M; + +namespace WindowType { +Q_NAMESPACE +enum LaunchMode { + Standard = 0x0000, + SingleTask = 0x0001, + SingleInstance = 0x0002, +}; +Q_ENUM_NS(LaunchMode) +QML_ELEMENT +} // namespace WindowType + +namespace ThemeType { +Q_NAMESPACE +enum DarkMode { + System = 0x0000, + Light = 0x0001, + Dark = 0x0002, +}; +Q_ENUM_NS(DarkMode) +QML_ELEMENT +} // namespace ThemeType + +namespace ContentDialogType { +Q_NAMESPACE +enum ButtonFlag { + NeutralButton = 0x0001, + NegativeButton = 0x0002, + PositiveButton = 0x0004, +}; +Q_ENUM_NS(ButtonFlag) +QML_ELEMENT +} // namespace ContentDialogType + class Utilities : public QObject { Q_OBJECT QML_ELEMENT @@ -18,6 +96,10 @@ public: Q_INVOKABLE bool isMacos(); Q_INVOKABLE QRect desktopAvailableGeometry(QQuickWindow *window); Q_INVOKABLE QUrl getUrlByFilePath(const QString &path); + Q_INVOKABLE bool isSoftware(); + Q_INVOKABLE void deleteLater(QObject *p); + Q_INVOKABLE QColor withOpacity(const QColor &, qreal alpha); + Q_INVOKABLE QString getWallpaperFilePath(); protected: Utilities(QObject *parent = nullptr); diff --git a/Fluent/qml/Acrylic.qml b/Fluent/qml/Acrylic.qml index 61c97b0..0efb8c2 100644 --- a/Fluent/qml/Acrylic.qml +++ b/Fluent/qml/Acrylic.qml @@ -1,33 +1,33 @@ -import QtQuick - -Item { - id: control - property color tintColor: Qt.rgba(1, 1, 1, 1) - property real tintOpacity: 0.65 - property real luminosity: 0.01 - property real noiseOpacity: 0.02 - property var target - property int blurRadius: 32 - property rect targetRect: Qt.rect(control.x, control.y, control.width,control.height) - ShaderEffectSource { - id: effect_source - anchors.fill: parent - visible: false - sourceRect: control.targetRect - sourceItem: control.target - } - Rectangle { - anchors.fill: parent - color: Qt.rgba(1, 1, 1, luminosity) - } - Rectangle { - anchors.fill: parent - color: Qt.rgba(tintColor.r, tintColor.g, tintColor.b, tintOpacity) - } - Image { - anchors.fill: parent - source: "qrc:/qt/qml/Fluent/resources/noise.png" - fillMode: Image.Tile - opacity: control.noiseOpacity - } -} +import QtQuick + +Item { + id: control + property color tintColor: Qt.rgba(1, 1, 1, 1) + property real tintOpacity: 0.65 + property real luminosity: 0.01 + property real noiseOpacity: 0.02 + property var target + property int blurRadius: 32 + property rect targetRect: Qt.rect(control.x, control.y, control.width,control.height) + ShaderEffectSource { + id: effect_source + anchors.fill: parent + visible: false + sourceRect: control.targetRect + sourceItem: control.target + } + Rectangle { + anchors.fill: parent + color: Qt.rgba(1, 1, 1, luminosity) + } + Rectangle { + anchors.fill: parent + color: Qt.rgba(tintColor.r, tintColor.g, tintColor.b, tintOpacity) + } + Image { + anchors.fill: parent + source: "qrc:/qt/qml/Fluent/resources/noise.png" + fillMode: Image.Tile + opacity: control.noiseOpacity + } +} diff --git a/Fluent/qml/AppBar.qml b/Fluent/qml/AppBar.qml index 100cafb..996d43f 100644 --- a/Fluent/qml/AppBar.qml +++ b/Fluent/qml/AppBar.qml @@ -1,87 +1,281 @@ -import QtQuick as Quick -import QtQuick.Layouts -import Fluent - -Quick.Rectangle { - id: root - property bool showMinimize: true - property bool showMaximize: true - property bool showClose: true - property bool showStayTop: true - property bool showDark: false - property string title: "" - property url icon - property string maximizeText : qsTr("Maximize") - property Quick.color textColor: Theme.fontPrimaryColor - property Quick.color maximizeNormalColor: Theme.itemNormalColor - property Quick.color maximizeHoverColor: Theme.itemHoverColor - property bool isMac: Utilities.isMacos() - property alias buttonMaximize: btn_maximize - property alias layoutMacosButtons: layout_macos_buttons - property alias layoutStandardbuttons: layout_standard_buttons - - Quick.Item{ - id:d - property var hitTestList: [] - property bool hoverMaxBtn: false - property var win: Window.window - property bool stayTop: { - if(d.win instanceof Window){ - return d.win.stayTop - } - return false - } - property bool isRestore: win && (Window.Maximized === win.visibility || Window.FullScreen === win.visibility) - property bool resizable: win && !(win.height === win.maximumHeight && win.height === win.minimumHeight && win.width === win.maximumWidth && win.width === win.minimumWidth) - function containsPointToItem(point,item){ - var pos = item.mapToGlobal(0,0) - var rect = Qt.rect(pos.x,pos.y,item.width,item.height) - if(point.x>rect.x && point.x<(rect.x+rect.width) && point.y>rect.y && point.y<(rect.y+rect.height)){ - return true - } - return false - } - } - - RowLayout { - id:layout_standard_buttons - height: parent.height - anchors.right: parent.right - spacing: 0 - - IconButton{ - id:btn_maximize - property bool hover: btn_maximize.hovered - Layout.preferredWidth: 40 - Layout.preferredHeight: 30 - padding: 0 - verticalPadding: 0 - horizontalPadding: 0 - iconSource : d.isRestore ? Icons.ChromeRestore : Icons.ChromeMaximize - color: { - if(down){ - return maximizePressColor - } - return btn_maximize.hover ? maximizeHoverColor : maximizeNormalColor - } - Layout.alignment: Qt.AlignVCenter - visible: d.resizable && !isMac && showMaximize - radius: 0 - iconColor: root.textColor - text:d.isRestore?restoreText:maximizeText - iconSize: 11 - onClicked: maxClickListener() - } - } - - Quick.Loader{ - id:layout_macos_buttons - anchors{ - verticalCenter: parent.verticalCenter - left: parent.left - leftMargin: 10 - } - sourceComponent: isMac ? com_macos_buttons : undefined - Quick.Component.onDestruction: sourceComponent = undefined - } -} +import QtQuick as Quick +import QtQuick.Controls +import QtQuick.Window +import QtQuick.Layouts +import Fluent + +Quick.Rectangle{ + property string title: "" + property string darkText : qsTr("Dark") + property string lightText : qsTr("Light") + property string minimizeText : qsTr("Minimize") + property string restoreText : qsTr("Restore") + property string maximizeText : qsTr("Maximize") + property string closeText : qsTr("Close") + property string stayTopText : qsTr("Sticky on Top") + property string stayTopCancelText : qsTr("Sticky on Top cancelled") + property color textColor: Theme.fontPrimaryColor + property color minimizeNormalColor: Theme.itemNormalColor + property color minimizeHoverColor: Theme.itemHoverColor + property color minimizePressColor: Theme.itemPressColor + property color maximizeNormalColor: Theme.itemNormalColor + property color maximizeHoverColor: Theme.itemHoverColor + property color maximizePressColor: Theme.itemPressColor + property color closeNormalColor: Qt.rgba(0,0,0,0) + property color closeHoverColor: Qt.rgba(251/255,115/255,115/255,1) + property color closePressColor: Qt.rgba(251/255,115/255,115/255,0.8) + property bool showDark: false + property bool showClose: true + property bool showMinimize: true + property bool showMaximize: true + property bool showStayTop: true + property bool titleVisible: true + property url icon + property int iconSize: 20 + property bool isMac: Utilities.isMacos() + property color borerlessColor : Theme.primaryColor + property alias buttonStayTop: btn_stay_top + property alias buttonMinimize: btn_minimize + property alias buttonMaximize: btn_maximize + property alias buttonClose: btn_close + property alias buttonDark: btn_dark + property alias layoutMacosButtons: layout_macos_buttons + property alias layoutStandardbuttons: layout_standard_buttons + property var maxClickListener : function(){ + if(Utilities.isMacos()){ + if (d.win.visibility === Window.FullScreen || d.win.visibility === Window.Maximized) + d.win.showNormal() + else + d.win.showFullScreen() + }else{ + if (d.win.visibility === Window.Maximized || d.win.visibility === Window.FullScreen) + d.win.showNormal() + else + d.win.showMaximized() + d.hoverMaxBtn = false + } + } + property var minClickListener: function(){ + if(d.win.transientParent != null){ + d.win.transientParent.showMinimized() + }else{ + d.win.showMinimized() + } + } + property var closeClickListener : function(){ + d.win.close() + } + property var stayTopClickListener: function(){ + if(d.win instanceof Window){ + d.win.stayTop = !d.win.stayTop + } + } + property var darkClickListener: function(){ + if(Theme.dark){ + Theme.darkMode = ThemeType.Light + }else{ + Theme.darkMode = ThemeType.Dark + } + } + id:control + color: Qt.rgba(0,0,0,0) + height: visible ? 30 : 0 + opacity: visible + z: 65535 + Item{ + id:d + property var hitTestList: [] + property bool hoverMaxBtn: false + property var win: Window.window + property bool stayTop: { + if(d.win instanceof Window){ + return d.win.stayTop + } + return false + } + property bool isRestore: win && (Window.Maximized === win.visibility || Window.FullScreen === win.visibility) + property bool resizable: win && !(win.height === win.maximumHeight && win.height === win.minimumHeight && win.width === win.maximumWidth && win.width === win.minimumWidth) + function containsPointToItem(point,item){ + var pos = item.mapToGlobal(0,0) + var rect = Qt.rect(pos.x,pos.y,item.width,item.height) + if(point.x>rect.x && point.x<(rect.x+rect.width) && point.y>rect.y && point.y<(rect.y+rect.height)){ + return true + } + return false + } + } + Row{ + anchors{ + verticalCenter: parent.verticalCenter + left: isMac ? undefined : parent.left + leftMargin: isMac ? undefined : 10 + horizontalCenter: isMac ? parent.horizontalCenter : undefined + } + spacing: 10 + Image{ + width: control.iconSize + height: control.iconSize + visible: status === Image.Ready ? true : false + source: control.icon + anchors.verticalCenter: parent.verticalCenter + } + Text { + text: title + visible: control.titleVisible + color:control.textColor + anchors.verticalCenter: parent.verticalCenter + } + } + Component{ + id:com_macos_buttons + RowLayout{ + ImageButton{ + Layout.preferredHeight: 12 + Layout.preferredWidth: 12 + normalImage: "../Image/btn_close_normal.png" + hoveredImage: "../Image/btn_close_hovered.png" + pushedImage: "../Image/btn_close_pushed.png" + visible: showClose + onClicked: closeClickListener() + } + ImageButton{ + Layout.preferredHeight: 12 + Layout.preferredWidth: 12 + normalImage: "../Image/btn_min_normal.png" + hoveredImage: "../Image/btn_min_hovered.png" + pushedImage: "../Image/btn_min_pushed.png" + onClicked: minClickListener() + visible: showMinimize + } + ImageButton{ + Layout.preferredHeight: 12 + Layout.preferredWidth: 12 + normalImage: "../Image/btn_max_normal.png" + hoveredImage: "../Image/btn_max_hovered.png" + pushedImage: "../Image/btn_max_pushed.png" + onClicked: maxClickListener() + visible: d.resizable && showMaximize + } + } + } + RowLayout{ + id:layout_standard_buttons + height: parent.height + anchors.right: parent.right + spacing: 0 + IconButton{ + id:btn_dark + Layout.preferredWidth: 40 + Layout.preferredHeight: 30 + padding: 0 + verticalPadding: 0 + horizontalPadding: 0 + rightPadding: 2 + iconSource: Theme.dark ? Icons.Brightness : Icons.QuietHours + Layout.alignment: Qt.AlignVCenter + iconSize: 15 + visible: showDark + text: Theme.dark ? control.lightText : control.darkText + radius: 0 + iconColor:control.textColor + onClicked:()=> darkClickListener(btn_dark) + } + IconButton{ + id:btn_stay_top + Layout.preferredWidth: 40 + Layout.preferredHeight: 30 + padding: 0 + verticalPadding: 0 + horizontalPadding: 0 + iconSource : Icons.Pinned + Layout.alignment: Qt.AlignVCenter + iconSize: 14 + visible: { + if(!(d.win instanceof Window)){ + return false + } + return showStayTop + } + text:d.stayTop ? control.stayTopCancelText : control.stayTopText + radius: 0 + iconColor: d.stayTop ? Theme.primaryColor : control.textColor + onClicked: stayTopClickListener() + } + IconButton{ + id:btn_minimize + Layout.preferredWidth: 40 + Layout.preferredHeight: 30 + padding: 0 + verticalPadding: 0 + horizontalPadding: 0 + iconSource : Icons.ChromeMinimize + Layout.alignment: Qt.AlignVCenter + iconSize: 11 + text:minimizeText + radius: 0 + visible: !isMac && showMinimize + iconColor: control.textColor + color: { + if(pressed){ + return minimizePressColor + } + return hovered ? minimizeHoverColor : minimizeNormalColor + } + onClicked: minClickListener() + } + IconButton{ + id:btn_maximize + property bool hover: btn_maximize.hovered + Layout.preferredWidth: 40 + Layout.preferredHeight: 30 + padding: 0 + verticalPadding: 0 + horizontalPadding: 0 + iconSource : d.isRestore ? Icons.ChromeRestore : Icons.ChromeMaximize + color: { + if(down){ + return maximizePressColor + } + return btn_maximize.hover ? maximizeHoverColor : maximizeNormalColor + } + Layout.alignment: Qt.AlignVCenter + visible: d.resizable && !isMac && showMaximize + radius: 0 + iconColor: control.textColor + text:d.isRestore?restoreText:maximizeText + iconSize: 11 + onClicked: maxClickListener() + } + IconButton{ + id:btn_close + Layout.preferredWidth: 40 + Layout.preferredHeight: 30 + padding: 0 + verticalPadding: 0 + horizontalPadding: 0 + iconSource : Icons.ChromeClose + Layout.alignment: Qt.AlignVCenter + text:closeText + visible: !isMac && showClose + radius: 0 + iconSize: 10 + iconColor: hovered ? Qt.rgba(1,1,1,1) : control.textColor + color:{ + if(pressed){ + return closePressColor + } + return hovered ? closeHoverColor : closeNormalColor + } + onClicked: closeClickListener() + } + } + Loader{ + id:layout_macos_buttons + anchors{ + verticalCenter: parent.verticalCenter + left: parent.left + leftMargin: 10 + } + sourceComponent: isMac ? com_macos_buttons : undefined + } +} diff --git a/Fluent/qml/Button.qml b/Fluent/qml/Button.qml new file mode 100644 index 0000000..9a450f0 --- /dev/null +++ b/Fluent/qml/Button.qml @@ -0,0 +1,64 @@ +import QtQuick as Quick +import QtQuick.Controls as Control +import Fluent + +Control.Button { + property bool disabled: false + property string contentDescription: "" + property Quick.color normalColor: Theme.dark ? Qt.rgba(62/255,62/255,62/255,1) : Qt.rgba(254/255,254/255,254/255,1) + property Quick.color hoverColor: Theme.dark ? Qt.rgba(68/255,68/255,68/255,1) : Qt.rgba(246/255,246/255,246/255,1) + property Quick.color disableColor: Theme.dark ? Qt.rgba(59/255,59/255,59/255,1) : Qt.rgba(251/255,251/255,251/255,1) + property Quick.color dividerColor: Theme.dark ? Qt.rgba(80/255,80/255,80/255,1) : Qt.rgba(233/255,233/255,233/255,1) + property Quick.color textColor: { + if(Theme.dark){ + if(!enabled){ + return Qt.rgba(131/255,131/255,131/255,1) + } + if(pressed){ + return Qt.rgba(162/255,162/255,162/255,1) + } + return Qt.rgba(1,1,1,1) + }else{ + if(!enabled){ + return Qt.rgba(160/255,160/255,160/255,1) + } + if(pressed){ + return Qt.rgba(96/255,96/255,96/255,1) + } + return Qt.rgba(0,0,0,1) + } + } + Quick.Accessible.role: Quick.Accessible.Button + Quick.Accessible.name: control.text + Quick.Accessible.description: contentDescription + Quick.Accessible.onPressAction: control.clicked() + id: control + enabled: !disabled + verticalPadding: 0 + horizontalPadding:12 + font:TextStyle.Body + focusPolicy:Qt.TabFocus + background: ControlBackground{ + implicitWidth: 30 + implicitHeight: 30 + radius: 4 + color: { + if(!enabled){ + return disableColor + } + return hovered ? hoverColor :normalColor + } + shadow: !pressed && enabled + FocusRectangle{ + visible: control.activeFocus + radius:4 + } + } + contentItem: Text { + text: control.text + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + font: control.font + color: control.textColor + } +} diff --git a/Fluent/qml/ContentDialog.qml b/Fluent/qml/ContentDialog.qml new file mode 100644 index 0000000..9d21b1b --- /dev/null +++ b/Fluent/qml/ContentDialog.qml @@ -0,0 +1,164 @@ +import QtQuick as Quick +import QtQuick.Layouts +import QtQuick.Controls as Controls +import QtQuick.Window +import Fluent + + +Popup { + id: control + property string title: "" + property string message: "" + property string neutralText: qsTr("Close") + property string negativeText: qsTr("Cancel") + property string positiveText: qsTr("OK") + property int messageTextFormart: Text.AutoText + property int delayTime: 100 + property int buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton + property var contentDelegate: Component{ + Item{ + } + } + property var onNeutralClickListener + property var onNegativeClickListener + property var onPositiveClickListener + signal neutralClicked + signal negativeClicked + signal positiveClicked + implicitWidth: 400 + implicitHeight: layout_content.height + focus: true + Component{ + id:com_message + Flickable{ + id:sroll_message + contentHeight: text_message.height + contentWidth: width + clip: true + boundsBehavior:Flickable.StopAtBounds + width: parent.width + height: message === "" ? 0 : Math.min(text_message.height,300) + Controls.ScrollBar.vertical: ScrollBar {} + Text{ + id:text_message + font: TextStyle.Body + wrapMode: Text.WrapAnywhere + text:message + width: parent.width + topPadding: 4 + leftPadding: 20 + rightPadding: 20 + bottomPadding: 4 + } + } + } + Rectangle { + id:layout_content + width: parent.width + height: layout_column.childrenRect.height + color: 'transparent' + radius:5 + ColumnLayout{ + id:layout_column + width: parent.width + Text{ + id:text_title + font: TextStyle.Title + text:title + topPadding: 20 + leftPadding: 20 + rightPadding: 20 + wrapMode: Text.WrapAnywhere + } + Loader{ + sourceComponent: com_message + Layout.fillWidth: true + Layout.preferredHeight: status===Loader.Ready ? item.height : 0 + } + Loader{ + sourceComponent:control.visible ? control.contentDelegate : undefined + Layout.fillWidth: true + onStatusChanged: { + if(status===Loader.Ready){ + Layout.preferredHeight = item.implicitHeight + }else{ + Layout.preferredHeight = 0 + } + } + } + Rectangle{ + id:layout_actions + Layout.fillWidth: true + Layout.preferredHeight: 60 + radius: 5 + color: Theme.dark ? Qt.rgba(32/255,32/255,32/255,1) : Qt.rgba(243/255,243/255,243/255,1) + RowLayout{ + anchors + { + centerIn: parent + margins: spacing + fill: parent + } + spacing: 10 + Item{ + Layout.fillWidth: true + Layout.fillHeight: true + Button{ + id:neutral_btn + visible: control.buttonFlags&ContentDialogType.NeutralButton + text: neutralText + width: parent.width + anchors.centerIn: parent + onClicked: { + if(control.onNeutralClickListener){ + control.onNeutralClickListener() + }else{ + neutralClicked() + control.close() + } + } + } + } + Item{ + Layout.fillWidth: true + Layout.fillHeight: true + Button{ + id:negative_btn + visible: control.buttonFlags&ContentDialogType.NegativeButton + width: parent.width + anchors.centerIn: parent + text: negativeText + onClicked: { + if(control.onNegativeClickListener){ + control.onNegativeClickListener() + }else{ + negativeClicked() + control.close() + } + } + } + } + Item{ + Layout.fillWidth: true + Layout.fillHeight: true + FilledButton{ + id:positive_btn + visible: control.buttonFlags&ContentDialogType.PositiveButton + text: positiveText + width: parent.width + anchors.centerIn: parent + onClicked: { + if(control.onPositiveClickListener){ + control.onPositiveClickListener() + }else{ + positiveClicked() + control.close() + } + } + } + } + } + } + } + } +} diff --git a/Fluent/qml/ControlBackground.qml b/Fluent/qml/ControlBackground.qml new file mode 100644 index 0000000..de3ad7d --- /dev/null +++ b/Fluent/qml/ControlBackground.qml @@ -0,0 +1,52 @@ +import QtQuick as Quick +import QtQuick.Controls +import Fluent + +Quick.Item{ + id:control + property int radius: 4 + property bool shadow: true + property alias border: d.border + property var bottomMargin: undefined + property var topMargin: undefined + property var leftMargin: undefined + property var rightMargin: undefined + property Quick.color color: Theme.dark ? Qt.rgba(42/255,42/255,42/255,1) : Qt.rgba(254/255,254/255,254/255,1) + property alias gradient : rect_border.gradient + Quick.Rectangle{ + id:d + property Quick.color startColor: Qt.lighter(d.border.color,1.25) + property Quick.color endColor: shadow ? control.border.color : startColor + visible: false + border.color: Theme.dark ? Qt.rgba(48/255,48/255,48/255,1) : Qt.rgba(188/255,188/255,188/255,1) + } + Quick.Rectangle{ + id:rect_border + anchors.fill: parent + radius: control.radius + gradient: Quick.Gradient { + Quick.GradientStop { position: 0.0; color: d.startColor } + Quick.GradientStop { position: 1 - 3/control.height; color: d.startColor } + Quick.GradientStop { position: 1.0; color: d.endColor} + } + } + Quick.Rectangle{ + id:rect_back + anchors{ + fill: parent + margins: control.border.width + topMargin: control.topMargin + bottomMargin: control.bottomMargin + leftMargin: control.leftMargin + rightMargin: control.rightMargin + } + Quick.Behavior on anchors.bottomMargin { + Quick.NumberAnimation{ + easing.type: Easing.OutCubic + duration: 167 + } + } + radius: control.radius + color: control.color + } +} diff --git a/Fluent/qml/FilledButton.qml b/Fluent/qml/FilledButton.qml new file mode 100644 index 0000000..7ddef52 --- /dev/null +++ b/Fluent/qml/FilledButton.qml @@ -0,0 +1,60 @@ +import QtQuick as Quick +import QtQuick.Controls +import Fluent + +Button { + property bool disabled: false + property string contentDescription: "" + property Quick.color normalColor: Theme.primaryColor + property Quick.color hoverColor: Theme.dark ? Qt.darker(normalColor,1.1) : Qt.lighter(normalColor,1.1) + property Quick.color disableColor: Theme.dark ? Qt.rgba(82/255,82/255,82/255,1) : Qt.rgba(199/255,199/255,199/255,1) + property Quick.color pressedColor: Theme.dark ? Qt.darker(normalColor,1.2) : Qt.lighter(normalColor,1.2) + property Quick.color textColor: { + if(Theme.dark){ + if(!enabled){ + return Qt.rgba(173/255,173/255,173/255,1) + } + return Qt.rgba(0,0,0,1) + }else{ + return Qt.rgba(1,1,1,1) + } + } + Quick.Accessible.role: Quick.Accessible.Button + Quick.Accessible.name: control.text + Quick.Accessible.description: contentDescription + Quick.Accessible.onPressAction: control.clicked() + id: control + enabled: !disabled + focusPolicy:Qt.TabFocus + font:TextStyle.Body + verticalPadding: 0 + horizontalPadding:12 + background: ControlBackground{ + implicitWidth: 30 + implicitHeight: 30 + radius: 4 + bottomMargin: enabled ? 2 : 0 + border.width: enabled ? 1 : 0 + border.color: enabled ? Qt.darker(control.normalColor,1.2) : disableColor + color:{ + if(!enabled){ + return disableColor + } + if(pressed){ + return pressedColor + } + return hovered ? hoverColor :normalColor + } + FocusRectangle{ + visible: control.visualFocus + radius:4 + } + } + contentItem: Text { + text: control.text + font: control.font + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: control.textColor + } +} diff --git a/Fluent/qml/FocusRectangle.qml b/Fluent/qml/FocusRectangle.qml new file mode 100644 index 0000000..9236646 --- /dev/null +++ b/Fluent/qml/FocusRectangle.qml @@ -0,0 +1,20 @@ +import QtQuick as Quick +import QtQuick.Controls +import Fluent + + +Quick.Item { + property int radius: 4 + id:control + anchors.fill: parent + Quick.Rectangle{ + width: control.width + height: control.height + anchors.centerIn: parent + color: "#00000000" + border.width: 2 + radius: control.radius + border.color: Theme.dark ? Qt.rgba(1,1,1,1) : Qt.rgba(0,0,0,1) + z: 65535 + } +} diff --git a/Fluent/qml/Icon.qml b/Fluent/qml/Icon.qml index 5bbba9b..a813e03 100644 --- a/Fluent/qml/Icon.qml +++ b/Fluent/qml/Icon.qml @@ -1,19 +1,21 @@ -import QtQuick - -Text { - property int iconSource - property int iconSize: 20 - property color iconColor: FluTheme.dark ? "#FFFFFF" : "#000000" - id:control - font.family: font_loader.name - font.pixelSize: iconSize - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - color: iconColor - text: (String.fromCharCode(iconSource).toString(16)) - opacity: iconSource>0 - FontLoader{ - id: font_loader - source: "qrc:/qt/qml/FluentUI/Font/FluentIcons.ttf" - } -} +import QtQuick +import QtQuick.Controls +import Fluent + +Text { + property int iconSource + property int iconSize: 20 + property color iconColor: Theme.dark ? "#FFFFFF" : "#000000" + id:control + font.family: font_loader.name + font.pixelSize: iconSize + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: iconColor + text: (String.fromCharCode(iconSource).toString(16)) + opacity: iconSource>0 + FontLoader{ + id: font_loader + source: "qrc:/qt/qml/Fluent/resources/FluentIcons.ttf" + } +} diff --git a/Fluent/qml/IconButton.qml b/Fluent/qml/IconButton.qml index c28e4e7..f410514 100644 --- a/Fluent/qml/IconButton.qml +++ b/Fluent/qml/IconButton.qml @@ -1,30 +1,129 @@ -import QtQuick -import QtQuick.Controls - -Button { - property int iconSize: 20 - property int iconSource - property int radius:4 - property color color: { - if(!enabled){ - return disableColor - } - if(pressed){ - return pressedColor - } - return hovered ? hoverColor : normalColor - } - property color iconColor: { - if (FluTheme.dark) { - if (!enabled) { - return Qt.rgba(130 / 255, 130 / 255, 130 / 255, 1) - } - return Qt.rgba(1, 1, 1, 1) - } else { - if (!enabled) { - return Qt.rgba(161 / 255, 161 / 255, 161 / 255, 1) - } - return Qt.rgba(0, 0, 0, 1) - } - } -} +import QtQuick as Quick +import QtQuick.Controls as Controls +import QtQuick.Layouts +import Fluent + +Controls.Button { + display: Controls.Button.IconOnly + property int iconSize: 20 + property int iconSource + property bool disabled: false + property int radius:4 + property string contentDescription: "" + property Quick.color hoverColor: Theme.itemHoverColor + property Quick.color pressedColor: Theme.itemPressColor + property Quick.color normalColor: Theme.itemNormalColor + property Quick.color disableColor: Theme.itemNormalColor + property Quick.Component iconDelegate: com_icon + property Quick.color color: { + if(!enabled){ + return disableColor + } + if(pressed){ + return pressedColor + } + return hovered ? hoverColor : normalColor + } + property Quick.color iconColor: { + if(Theme.dark){ + if(!enabled){ + return Qt.rgba(130/255,130/255,130/255,1) + } + return Qt.rgba(1,1,1,1) + }else{ + if(!enabled){ + return Qt.rgba(161/255,161/255,161/255,1) + } + return Qt.rgba(0,0,0,1) + } + } + property Quick.color textColor: Theme.fontPrimaryColor + Quick.Accessible.role: Quick.Accessible.Button + Quick.Accessible.name: control.text + Quick.Accessible.description: contentDescription + Quick.Accessible.onPressAction: control.clicked() + id:control + focusPolicy:Qt.TabFocus + padding: 0 + verticalPadding: 8 + horizontalPadding: 8 + enabled: !disabled + font:TextStyle.Caption + background: Quick.Rectangle{ + implicitWidth: 30 + implicitHeight: 30 + radius: control.radius + color:control.color + FocusRectangle{ + visible: control.activeFocus + } + } + Quick.Component{ + id:com_icon + Icon { + id:text_icon + font.pixelSize: iconSize + iconSize: control.iconSize + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + iconColor: control.iconColor + iconSource: control.iconSource + } + } + Quick.Component{ + id:com_row + RowLayout{ + Loader{ + sourceComponent: iconDelegate + Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter + visible: display !== Button.TextOnly + } + Text{ + text:control.text + Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter + visible: display !== Button.IconOnly + color: control.textColor + font: control.font + } + } + } + Quick.Component{ + id:com_column + ColumnLayout{ + Loader{ + sourceComponent: iconDelegate + Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter + visible: display !== Button.TextOnly + } + Text{ + text:control.text + Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter + visible: display !== Button.IconOnly + color: control.textColor + font: control.font + } + } + } + contentItem:Loader{ + sourceComponent: { + if(display === Button.TextUnderIcon){ + return com_column + } + return com_row + } + } + Tooltip{ + id:tool_tip + visible: { + if(control.text === ""){ + return false + } + if(control.display !== Button.IconOnly){ + return false + } + return hovered + } + text:control.text + delay: 1000 + } +} diff --git a/Fluent/qml/Image.qml b/Fluent/qml/Image.qml new file mode 100644 index 0000000..dcdc3fc --- /dev/null +++ b/Fluent/qml/Image.qml @@ -0,0 +1,48 @@ +import QtQuick +import QtQuick.Controls +import FluentUI + +Image { + property string errorButtonText: qsTr("Reload") + property var clickErrorListener : function(){ + image.source = "" + image.source = control.source + } + property Component errorItem : com_error + property Component loadingItem: com_loading + id: control + FluLoader{ + anchors.fill: parent + sourceComponent: { + if(control.status === Image.Loading){ + return com_loading + }else if(control.status == Image.Error){ + return com_error + }else{ + return undefined + } + } + } + Component{ + id:com_loading + Rectangle{ + color: FluTheme.itemHoverColor + FluProgressRing{ + anchors.centerIn: parent + visible: control.status === Image.Loading + } + } + } + Component{ + id:com_error + Rectangle{ + color: FluTheme.itemHoverColor + FluFilledButton{ + text: control.errorButtonText + anchors.centerIn: parent + visible: control.status === Image.Error + onClicked: clickErrorListener() + } + } + } +} diff --git a/Fluent/qml/ImageButton.qml b/Fluent/qml/ImageButton.qml new file mode 100644 index 0000000..d264eff --- /dev/null +++ b/Fluent/qml/ImageButton.qml @@ -0,0 +1,17 @@ +import QtQuick +import QtQuick.Controls as Controls + +Controls.Button{ + id:control + property string normalImage: "" + property string hoveredImage: "" + property string pushedImage: "" + background: Item{ + implicitHeight: 12 + implicitWidth: 12 + BorderImage { + anchors.fill: parent + source: control.hovered ? (control.pressed ? control.pushedImage : control.hoveredImage ) : control.normalImage + } + } +} diff --git a/Fluent/qml/InfoBar.qml b/Fluent/qml/InfoBar.qml index 1fbbcca..84aab7e 100644 --- a/Fluent/qml/InfoBar.qml +++ b/Fluent/qml/InfoBar.qml @@ -1,245 +1,243 @@ -import QtQuick as Quick -import QtQuick.Controls -import Fluent - -Object { - property var root - property int layoutY: 75 - id:control - Object{ - id:mcontrol - property string const_success: "success" - property string const_info: "info" - property string const_warning: "warning" - property string const_error: "error" - property int maxWidth: 300 - property var screenLayout: null - function create(type,text,duration,moremsg){ - if(screenLayout){ - var last = screenLayout.getLastloader() - if(last.type === type && last.text === text && moremsg === last.moremsg){ - last.duration = duration - if (duration > 0) last.restart() - return last - } - } - initScreenLayout() - return contentComponent.createObject(screenLayout,{type:type,text:text,duration:duration,moremsg:moremsg,}) - } - function createCustom(itemcomponent,duration){ - initScreenLayout() - if(itemcomponent){ - return contentComponent.createObject(screenLayout,{itemcomponent:itemcomponent,duration:duration}) - } - } - function initScreenLayout(){ - if(screenLayout == null){ - screenLayout = screenlayoutComponent.createObject(root) - screenLayout.y = control.layoutY - screenLayout.z = 100000 - } - } - Quick.Component { - id:screenlayoutComponent - Quick.Column{ - parent: Overlay.overlay - z:999 - spacing: 20 - width: root.width - move: Quick.Transition { - Quick.NumberAnimation { - properties: "y" - easing.type: Easing.OutCubic - duration: FluTheme.animationEnabled ? 333 : 0 - } - } - onChildrenChanged: if(children.length === 0) destroy() - function getLastloader(){ - if(children.length > 0){ - return children[children.length - 1] - } - return null - } - } - } - Quick.Component{ - id:contentComponent - Quick.Item{ - id:content - property int duration: 1500 - property var itemcomponent - property string type - property string text - property string moremsg - width: parent.width - height: loader.height - function close(){ - content.destroy() - } - function restart(){ - delayTimer.restart() - } - Quick.Timer { - id:delayTimer - interval: duration - running: duration > 0 - repeat: duration > 0 - onTriggered: content.close() - } - Quick.Loader{ - id:loader - x:(parent.width - width) / 2 - property var _super: content - scale: item ? 1 : 0 - asynchronous: true - Quick.Behavior on scale { - enabled: FluTheme.animationEnabled - Quick.NumberAnimation { - easing.type: Easing.OutCubic - duration: 167 - } - } - sourceComponent:itemcomponent ? itemcomponent : mcontrol.fluent_sytle - Quick.Component.onDestruction: sourceComponent = undefined - } - } - } - property Quick.Component fluent_sytle: Quick.Rectangle{ - width: rowlayout.width + (btn_close.visible ? 30 : 48) - height: rowlayout.height + 20 - color: { - if(FluTheme.dark){ - switch(_super.type){ - case mcontrol.const_success: return Qt.rgba(57/255,61/255,27/255,1) - case mcontrol.const_warning: return Qt.rgba(67/255,53/255,25/255,1) - case mcontrol.const_info: return Qt.rgba(39/255,39/255,39/255,1) - case mcontrol.const_error: return Qt.rgba(68/255,39/255,38/255,1) - } - return Qt.rgba(1,1,1,1) - }else{ - switch(_super.type){ - case mcontrol.const_success: return Qt.rgba(223/255,246/255,221/255,1) - case mcontrol.const_warning: return Qt.rgba(255/255,244/255,206/255,1) - case mcontrol.const_info: return Qt.rgba(244/255,244/255,244/255,1) - case mcontrol.const_error: return Qt.rgba(253/255,231/255,233/255,1) - } - return Qt.rgba(1,1,1,1) - } - } - Shadow { - radius: 4 - } - radius: 4 - border.width: 1 - border.color: { - if(FluTheme.dark){ - switch(_super.type){ - case mcontrol.const_success: return Qt.rgba(56/255,61/255,27/255,1) - case mcontrol.const_warning: return Qt.rgba(66/255,53/255,25/255,1) - case mcontrol.const_info: return Qt.rgba(38/255,39/255,39/255,1) - case mcontrol.const_error: return Qt.rgba(67/255,39/255,38/255,1) - } - return Qt.rgba(1,1,1,1) - }else{ - switch(_super.type){ - case mcontrol.const_success: return Qt.rgba(210/255,232/255,208/255,1) - case mcontrol.const_warning: return Qt.rgba(240/255,230/255,194/255,1) - case mcontrol.const_info: return Qt.rgba(230/255,230/255,230/255,1) - case mcontrol.const_error: return Qt.rgba(238/255,217/255,219/255,1) - } - return Qt.rgba(1,1,1,1) - } - } - Quick.Row{ - id:rowlayout - x:20 - y:(parent.height - height) / 2 - spacing: 10 - Icon{ - iconSource:{ - switch(_super.type){ - case mcontrol.const_success: return FluentIcons.CompletedSolid - case mcontrol.const_warning: return FluentIcons.InfoSolid - case mcontrol.const_info: return FluentIcons.InfoSolid - case mcontrol.const_error: return FluentIcons.StatusErrorFull - }FluentIcons.StatusErrorFull - return FluentIcons.FA_info_circle - } - iconSize:20 - iconColor: { - if(FluTheme.dark){ - switch(_super.type){ - case mcontrol.const_success: return Qt.rgba(108/255,203/255,95/255,1) - case mcontrol.const_warning: return Qt.rgba(252/255,225/255,0/255,1) - case mcontrol.const_info: return FluTheme.primaryColor - case mcontrol.const_error: return Qt.rgba(255/255,153/255,164/255,1) - } - return Qt.rgba(1,1,1,1) - }else{ - switch(_super.type){ - case mcontrol.const_success: return Qt.rgba(15/255,123/255,15/255,1) - case mcontrol.const_warning: return Qt.rgba(157/255,93/255,0/255,1) - case mcontrol.const_info: return Qt.rgba(0/255,102/255,180/255,1) - case mcontrol.const_error: return Qt.rgba(196/255,43/255,28/255,1) - } - return Qt.rgba(1,1,1,1) - } - } - } - - Quick.Column{ - spacing: 5 - Text{ - text:_super.text - wrapMode: Text.WrapAnywhere - width: Math.min(implicitWidth,mcontrol.maxWidth) - } - Text{ - text: _super.moremsg - visible: _super.moremsg - wrapMode : Text.WrapAnywhere - textColor: FluColors.Grey120 - width: Math.min(implicitWidth,mcontrol.maxWidth) - } - } - - IconButton{ - id:btn_close - iconSource: FluentIcons.ChromeClose - iconSize: 10 - verticalPadding: 0 - horizontalPadding: 0 - width: 30 - height: 20 - visible: _super.duration<=0 - anchors.verticalCenter: parent.verticalCenter - iconColor: FluTheme.dark ? Qt.rgba(222/255,222/255,222/255,1) : Qt.rgba(97/255,97/255,97/255,1) - onClicked: _super.close() - } - } - } - } - function showSuccess(text,duration=1000,moremsg){ - return mcontrol.create(mcontrol.const_success,text,duration,moremsg ? moremsg : "") - } - function showInfo(text,duration=1000,moremsg){ - return mcontrol.create(mcontrol.const_info,text,duration,moremsg ? moremsg : "") - } - function showWarning(text,duration=1000,moremsg){ - return mcontrol.create(mcontrol.const_warning,text,duration,moremsg ? moremsg : "") - } - function showError(text,duration=1000,moremsg){ - return mcontrol.create(mcontrol.const_error,text,duration,moremsg ? moremsg : "") - } - function showCustom(itemcomponent,duration=1000){ - return mcontrol.createCustom(itemcomponent,duration) - } - function clearAllInfo(){ - if(mcontrol.screenLayout != null) { - mcontrol.screenLayout.destroy() - mcontrol.screenLayout = null - } - - return true - } -} +import QtQuick as Quick +import QtQuick.Controls + +Object { + property var root + property int layoutY: 75 + id:control + Object{ + id:mcontrol + property string const_success: "success" + property string const_info: "info" + property string const_warning: "warning" + property string const_error: "error" + property int maxWidth: 300 + property var screenLayout: null + function create(type,text,duration,moremsg){ + if(screenLayout){ + var last = screenLayout.getLastloader() + if(last.type === type && last.text === text && moremsg === last.moremsg){ + last.duration = duration + if (duration > 0) last.restart() + return last + } + } + initScreenLayout() + return contentComponent.createObject(screenLayout,{type:type,text:text,duration:duration,moremsg:moremsg,}) + } + function createCustom(itemcomponent,duration){ + initScreenLayout() + if(itemcomponent){ + return contentComponent.createObject(screenLayout,{itemcomponent:itemcomponent,duration:duration}) + } + } + function initScreenLayout(){ + if(screenLayout == null){ + screenLayout = screenlayoutComponent.createObject(root) + screenLayout.y = control.layoutY + screenLayout.z = 100000 + } + } + Quick.Component{ + id:screenlayoutComponent + Quick.Column{ + parent: Overlay.overlay + z:999 + spacing: 20 + width: root.width + move: Quick.Transition { + Quick.NumberAnimation { + properties: "y" + easing.type: Easing.OutCubic + duration: FluTheme.animationEnabled ? 333 : 0 + } + } + onChildrenChanged: if(children.length === 0) destroy() + function getLastloader(){ + if(children.length > 0){ + return children[children.length - 1] + } + return null + } + } + } + Quick.Component{ + id:contentComponent + Quick.Item{ + id:content + property int duration: 1500 + property var itemcomponent + property string type + property string text + property string moremsg + width: parent.width + height: loader.height + function close(){ + content.destroy() + } + function restart(){ + delayTimer.restart() + } + Quick.Timer { + id:delayTimer + interval: duration + running: duration > 0 + repeat: duration > 0 + onTriggered: content.close() + } + Loader{ + id:loader + x:(parent.width - width) / 2 + property var _super: content + scale: item ? 1 : 0 + asynchronous: true + Quick.Behavior on scale { + enabled: FluTheme.animationEnabled + Quick.NumberAnimation { + easing.type: Easing.OutCubic + duration: 167 + } + } + sourceComponent:itemcomponent ? itemcomponent : mcontrol.fluent_sytle + } + } + } + property Quick.Component fluent_sytle: Quick.Rectangle{ + width: rowlayout.width + (btn_close.visible ? 30 : 48) + height: rowlayout.height + 20 + color: { + if(FluTheme.dark){ + switch(_super.type){ + case mcontrol.const_success: return Qt.rgba(57/255,61/255,27/255,1) + case mcontrol.const_warning: return Qt.rgba(67/255,53/255,25/255,1) + case mcontrol.const_info: return Qt.rgba(39/255,39/255,39/255,1) + case mcontrol.const_error: return Qt.rgba(68/255,39/255,38/255,1) + } + return Qt.rgba(1,1,1,1) + }else{ + switch(_super.type){ + case mcontrol.const_success: return Qt.rgba(223/255,246/255,221/255,1) + case mcontrol.const_warning: return Qt.rgba(255/255,244/255,206/255,1) + case mcontrol.const_info: return Qt.rgba(244/255,244/255,244/255,1) + case mcontrol.const_error: return Qt.rgba(253/255,231/255,233/255,1) + } + return Qt.rgba(1,1,1,1) + } + } + Shadow{ + radius: 4 + } + radius: 4 + border.width: 1 + border.color: { + if(FluTheme.dark){ + switch(_super.type){ + case mcontrol.const_success: return Qt.rgba(56/255,61/255,27/255,1) + case mcontrol.const_warning: return Qt.rgba(66/255,53/255,25/255,1) + case mcontrol.const_info: return Qt.rgba(38/255,39/255,39/255,1) + case mcontrol.const_error: return Qt.rgba(67/255,39/255,38/255,1) + } + return Qt.rgba(1,1,1,1) + }else{ + switch(_super.type){ + case mcontrol.const_success: return Qt.rgba(210/255,232/255,208/255,1) + case mcontrol.const_warning: return Qt.rgba(240/255,230/255,194/255,1) + case mcontrol.const_info: return Qt.rgba(230/255,230/255,230/255,1) + case mcontrol.const_error: return Qt.rgba(238/255,217/255,219/255,1) + } + return Qt.rgba(1,1,1,1) + } + } + Quick.Row{ + id:rowlayout + x:20 + y:(parent.height - height) / 2 + spacing: 10 + Icon{ + iconSource:{ + switch(_super.type){ + case mcontrol.const_success: return FluentIcons.CompletedSolid + case mcontrol.const_warning: return FluentIcons.InfoSolid + case mcontrol.const_info: return FluentIcons.InfoSolid + case mcontrol.const_error: return FluentIcons.StatusErrorFull + }FluentIcons.StatusErrorFull + return FluentIcons.FA_info_circle + } + iconSize:20 + iconColor: { + if(FluTheme.dark){ + switch(_super.type){ + case mcontrol.const_success: return Qt.rgba(108/255,203/255,95/255,1) + case mcontrol.const_warning: return Qt.rgba(252/255,225/255,0/255,1) + case mcontrol.const_info: return FluTheme.primaryColor + case mcontrol.const_error: return Qt.rgba(255/255,153/255,164/255,1) + } + return Qt.rgba(1,1,1,1) + }else{ + switch(_super.type){ + case mcontrol.const_success: return Qt.rgba(15/255,123/255,15/255,1) + case mcontrol.const_warning: return Qt.rgba(157/255,93/255,0/255,1) + case mcontrol.const_info: return Qt.rgba(0/255,102/255,180/255,1) + case mcontrol.const_error: return Qt.rgba(196/255,43/255,28/255,1) + } + return Qt.rgba(1,1,1,1) + } + } + } + + Quick.Column{ + spacing: 5 + Text{ + text:_super.text + wrapMode: Text.WrapAnywhere + width: Math.min(implicitWidth,mcontrol.maxWidth) + } + Text{ + text: _super.moremsg + visible: _super.moremsg + wrapMode : Text.WrapAnywhere + textColor: FluColors.Grey120 + width: Math.min(implicitWidth,mcontrol.maxWidth) + } + } + + IconButton{ + id:btn_close + iconSource: FluentIcons.ChromeClose + iconSize: 10 + verticalPadding: 0 + horizontalPadding: 0 + width: 30 + height: 20 + visible: _super.duration<=0 + anchors.verticalCenter: parent.verticalCenter + iconColor: FluTheme.dark ? Qt.rgba(222/255,222/255,222/255,1) : Qt.rgba(97/255,97/255,97/255,1) + onClicked: _super.close() + } + } + } + } + function showSuccess(text,duration=1000,moremsg){ + return mcontrol.create(mcontrol.const_success,text,duration,moremsg ? moremsg : "") + } + function showInfo(text,duration=1000,moremsg){ + return mcontrol.create(mcontrol.const_info,text,duration,moremsg ? moremsg : "") + } + function showWarning(text,duration=1000,moremsg){ + return mcontrol.create(mcontrol.const_warning,text,duration,moremsg ? moremsg : "") + } + function showError(text,duration=1000,moremsg){ + return mcontrol.create(mcontrol.const_error,text,duration,moremsg ? moremsg : "") + } + function showCustom(itemcomponent,duration=1000){ + return mcontrol.createCustom(itemcomponent,duration) + } + function clearAllInfo(){ + if(mcontrol.screenLayout != null) { + mcontrol.screenLayout.destroy() + mcontrol.screenLayout = null + } + + return true + } +} diff --git a/Fluent/qml/Loader.qml b/Fluent/qml/Loader.qml new file mode 100644 index 0000000..fcf5dae --- /dev/null +++ b/Fluent/qml/Loader.qml @@ -0,0 +1,5 @@ +import QtQuick + +Loader { + Component.onDestruction: sourceComponent = undefined +} diff --git a/Fluent/qml/Object.qml b/Fluent/qml/Object.qml index f435c08..9d60081 100644 --- a/Fluent/qml/Object.qml +++ b/Fluent/qml/Object.qml @@ -1,7 +1,7 @@ -import QtQuick - -QtObject { - id:root - default property list children - -} +import QtQuick +import QtQuick.Controls + +QtObject { + default property list children + id:control +} diff --git a/Fluent/qml/Popup.qml b/Fluent/qml/Popup.qml new file mode 100644 index 0000000..dfc7174 --- /dev/null +++ b/Fluent/qml/Popup.qml @@ -0,0 +1,54 @@ +import QtQuick as Quick +import QtQuick.Layouts +import QtQuick.Controls as Controls +import QtQuick.Window +import Fluent + +Controls.Popup { + id: control + padding: 0 + modal:true + parent: Controls.Overlay.overlay + x: Math.round((d.parentWidth - width) / 2) + y: Math.round((d.parentHeight - height) / 2) + closePolicy: Popup.NoAutoClose + enter: Transition { + NumberAnimation { + property: "opacity" + duration: Theme.animationEnabled ? 83 : 0 + from:0 + to:1 + } + } + height:Math.min(implicitHeight,d.parentHeight) + exit:Transition { + NumberAnimation { + property: "opacity" + duration: Theme.animationEnabled ? 83 : 0 + from:1 + to:0 + } + } + background: Rectangle{ + radius: [5,5,5,5] + color: Theme.dark ? Qt.rgba(43/255,43/255,43/255,1) : Qt.rgba(1,1,1,1) + Shadow{ + radius: 5 + } + } + QtObject{ + id:d + property int parentHeight: { + if(control.parent){ + return control.parent.height + } + return control.height + } + property int parentWidth: { + if(control.parent){ + return control.parent.width + } + return control.width + } + } +} diff --git a/Fluent/qml/ProgressRing.qml b/Fluent/qml/ProgressRing.qml new file mode 100644 index 0000000..694e6b6 --- /dev/null +++ b/Fluent/qml/ProgressRing.qml @@ -0,0 +1,92 @@ +import QtQuick as Quick +import QtQuick.Controls +import Fluent + +ProgressBar{ + property int duration: 2000 + property real strokeWidth: 6 + property bool progressVisible: false + property Quick.color color: FluTheme.primaryColor + property Quick.color backgroundColor : FluTheme.dark ? Qt.rgba(99/255,99/255,99/255,1) : Qt.rgba(214/255,214/255,214/255,1) + id:control + indeterminate : true + clip: true + background: Quick.Rectangle { + implicitWidth: 56 + implicitHeight: 56 + radius: control.width/2 + color:"transparent" + border.color: control.backgroundColor + border.width: control.strokeWidth + } + onIndeterminateChanged:{ + canvas.requestPaint() + } + Quick.QtObject{ + id:d + property real _radius: control.width/2-control.strokeWidth/2 + property real _progress: control.indeterminate ? 0.0 : control.visualPosition + on_ProgressChanged: { + canvas.requestPaint() + } + } + Quick.Connections{ + target: FluTheme + function onDarkChanged(){ + canvas.requestPaint() + } + } + contentItem: Quick.Item { + id:layout_item + Quick.Canvas { + id:canvas + anchors.fill: parent + antialiasing: true + renderTarget: Canvas.Image + property real startAngle: 0 + property real sweepAngle: 0 + Quick.SequentialAnimation on startAngle { + loops: Animation.Infinite + running: control.visible && control.indeterminate + Quick.PropertyAnimation { from: 0; to: 450; duration: control.duration/2 } + Quick.PropertyAnimation { from: 450; to: 1080; duration: control.duration/2 } + } + Quick.SequentialAnimation on sweepAngle { + loops: Animation.Infinite + running: control.visible && control.indeterminate + Quick.PropertyAnimation { from: 0; to: 180; duration: control.duration/2 } + Quick.PropertyAnimation { from: 180; to: 0; duration: control.duration/2 } + } + onStartAngleChanged: { + requestPaint() + } + onPaint: { + var ctx = canvas.getContext("2d") + ctx.clearRect(0, 0, canvas.width, canvas.height) + ctx.save() + ctx.lineWidth = control.strokeWidth + ctx.strokeStyle = control.color + ctx.lineCap = "round" + ctx.beginPath() + if(control.indeterminate){ + ctx.arc(width/2, height/2, d._radius , Math.PI * (startAngle - 90) / 180, Math.PI * (startAngle - 90 + sweepAngle) / 180) + }else{ + ctx.arc(width/2, height/2, d._radius , -0.5 * Math.PI , -0.5 * Math.PI + d._progress * 2 * Math.PI) + } + ctx.stroke() + ctx.closePath() + ctx.restore() + } + } + } + Text{ + text:(control.visualPosition * 100).toFixed(0) + "%" + visible: { + if(control.indeterminate){ + return false + } + return control.progressVisible + } + anchors.centerIn: parent + } +} diff --git a/Fluent/qml/Router.qml b/Fluent/qml/Router.qml index 1aa4c63..3ab018d 100644 --- a/Fluent/qml/Router.qml +++ b/Fluent/qml/Router.qml @@ -1,12 +1,71 @@ -pragma Singleton - -import QtQml - -QtObject { - property var windows: [] - function addWindow(window){ - if(!window.transientParent){ - windows.push(window) - } - } -} +pragma Singleton +import QtQuick + + +QtObject { + property var routes : ({}) + property var windows: [] + function addWindow(window){ + if(!window.transientParent){ + windows.push(window) + } + } + function removeWindow(win) { + if(!win.transientParent){ + var index = windows.indexOf(win) + if (index !== -1) { + windows.splice(index, 1) + win.deleteLater() + } + } + } + function exit(retCode){ + for(var i =0 ;i< windows.length; i++){ + var win = windows[i] + win.deleteLater() + } + windows = [] + Qt.exit(retCode) + } + function navigate(route,argument={},windowRegister = undefined){ + if(!routes.hasOwnProperty(route)){ + console.error("Not Found Route",route) + return + } + var windowComponent = Qt.createComponent(routes[route]) + if (windowComponent.status !== Component.Ready) { + console.error(windowComponent.errorString()) + return + } + var properties = {} + properties._route = route + if(windowRegister){ + properties._windowRegister = windowRegister + } + properties.argument = argument + var win = undefined + for(var i =0 ;i< windows.length; i++){ + var item = windows[i] + if(route === item._route){ + win = item + break + } + } + if(win){ + var launchMode = win.launchMode + if(launchMode === 1){ + win.argument = argument + win.show() + win.raise() + win.requestActivate() + return + }else if(launchMode === 2){ + win.close() + } + } + win = windowComponent.createObject(null,properties) + if(windowRegister){ + windowRegister._to = win + } + } +} diff --git a/Fluent/qml/ScrollBar.qml b/Fluent/qml/ScrollBar.qml new file mode 100644 index 0000000..e547aca --- /dev/null +++ b/Fluent/qml/ScrollBar.qml @@ -0,0 +1,187 @@ +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T +import Fluent + +T.ScrollBar { + id: control + + property color color : Theme.dark ? Qt.rgba(159/255,159/255,159/255,1) : Qt.rgba(138/255,138/255,138/255,1) + property color pressedColor: Theme.dark ? Qt.darker(color,1.2) : Qt.lighter(color,1.2) + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + visible: control.policy !== T.ScrollBar.AlwaysOff + minimumSize: Math.max(orientation === Qt.Horizontal ? height / width : width / height,0.3) + QtObject{ + id:d + property int minLine : 2 + property int maxLine : 6 + } + z: horizontal? 10 : 20 + verticalPadding : vertical ? 15 : 3 + horizontalPadding : horizontal ? 15 : 3 + background: Rectangle{ + id:back_rect + radius: 5 + color:Theme.dark ? Qt.rgba(44/255,44/255,44/255,1) : Qt.rgba(255/255,255/255,255/255,1) + opacity:{ + if(vertical){ + return d.maxLine === Number(rect_bar.width) + } + return d.maxLine === Number(rect_bar.height) + } + Behavior on opacity { + NumberAnimation{ + duration: 50 + } + } + } + IconButton{ + width: 12 + height: 12 + iconSize: 8 + verticalPadding: 0 + horizontalPadding: 0 + visible: control.horizontal + opacity: back_rect.opacity + anchors{ + left: parent.left + leftMargin: 2 + verticalCenter: parent.verticalCenter + } + iconColor: control.color + iconSource: Icons.CaretLeftSolid8 + onClicked: { + control.decrease() + } + } + IconButton{ + width: 12 + height: 12 + iconSize: 8 + verticalPadding: 0 + horizontalPadding: 0 + iconColor: control.color + opacity: back_rect.opacity + anchors{ + right: parent.right + rightMargin: 2 + verticalCenter: parent.verticalCenter + } + visible: control.horizontal + iconSource: Icons.CaretRightSolid8 + onClicked: { + control.increase() + } + } + IconButton{ + width: 12 + height: 12 + iconSize: 8 + verticalPadding: 0 + horizontalPadding: 0 + iconColor: control.color + opacity: back_rect.opacity + anchors{ + top: parent.top + topMargin: 2 + horizontalCenter: parent.horizontalCenter + } + visible: control.vertical + iconSource: Icons.CaretUpSolid8 + onClicked: { + control.decrease() + } + } + IconButton{ + width: 12 + height: 12 + iconSize: 8 + verticalPadding: 0 + horizontalPadding: 0 + iconColor: control.color + opacity: back_rect.opacity + anchors{ + bottom: parent.bottom + bottomMargin: 2 + horizontalCenter: parent.horizontalCenter + } + visible: control.vertical + iconSource: Icons.CaretDownSolid8 + onClicked: { + control.increase() + } + } + contentItem: Item { + property bool collapsed: (control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0)) + implicitWidth: control.interactive ? d.maxLine : d.minLine + implicitHeight: control.interactive ? d.maxLine : d.minLine + Rectangle{ + id:rect_bar + width: vertical ? d.minLine : parent.width + height: horizontal ? d.minLine : parent.height + color:{ + if(control.pressed){ + return control.pressedColor + } + return control .color + } + anchors{ + right: vertical ? parent.right : undefined + bottom: horizontal ? parent.bottom : undefined + } + radius: width / 2 + visible: control.size < 1.0 + } + states: [ + State{ + name:"show" + when: contentItem.collapsed + PropertyChanges { + target: rect_bar + width: vertical ? d.maxLine : parent.width + height: horizontal ? d.maxLine : parent.height + } + } + ,State{ + name:"hide" + when: !contentItem.collapsed + PropertyChanges { + target: rect_bar + width: vertical ? d.minLine : parent.width + height: horizontal ? d.minLine : parent.height + } + } + ] + transitions:[ + Transition { + to: "hide" + SequentialAnimation { + PauseAnimation { duration: 450 } + NumberAnimation { + target: rect_bar + properties: vertical ? "width" : "height" + duration: 167 + easing.type: Easing.OutCubic + } + } + } + ,Transition { + to: "show" + SequentialAnimation { + PauseAnimation { duration: 150 } + NumberAnimation { + target: rect_bar + properties: vertical ? "width" : "height" + duration: 167 + easing.type: Easing.OutCubic + } + } + } + ] + } +} diff --git a/Fluent/qml/Shadow.qml b/Fluent/qml/Shadow.qml index 7b68cf1..3f88e10 100644 --- a/Fluent/qml/Shadow.qml +++ b/Fluent/qml/Shadow.qml @@ -1,14 +1,15 @@ -import QtQuick +import QtQuick as Quick +import Fluent -Item { - property color color: FluTheme.dark ? "#000000" : "#999999" +Quick.Item { + property Quick.color color: Theme.dark ? "#000000" : "#999999" property int elevation: 5 property int radius: 4 id:control anchors.fill: parent - Repeater{ + Quick.Repeater{ model: elevation - Rectangle{ + Quick.Rectangle{ anchors.fill: parent color: "#00000000" opacity: 0.01 * (elevation-index+1) diff --git a/Fluent/qml/Text.qml b/Fluent/qml/Text.qml index 899646a..b74f8ec 100644 --- a/Fluent/qml/Text.qml +++ b/Fluent/qml/Text.qml @@ -1,11 +1,10 @@ import QtQuick as Quick - import Fluent Quick.Text { - property Quick.color textColor: FluTheme.fontPrimaryColor + property Quick.color textColor: Theme.fontPrimaryColor id:text color: textColor - renderType: FluTheme.nativeText ? Text.NativeRendering : Text.QtRendering - font: FluTextStyle.Body + renderType: Theme.nativeText ? Text.NativeRendering : Text.QtRendering + font: TextStyle.Body } diff --git a/Fluent/qml/Tooltip.qml b/Fluent/qml/Tooltip.qml new file mode 100644 index 0000000..5fbfbd8 --- /dev/null +++ b/Fluent/qml/Tooltip.qml @@ -0,0 +1,31 @@ +import QtQuick as Quick +import QtQuick.Controls.impl +import QtQuick.Templates as T +import Fluent + + +T.ToolTip { + id: control + x: parent ? (parent.width - implicitWidth) / 2 : 0 + y: -implicitHeight - 3 + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + margins: 6 + padding: 6 + font: TextStyle.Body + closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent + contentItem: Text { + text: control.text + font: control.font + wrapMode: Text.Wrap + } + background: Quick.Rectangle { + color: Theme.dark ? Qt.rgba(50/255,49/255,48/255,1) : Qt.rgba(1,1,1,1) + radius: 3 + Shadow{ + radius: 3 + } + } +} diff --git a/Fluent/qml/Window.qml b/Fluent/qml/Window.qml index 1631d15..5f00d64 100644 --- a/Fluent/qml/Window.qml +++ b/Fluent/qml/Window.qml @@ -1,186 +1,387 @@ -import QtQuick as Quick -import Fluent - -Quick.Window { - id: root - property string windowIcon: App.windowIcon - property bool showStayTop: false - property bool showMaximize: true - property bool showMinimize: true - property bool showClose: true - property bool showDark: false - property bool fixSize: false - property bool stayTop: false - property int __margins: 0 - property var background : com_background - property Quick.color backgroundColor: { - if(active){ - return Theme.windowActiveBackgroundColor - } - return Theme.windowBackgroundColor - } - property Quick.Item appBar: AppBar { - title: root.title - height: 30 - showDark: root.showDark - showClose: root.showClose - showMinimize: root.showMinimize - showMaximize: root.showMaximize - showStayTop: root.showStayTop - icon: root.windowIcon - } - Frameless { - id: frameless - appBar: root.appBar - maximizeButton: appBar.buttonMaximize - fixSize: root.fixSize - topmost: root.stayTop - disabled: App.useSystemAppBar - Quick.Component.onCompleted: { - frameless.setHitTestVisible(appBar.layoutMacosButtons) - frameless.setHitTestVisible(appBar.layoutStandardbuttons) - } - Quick.Component.onDestruction: { - frameless.onDestruction() - } - } - Quick.Component.onCompleted: { - Router.addWindow(root) - } - - Quick.Component { - id:com_app_bar - Quick.Item{ - data: root.appBar - Quick.Component.onCompleted: { - root.appBar.width = Qt.binding(function(){ - return this.parent.width - }) - } - } - } - - - Quick.Item{ - id: layout_container - anchors.fill: parent - anchors.margins: root.__margins - Quick.Loader{ - anchors.fill: parent - sourceComponent: background - Quick.Component.onDestruction: sourceComponent = undefined - } - Quick.Loader{ - id:loader_app_bar - anchors { - top: parent.top - left: parent.left - right: parent.right - } - height: { - if(root.useSystemAppBar){ - return 0 - } - return root.fitsAppBarWindows ? 0 : root.appBar.height - } - sourceComponent: root.useSystemAppBar ? undefined : com_app_bar - Quick.Component.onDestruction: sourceComponent = undefined - } - Quick.Item{ - id:layout_content - anchors{ - top: loader_app_bar.bottom - left: parent.left - right: parent.right - bottom: parent.bottom - } - clip: true - } - Quick.Loader{ - property string loadingText - property bool cancel: false - id:loader_loading - anchors.fill: parent - Quick.Component.onDestruction: sourceComponent = undefined - } - InfoBar{ - id:info_bar - root: layout_container - } - - Quick.Loader{ - id:loader_border - anchors.fill: parent - sourceComponent: { - if(root.useSystemAppBar || Utilities.isWin() || root.visibility === Window.Maximized || root.visibility === Window.FullScreen){ - return undefined - } - return com_border - } - Quick.Component.onDestruction: sourceComponent = undefined - } - } - - Quick.Component { - id:com_background - Quick.Item{ - Rectangle{ - anchors.fill: parent - color: root.backgroundColor - } - Quick.Image{ - id:img_back - visible: false - cache: false - fillMode: Quick.Image.PreserveAspectCrop - asynchronous: true - Quick.Component.onCompleted: { - img_back.updateLayout() - source = Utilities.getUrlByFilePath(Theme.desktopImagePath) - } - Quick.Connections{ - target: root - function onScreenChanged(){ - img_back.updateLayout() - } - } - function updateLayout(){ - var geometry = Utilities.desktopAvailableGeometry(root) - img_back.width = geometry.width - img_back.height = geometry.height - img_back.sourceSize = Qt.size(img_back.width,img_back.height) - } - Quick.Connections{ - target: Theme - function onDesktopImagePathChanged(){ - timer_update_image.restart() - } - function onBlurBehindWindowEnabledChanged(){ - if(Theme.blurBehindWindowEnabled){ - img_back.source = Utilities.getUrlByFilePath(Theme.desktopImagePath) - }else{ - img_back.source = "" - } - } - } - Quick.Timer{ - id:timer_update_image - interval: 150 - onTriggered: { - img_back.source = "" - img_back.source = Utilities.getUrlByFilePath(Theme.desktopImagePath) - } - } - } - Acrylic{ - anchors.fill: parent - target: img_back - tintOpacity: Theme.dark ? 0.80 : 0.75 - blurRadius: 64 - visible: root.active && Theme.blurBehindWindowEnabled - tintColor: Theme.dark ? Qt.rgba(0, 0, 0, 1) : Qt.rgba(1, 1, 1, 1) - targetRect: Qt.rect(root.x-root.screen.virtualX,root.y-root.screen.virtualY,root.width,root.height) - } - } - } -} +import QtQuick as Quick +import QtQuick.Controls +import QtQuick.Layouts +import Fluent + +Quick.Window { + id: window + default property alias contentData : layout_content.data + property string windowIcon: App.windowIcon + property int launchMode: WindowType.Standard + property var argument:({}) + property var background : com_background + property bool fixSize: false + property Quick.Component loadingItem: com_loading + property bool fitsAppBarWindows: false + property var tintOpacity: Theme.dark ? 0.80 : 0.75 + property int blurRadius: 60 + property alias effect: frameless.effect + readonly property alias effective: frameless.effective + readonly property var availableEffects: frameless.availableEffects + property Quick.Item appBar: AppBar { + title: window.title + height: 30 + showDark: window.showDark + showClose: window.showClose + showMinimize: window.showMinimize + showMaximize: window.showMaximize + showStayTop: window.showStayTop + icon: window.windowIcon + } + property Quick.color backgroundColor: { + if(frameless.effective && active){ + var backcolor + if(frameless.effect==="dwm-blur"){ + backcolor = Utilities.withOpacity(Theme.windowActiveBackgroundColor, window.tintOpacity) + }else{ + backcolor = "transparent" + } + return backcolor + } + if(active){ + return Theme.windowActiveBackgroundColor + } + return Theme.windowBackgroundColor + } + property bool stayTop: false + property bool showDark: false + property bool showClose: true + property bool showMinimize: true + property bool showMaximize: true + property bool showStayTop: false + property bool autoMaximize: false + property bool autoVisible: true + property bool autoCenter: true + property bool autoDestroy: true + property bool useSystemAppBar + property int __margins: 0 + property Quick.color resizeBorderColor: { + if(window.active){ + return Theme.dark ? Qt.rgba(51/255,51/255,51/255,1) : Qt.rgba(110/255,110/255,110/255,1) + } + return Theme.dark ? Qt.rgba(61/255,61/255,61/255,1) : Qt.rgba(167/255,167/255,167/255,1) + } + property int resizeBorderWidth: 1 + property var closeListener: function(event){ + if(autoDestroy){ + Router.removeWindow(window) + }else{ + window.visibility = Window.Hidden + event.accepted = false + } + } + signal initArgument(var argument) + signal lazyLoad() + property var _windowRegister + property string _route + property bool _hideShadow: false + color: Utilities.isSoftware() ? window.backgroundColor : "transparent" + Quick.Component.onCompleted: { + Router.addWindow(window) + useSystemAppBar = App.useSystemAppBar + if(!useSystemAppBar && autoCenter){ + moveWindowToDesktopCenter() + } + fixWindowSize() + initArgument(argument) + if(window.autoVisible){ + if(window.autoMaximize){ + window.visibility = Window.Maximized + }else{ + window.show() + } + } + } + onVisibleChanged: { + if(visible && d.isLazyInit){ + window.lazyLoad() + d.isLazyInit = false + } + } + Quick.QtObject{ + id:d + property bool isLazyInit: true + } + Quick.Connections{ + target: window + function onClosing(event){closeListener(event)} + } + Frameless{ + id: frameless + appBar: window.appBar + maximizeButton: appBar.buttonMaximize + fixSize: window.fixSize + topmost: window.stayTop + disabled: App.useSystemAppBar + Quick.Component.onCompleted: { + frameless.setHitTestVisible(appBar.layoutMacosButtons) + frameless.setHitTestVisible(appBar.layoutStandardbuttons) + } + Quick.Component.onDestruction: { + frameless.onDestruction() + } + onEffectiveChanged: { + if(effective){ + Theme.blurBehindWindowEnabled = false + } + } + } + Quick.Component{ + id:com_background + Quick.Item{ + Quick.Rectangle{ + anchors.fill: parent + color: window.backgroundColor + } + Quick.Image{ + id:img_back + visible: false + cache: false + fillMode: Quick.Image.PreserveAspectCrop + asynchronous: true + Quick.Component.onCompleted: { + img_back.updateLayout() + source = Utilities.getUrlByFilePath(Theme.desktopImagePath) + } + Quick.Connections{ + target: window + function onScreenChanged(){ + img_back.updateLayout() + } + } + function updateLayout(){ + var geometry = Utilities.desktopAvailableGeometry(window) + img_back.width = geometry.width + img_back.height = geometry.height + img_back.sourceSize = Qt.size(img_back.width,img_back.height) + } + Quick.Connections{ + target: Theme + function onDesktopImagePathChanged(){ + timer_update_image.restart() + } + function onBlurBehindWindowEnabledChanged(){ + if(Theme.blurBehindWindowEnabled){ + img_back.source = Utilities.getUrlByFilePath(Theme.desktopImagePath) + }else{ + img_back.source = "" + } + } + } + Quick.Timer{ + id:timer_update_image + interval: 150 + onTriggered: { + img_back.source = "" + img_back.source = Utilities.getUrlByFilePath(Theme.desktopImagePath) + } + } + } + Acrylic{ + anchors.fill: parent + target: img_back + tintOpacity: window.tintOpacity + blurRadius: window.blurRadius + visible: window.active && Theme.blurBehindWindowEnabled + tintColor: Theme.dark ? Qt.rgba(0, 0, 0, 1) : Qt.rgba(1, 1, 1, 1) + targetRect: Qt.rect(window.x-window.screen.virtualX,window.y-window.screen.virtualY,window.width,window.height) + } + } + } + Quick.Component{ + id:com_app_bar + Quick.Item{ + data: window.appBar + Quick.Component.onCompleted: { + window.appBar.width = Qt.binding(function(){ + return this.parent.width + }) + } + } + } + Quick.Component{ + id:com_loading + Popup{ + id:popup_loading + focus: true + width: window.width + height: window.height + anchors.centerIn: Overlay.overlay + closePolicy: { + if(cancel){ + return Popup.CloseOnEscape | Popup.CloseOnPressOutside + } + return Popup.NoAutoClose + } + Overlay.modal: Quick.Item {} + onVisibleChanged: { + if(!visible){ + loader_loading.sourceComponent = undefined + } + } + padding: 0 + opacity: 0 + visible:true + Quick.Behavior on opacity { + Quick.SequentialAnimation { + Quick.PauseAnimation { + duration: 83 + } + Quick.NumberAnimation{ + duration: 167 + } + } + } + Quick.Component.onCompleted: { + opacity = 1 + } + background: Quick.Rectangle{ + color:"#44000000" + } + contentItem: Quick.Item{ + Quick.MouseArea{ + anchors.fill: parent + onClicked: { + if (cancel){ + popup_loading.visible = false + } + } + } + ColumnLayout{ + spacing: 8 + anchors.centerIn: parent + ProgressRing{ + Layout.alignment: Qt.AlignHCenter + } + Text{ + text:loadingText + Layout.alignment: Qt.AlignHCenter + } + } + } + } + } + Quick.Component{ + id:com_border + Quick.Rectangle{ + color:"transparent" + border.width: window.resizeBorderWidth + border.color: window.resizeBorderColor + } + } + Quick.Item{ + id: layout_container + anchors.fill: parent + anchors.margins: window.__margins + Loader{ + anchors.fill: parent + sourceComponent: background + } + Loader{ + id:loader_app_bar + anchors { + top: parent.top + left: parent.left + right: parent.right + } + height: { + if(window.useSystemAppBar){ + return 0 + } + return window.fitsAppBarWindows ? 0 : window.appBar.height + } + sourceComponent: window.useSystemAppBar ? undefined : com_app_bar + } + Quick.Item{ + id: layout_content + anchors{ + top: loader_app_bar.bottom + left: parent.left + right: parent.right + bottom: parent.bottom + } + clip: true + } + Loader{ + property string loadingText + property bool cancel: false + id:loader_loading + anchors.fill: parent + } + InfoBar{ + id:info_bar + root: layout_container + } + Loader{ + id:loader_border + anchors.fill: parent + sourceComponent: { + if(window.useSystemAppBar || Utilities.isWin() || window.visibility === Window.Maximized || window.visibility === Window.FullScreen){ + return undefined + } + return com_border + } + } + } + function hideLoading(){ + loader_loading.sourceComponent = undefined + } + function showSuccess(text,duration,moremsg){ + return info_bar.showSuccess(text,duration,moremsg) + } + function showInfo(text,duration,moremsg){ + return info_bar.showInfo(text,duration,moremsg) + } + function showWarning(text,duration,moremsg){ + return info_bar.showWarning(text,duration,moremsg) + } + function showError(text,duration,moremsg){ + return info_bar.showError(text,duration,moremsg) + } + function clearAllInfo(){ + return info_bar.clearAllInfo() + } + function moveWindowToDesktopCenter(){ + var availableGeometry = Utilities.desktopAvailableGeometry(window) + window.setGeometry((availableGeometry.width-window.width)/2+Quick.Screen.virtualX,(availableGeometry.height-window.height)/2+Quick.Screen.virtualY,window.width,window.height) + } + function fixWindowSize(){ + if(fixSize){ + window.maximumWidth = window.width + window.maximumHeight = window.height + window.minimumWidth = window.width + window.minimumHeight = window.height + } + } + function setResult(data){ + if(_windowRegister){ + _windowRegister.setResult(data) + } + } + function showMaximized(){ + frameless.showMaximized() + } + function showMinimized(){ + frameless.showMinimized() + } + function showNormal(){ + frameless.showNormal() + } + function showLoading(text = "",cancel = true){ + if(text===""){ + text = qsTr("Loading...") + } + loader_loading.loadingText = text + loader_loading.cancel = cancel + loader_loading.sourceComponent = com_loading + } + function setHitTestVisible(val){ + frameless.setHitTestVisible(val) + } + function deleteLater(){ + Utilities.deleteLater(window) + } + function containerItem(){ + return layout_container + } +} diff --git a/Fluent/resources/FluentIcons.ttf b/Fluent/resources/FluentIcons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8f05a4bbc13461ba7144efa9c0d3f38634de1283 GIT binary patch literal 408752 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%0A|xtMb)(B7--Xm2F6 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�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 z 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

m`f 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`I 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%0A8TuF$PW8~*o|99)+yH2ieQ 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 T-|Wu*C93JG*3SoP9%lXz9{#lZ literal 0 HcmV?d00001 diff --git a/Fluent/resources/btn_close_hovered.png b/Fluent/resources/btn_close_hovered.png new file mode 100644 index 0000000000000000000000000000000000000000..afd646f39da99c5f925f0c8bf3a48ad75b6d3732 GIT binary patch literal 10314 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 A+W-In literal 0 HcmV?d00001 diff --git a/Fluent/resources/btn_close_normal.png b/Fluent/resources/btn_close_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..de922d4bc45a3c6827d4fa02514bcd71addf3cfc GIT binary patch literal 10096 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 literal 0 HcmV?d00001 diff --git a/Fluent/resources/btn_max_normal.png b/Fluent/resources/btn_max_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..4c1bc6292aa9e02b11b02c4b38faa3b22c9c28d6 GIT binary patch literal 10128 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 literal 0 HcmV?d00001 diff --git a/Fluent/resources/btn_max_pushed.png b/Fluent/resources/btn_max_pushed.png new file mode 100644 index 0000000000000000000000000000000000000000..22fc333e5a91a8f42fd2e7a06ea5f7c4ca973b43 GIT binary patch literal 10412 zcmcIq36xaTnQmoFR~|-T%M;{r~S@Zmpbs=BeYxOdL~FQ!{Sn3_AzkCq!SPM&kY5uKNA>Ho9%b1sydt zM|MVEhrHeJo$i{N@2)A%o!2>U)*0zssiiKHFJ%jL-7Rf+x~AroY29s^+`>Xl0oiuy)?8*|nzBUZ@pyZZbz5Rx5QKb%|!qlv+lp zOc9x)JV|JpxM{9ydtV7iYtJ{N=h(1U7JjQwG<9~irBkV{uCBT+URP>wOi`_Mim()8 zNj#D4Slrr~=}xwGOzK;~7CLh6#kS63skJs*F_SGV>a0&d)1ED~wDm9B+R~|G&ScVLsO{ux(L$bJ;xkT&mDqXu;YYc$Sv+YfGEW3E%y3wT?~EsBg0;d?wcU&>*PeuJiSIl>Aq$t0Zu6-h0fhGa(NX;SGtacCja zAQbCc?X319f+y4b)m0;{@>sD!m{+&}senae4!`HIj#5KsSEjw-HNw(E@vl@h{W~(3 z#cMybv;Y6qzSp?9rc7&N0SuZ-MEglaT+?$jsez|<;MDs($AeEtXWG$g2|v@=Z-eIgrSjSFhU!} zRp2YdnbtzGz-585+JPW9uwDg(7y81ZcymGLp{Fg8j%PUuT;&j~F<6H02Sh3oINBQK z`dWI7I8137NS88Z2O~m{a_ws28Y8)so^f3c9UbOq!nspn=aqw+=V?}9nIvlv46K#c zNkt1hiM0{ogww2a21~EJmP2!n)ESw~@oYo1Rz8`{Dw$L&+mL6uf@De#buE?8=JNtv z>g2PuM=wnXN#@*K17Xz7WLROSYiTFXc#gP9>2MjXrIMLkHk-_2-&rQ|8R=$+x>f@t zGNXAmNtkk@wK7TQ#go~b6uBJD%e<_h*P=z>JwhB$XilhgX+S8|ERaE{rP9=dFbbcd#xbE(jtwaFn6{ew3Vs&okW@H`GK>kh zs}Y79t8GZBZv!WEoX|7M#qkAIq;YHtN=dGyEGwy*^#oN`XgDRW;J{^Rj%yh9A2`Yj ztf3U&sAYyx-{Gzdc@=4n_GA!HK`7LOk{$xtxZDxO4LqDnHJFD3aH&T;LL!rBtF(0t zWs;h}=d>Ekm!1Pb(qKQ4NsKE(mng(*5Gqw|Z^9?SfyE8CK^ex}0J5krsT7iWRip{u zP!G(6qoQRcB{)Qf9^ruvLR(E5I7);jAf9o`d-IhcA!kBaYh3O7Rir7UJn08qd&7d^ zaUrA)9Zza∾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 F_+JZJBpUz# literal 0 HcmV?d00001 diff --git a/Fluent/resources/btn_min_hovered.png b/Fluent/resources/btn_min_hovered.png new file mode 100644 index 0000000000000000000000000000000000000000..41e9395ecc2d0b032f114280986664c1aedb0e5c GIT binary patch literal 10143 zcmcIq32>d&b(Vu!iyo z15Oy?;21-jW}1);Aq-$LSxS;=%nVCH%OounNJ+soAwwaFGYvE$ZE3&%Nlympy?-Q6 zDvzZ1MGX;mlZ3uQgzwH;4q$UYdho2iQ!`T%Ia8q zsoK{+)ZMY?JKyVQ@2_-sTqJu)&#HI?i0)e#S%>78tCK z7278U2ZlzwCb~Q7>vrLF_UF!y_WC1ZS9W)}Okn%PJ?FRk+DNrsE>ndv6|7y`WmFN% z#OdvfP~Ay%C*=h~yNK%IwtecW1JXt+yCv(DYDk&Vx9P&8Yp)rucCM+8);5lmtLfF% zp|QmcVZ$40W3|x@wHCTf|M&Yetdyq(4sRS8sGFx!?yL?}2eI}jo~3pDhP(VowK!HA zSzD_OG!E+ghQxO7vx711e|k~>P^C6LdP=6$6s8)AW7X~sMi?m&S)g<+m0iMgQF$6M zU4%?N+5=ap6vv8ld$?BV@4aR&kM{I*tsEL1D-M;bD?@h&lv>u`U+L1OWCgdyf-uEu z!3a?<6iI~^;A4u(US1@uTGtEsP%CfDjFI6dJ-1RTV~uHpcJ*pSrIO`Bxm;$2YOj!m zqO9;jg;7~$wwIOY^lImg^doqR1Mgim)2f0Mi?(Ph6|#a#C{FL1sSvrK zdezjcf&TWo-*pwsnY(v)l(TcLRywBs+~34{bJKHj+3^ikEShuplaGzoddJ3#BURT2 zOV7o>I$P;KTD&@6`?;O{|F8B_#w~9s4)s;Rpq(AremXO*nLL`#nWwh*)El1T;M3We zj!s!3DfUgCMi8tqTSk(k zL>rO{8$45q)s7LtjMXV(jHb zD;Zd;Vhe^=IbzdVEeNM2EoMt^zLub6p>0tY%DmK@tyL+MN=6rqDfL!ZxvH7bb6v|+ zO5g}^si>6bq+XT~QYfo(FJV*_i>x}=wXCQxUM8xb1=rbHrcf-GN`(scU1G9Q)T%Vs zwR#!RMaxSC!i>t+Di)v@FONHwyEcKp} zCPy|2b0YBIQsbql!-!N?QSXG+65cgi^E!;er>GY`Y9m5Qsbe-+ni%+5Y9ncK5Oo-n za91xq_rZopX%bQqg^11@h2u+GNaNTPl+xU2U02ew;3PFcS~w+d;=pxjLV1S$r^2{2 zcuMh$2Id(}1Xnup7Se=uI!&o06ly|Ahd}m<3+Ywra4xN24hNv9BaV>FBsLfugr`hX zpC+8Pf+gAs2+|(=$xPyvjEWeOVC#?VR{I7&vJ66ZyIZ;A0Fawbg(UfCpRA4U0TVj2}QEEWGAxWzPu!&Hqf!9(_GLsl$u_x`6bT$dLl}Q{2Ve80((y%2CKqPoi zxRsLflr`a}x^uY%gqsQvKAex2xS+u7l8LBvJ#gTdmKZ`};-N5F^)tWR^@){PT$?NNhIBR?!_IG(m!~Y+j@Q|421YBSU7HbS{%5)|!wq4lijX zE#=y4qm>ehWYKMGjD|*uM8}C!tpX=i+8`Q}XmrS=87@cyR&mzHfb`PBC!<7o1!@%W zNoEoob#zF;(h^OP>|4QHWG2b-ruKC&0UcSS-NaJK5kj+Jje-;`W(7_Y2WY9SrvjWCgP=xpIv*q~3g1yybMSA{Bonoi31sRM6}d5jEY$qIoC{bVUg#3&5+1FNWFnuJ|Ar%Gi5PV@Ii}0bsqbK-y*dVNqs<& zHR1AUADW@9MS&KWAgPa$T0ak&88Rg(xd;eK@_AUuqA3a7E3YXE29oFTGqnXWO(n7j z6BMmcj)nL>d%{d4PQ_|84d_QupEW5|rfu5<8IjMOl+fCld1&iY2o4D&1k{D@;Q%|sfnK93|Y^gpm&re2-3WaG(%>_eGV-zQ7MW?nirpFixes+l1|lNkmy^&4p=i zRx#H1Dbrv*ifc=o^goUGMEhr~PdPJF`-Dskqo_y(n3LopO^PBM4g7m#&dIhIMRDc1 z6jRz}`*i5ml!#CyFS41CTJjX5uf5t@hkDvMlNy#2WelcwB6_Z-kf^Cs%sPnXoD!B} zTkbU`4N|`MRDARv!w-zq^6Ge=qIaXgP|S_$b$oW7X$l7OD5vr=l0eb4k4R~t7%0R~ z$wWpnl%slMCR&-}w<4m@$Dwn(S6jo;;G(g{+#tt7%BNDG_-S~2{X7Lmg(z?-LZ)@B z7&Njl5`Ip}%%TkQ9?sC-`j}G>nSfbj>OHOwrfrL41hyp!OPftI8XoV^siIXC-XV$5 ztZ_9Q!z2?WLkDkiWG0y5CeiVR#~W1R$k}LCScLI%VgjO0>Iy-5fNCJ)K1p-MQ{h%)$)r3N!?VvWwL<2~~- zq=-cHy^YQ_>vtszF&=o64!dzG7#nNkOEBPGB&t-a1FB85zd8HFAWUP9z#7Oo_ecSW zR#T1{!lX>(&J1gYYf!h zKf`c|z-&3ibS{snXCbqUlsON2NsV}K?Fr40paPsQ`WDQT=7Gcv14CS*oisi+8w55^ zWtL1JF)tAYBxG&K;oDirtQSlZ5hbR=EUyEYh0JPA#UeqcE}h9?>X}H3d>R=+GQ%~L z$g53eArUJ{1Y=@8t|5Bvwza5akUlkse+bN9=Z?%OV~j4CmbjI|>^ujFYqgo)7cdXS zWZh+>!}%d2JeE+A;vy{1`)10_vb_cKA(1hY*F|C;`F?FPB*rxO3WVpz%1k7DDDeh8 zwo4*LX!F=7e8}QL$YQunh0e1rhC1)FEwr5@C(J}5RszOgNMs)OAUPd+oPo4fcoSVT z1m!<&GIRDh1Bv91L?$?n1T1gzJOT5|nfpu>$K4Pvc!3yiZwHipHnUa z@_jOM_F2ERp1geS%)h0sKlz@|)-Gil4Yjp> zVCTx<)~?v{;9X~)_tII%KKY4pwPo8EANMOy-Fn;iUu5L7hwnPF`qk%dIdk2ur~kvc zb?e?b;p>MUz47cf4!QlWzj)}Eulw);7hiDJ{!9B0{F9z%|NA$W9r)DxWWy=1e&+OZ z`(D}e=x<-XZqMq^E?@rSMJHd;@s(Aod(j#DeR$KYyB7Xv|G!)C)UIRJ-?z2%`qz%% zQas@LUw>>pJ?UGw55KtN=sQ=OvY_YT`(A%r{POBgU;5yeH=Ve<=j1E8juTsNT6E9A z?++ec|I$BhU;DKB#l+pWEu~+IyF1Rm{hkj#vgGPBR-IZs_oX`?YPMLrs{QW#!Bq8Ith z7xW)|`ctL5!kb6Ddc)D1o`1Y_*TTD&?p%M#&u`oPKs;&N{zu)t=$0k=yf?o0YTHTM zE;;IN_pJNMAMJYghV7+CK7QI;Kl$?;-+AZ2w*UER-@l!+^p$U{+I{Pqzj%7dR-=n`W&pa{llRI}De*MF@b)ER3Gu|5C zEI)DSvM22DM-M-BV(^-Uzgv3w{)cVu{_a1oIsWAn-)(#4=7ToET%x=&z}2b%LdPPE+#e`Qiy=m*8I0kmSp!|b~o&X zN)76CBo&30Vxcx2#K5#OvQCq*fB?DPG*{|0vd|C`-R zyP53ud(Qiw_q^}(Ue0&*rj74gaooF(>+0%Sv3^}RA79^@|6g`2J|CRy|2e)aA6@ss z@vg3uCi4GBJu|p!s;lcge=)TA;)#m~HuO~+!)wa5My0-HYIqb+cXgd}?$l_xy1hQp zU8!#!8tL!(@x5Q`=^m=}_go|g$iS$tZyQ>7#aR7iPfUa`GuYdz<#?LKF!4+{*} zC(7MZ!#hUC`=AVmCbswYxLjcO#RHqVePgWNE!U`0l?v9a?Ha0x zW#a5^MyT#3x|i}2p?yU4aoauf(F18?wZXpgLzg28&H%A>t>4av9EdT?N%_|f6v*{8=R;^mMsqi@@V$2ad9t@oZ^A8+g&tJdS? z^^u9wTEa%RH6|M4+Zr8ooBi`!G^|x;1&;0<+tD;nt=e1PQ6I+I<9L=f^&9Q;WA*Yx zV{CJyv7>cRn_3dPz0VKEbf0n2&`7N@IeuoY)C{H`$`kee9!3}`5m};iGnIY9^l@?) zF@1zgKRN(csFf$m3wyXx8yeiTkVgjw`qqz(Pn1Wh_4T2@2TH9O8mjg2GUcSMZK+-} z^^&RxQ8Kl`ddX;8!Cy47w%*hW_|T~C%#D%br#-jUsA7#-gZ61r(~KKls+elMRI3YB zDhpCBNmHrws-(>7>0M&A^Tvh{Jmnp4UNzUMh7}=QGf`C~CM)GqO$b&pT$D?i)`gX{ zT&Y%hPxoQDzOkb*HqfZSy7+yq+Beu38!p3zhK9>q>%F5RTXToT>X5r`XdI`vYbHc4 zs9!eo-HxH|rr-6ItGT=P_f+$9uGe~Iem&I2dJEHYdfCZsbu3zN_|uP#HwGsr%VTx7 z6_#FzfAx0Kf4qEovGxl)`~P3BPFk^MpiZT}FBa)-sDl3)unrrR6QXD!8CM@AxwAp$4pyoANF<7R= z1|Yv)ez9wEX>%LxsNMnb7&QO9JpvDAA? z+8o(5%!$B*i^faQgb}H%qTUIsCA@3C=1mxdPf;&?(nf?xsbe-+ni=?6w28Dih$f6l zxT}|*`(Q(&Gz(EAA(Hb(;rL<)X&jq^QkomBn@U<1oTMg53#a659Jnb>D9^C}D2$82 zQ;IJ%FwbZvxYCJtkS46tF;Yn=)P#}_f$S9*(yQojE}dWw2cW1Uj*#3WHW(X(r%Y2H zGfq3fGVKHeX^;KnChTjdR5b8f6d$=s46)dgc1k*%1>4Caj)SmuVnJ!x5(gkM{7kr& zlJdyf@Ke*dTn568!h;VN<0URAFuPbSL?4RAvpxl+mkvIeB*H6DqlnLP zlh~w_LjsnTXo_Ut3FZ>j!2He2gGC%B0;9b$ka3e8wiNQ z6Pgxbp&Y5CK@!XhoHh>7QCm+1I5!1BjplSQNLUoUqparO->gk0>L?S)=rfhL$Rv1j z5&KMvS(!N3OmgJUg(Dp@I?_zk%zHS|B4oOVuy$S&<9z1WBD~KZSb?@U zwMma2syssS+xd*8?aLX5?Eo4TPqJj@v6sn8ZC;S$vl}PFXf~*af z&-&0DZ7mA4zyygtC2IX5Wah|7P;wCvl;n%BkVR7xxL00N6bz)uinN`BME$}O$UqB=QCEjG`hFU`|qqG!aEO8u&NKT##)sisH(1DQ2|I z_vz5BDUqN^QDieAwd4__ufy6}hkDvM6AdefG6vH-kvvy3NYvC3?FP}DQ^E>t%e}^= zLCQCuicj8S_<@mHQ60}CdN&#j#oVY_$LHr6BN)u1oGQvl0!7miBBg<1pb$SJ6B)@+ zj_Qq>WMzThiiAQRhtBO`Z4F0*i^dvrg8~aFAEiL?)AIP{c?ygQQQ%U9Oy^iJXk=j| ze4de+M;YcloT0t-sh}P*0kg>HJ+7x_ZHr_Cwj~*h?WP$mk9X))(W(mXkVI(SxEhXO zl1Y-GgEs{-Gt6+aIh# z);S9I>ug(3FzBKrh?e&uBe}?_HyHuJ6d{>4R0-!=Q3fBf)L^DftkFevyk}m9h)6`= z+v;5NepjLpj0ii9u@OePMR_G)zUT$bFzuP%Cv58(rV$o2MtDJYg~AY1b=1NwWX?kh6)Hw- zDYlz1wk#AW%O|0!wa7^uBc2mu867UA@husI}dtEjd<_u3GI-e0-P}V7R;0ufy4|0LtLVrG(NQ(1h!6Po=hMy zFA)YLWNj$m+j+>m7mS%m5>sJT)B(&x=C!6`iJ()L&J-~9T%<)lO^hI!;TlR5)h6?h zh?OjXF)<(45WR5QT2wMfpPIuz1m>>`N9L6=Mi)#=+)80~UVy~4+Fb7on1^Dr?()&$ z;*bd*OQ?vr2rKfwxia%?Z^3*>WXu$Gk(fumRofhiF%3Qf;f1j>7YQHAyg`rcvV;-Z zBK8R%vbYek7;aOci)@Rb&Rc8?Z5PN1bCHOZfH4>nna4dyL5H5^AgvYNB$o_9`H!2- zf_=_GBKaec363KH%bOxk!2ELVJ~PE}H-rlwVhZwSLPkQJ3bvbJ&79*Gl*@p8i_C(3 zHgBz`FQ0phZ>gJ4zUkeX)|EG2*vY@0eNzZO%)V<>AHntb7~Uk>^7Mz#?CM&A*D&1X zbyweh!vh;n{=Ikn$=CkqwlAG_!;K$Yw))!ZpWJun^-B-FZNvAw=$d;TxV>C{b;b2> zqpz&5-MsQ1`jex+dF5B`-1pv3Y?`3_dws*VjsL;-Km9BF9(?~Br*GwV|Ll$Le2)KY z@5-f(RioGZ^#1CWm0w-DVM*!WZ;T%Ek)tj@{=u<*tKNHvK6Lay>|T99U9;i0VqfXH z^Ox))pIYYQEi0ef<&JrIN$+tF{`4o^$DVlAdl*bNPXH9sMuI{_4=5?_GJ-rPbfBZa8o2UH8B7$ZKD} zU2n-g(|R7wz8j&=*$Ub=M7D>Z}9DKl+1XcWpWAvybli;ya$Y ze&1&+r^QEhe`w8FyKjHwwQTLstKYrsTXzk9Yu)|7yy)M)`Pe(n{;5;`wd)7}ZVzr5 z*?-+VFJ5+`zV4+%&m4T|p=);Ed(y>UJo|zl-n!!G&pf+i({Yco)pzt<75{m|iskoR z`h^?MzIFHO6PK{53x2s`>Ejz-Ts``}zj^$Lzx&4LezX7X1IvECGCuLp1Mhxua{0^p zuU3Ba$2Z)(&))R#Maw^O!pBC#tH+=G?b>-u?!9kS_~iamfBlg&)^1z!>{CyD^_UZ` z`m_I#cVBV$GvTCfe}3~BH=I~~?w%igZ@ar?#dEj*)8luYy6sEPKYho>o)@ZH{_&FA z|MtRlU$4FWmOp*q@SJm( mzIIjrp{K?kKk?P2ubjI4=?&GlzmmTOw?1wRf1hpn*#82mEQEpp literal 0 HcmV?d00001 diff --git a/Fluent/resources/btn_min_pushed.png b/Fluent/resources/btn_min_pushed.png new file mode 100644 index 0000000000000000000000000000000000000000..57f7211ae5b2d9614e7b7811768e45de9cfc0410 GIT binary patch literal 10260 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 literal 0 HcmV?d00001