RibbonTitleBar and RibbonWindow: Update for windows and improve window manager.

This commit is contained in:
Mentalflow 2024-04-05 14:27:17 +08:00
parent 2e6d85352a
commit 6ee70bc297
Signed by: Mentalflow
GPG Key ID: 5AE68D4401A2EE71
4 changed files with 33 additions and 33 deletions

View File

@ -6,7 +6,7 @@ import RibbonUI
Item {
id: control
height: 30
property int minimumWidth: title_text.implicitWidth + left_container.width + right_container.width + (Qt.platform.os === "osx" ? 65 : 0) + 40
property int minimumWidth: title_text.implicitWidth + Math.max(left_container.width, right_container.width) * 2 + (Qt.platform.os === "osx" ? 65 : 0) + 20
property string title: Window.window.title
property bool show_style_switch: true
property bool show_darkmode_btn: true

View File

@ -4,11 +4,13 @@ import org.wangwenx190.FramelessHelper
Window {
id:window
minimumWidth: title_bar.minimumWidth
default property alias content: container.data
property alias window_items: window_items
property alias title_bar: titleBar
property alias popup: pop
property bool comfirmed_quit: false
property var sub_windows: ({})
visible: false
color: {
if (FramelessHelper.blurBehindWindowEnabled) {
@ -75,8 +77,8 @@ Window {
anchors.fill: parent
color: 'transparent'
border.color: RibbonTheme.dark_mode ? "#7A7A7A" : "#2C59B7"
border.width: RibbonTheme.modern_style ? 1 : 0
radius: 10
border.width: RibbonTheme.modern_style ? Qt.platform.os === 'windows' ? 2 : 1 : 0
radius: Qt.platform.os === 'windows' ? 8 : 10
visible: RibbonTheme.modern_style
}
RibbonPopup{
@ -111,39 +113,36 @@ Window {
close_dialog.open()
}
Loader{
id: window_loader
property var args
onLoaded: {
item.onClosing.connect(function(){
window_loader.source = ""
})
if (!window_loader.args)
return
else if(Object.keys(window_loader.args).length){
for (let arg in window_loader.args){
item[arg] = window_loader.args[arg]
}
}
else{
console.error("RibbonWindow: Arguments error, please check.")
}
item.show()
}
}
function show_window(window_url, args){
if (window_url === window_loader.source && window_loader.status === Loader.Ready)
window_loader.item.raise()
else
window_loader.source = window_url
if (args !== window_loader.args && Object.keys(window_loader.args).length && window_loader.status === Loader.Ready)
if (sub_windows.hasOwnProperty(window_url))
{
window_loader.args = args
for (let arg in window_loader.args){
window_loader.item[arg] = window_loader.args[arg]
if (args && Object.keys(args).length)
{
for (let arg in args){
sub_windows[window_url][arg] = args[arg]
}
}
if (!sub_windows[window_url].visible)
{
sub_windows[window_url].show()
}
sub_windows[window_url].raise()
sub_windows[window_url].requestActivate()
return
}
var component = Qt.createComponent(window_url, Component.PreferSynchronous, undefined);
if (component.status === Component.Ready) {
var window = component.createObject(undefined, args);
sub_windows[window_url] = window
window.onClosing.connect(function() {
window.destroy()
delete sub_windows[window_url]
});
window.raise()
window.requestActivate()
} else if (component.status === Component.Error) {
console.error("RibbonWindow: Error loading Window:", component.errorString())
}
}
function show_popup(content_url, arguments)

View File

@ -1,5 +1,6 @@
#include "ribbonui.h"
#include <QMutex>
#include <QOperatingSystemVersion>
#define STR(x) #x
#define JOIN(a,b,c) STR(a.b.c)
#define VER_JOIN(x) JOIN x
@ -9,6 +10,7 @@ RibbonUI::RibbonUI(QQuickItem *parent)
{
_version = VER_JOIN((RIBBONUI_VERSION));
_qt_version = QString(qVersion()).replace('.',"").toInt();
_is_win11 = QOperatingSystemVersion::current() >= QOperatingSystemVersion(QOperatingSystemVersion::Windows, 10, 0, 22000);
}
RibbonUI* RibbonUI::instance(){
@ -26,9 +28,7 @@ void RibbonUI::init()
{
qputenv("QT_QUICK_CONTROLS_STYLE","Basic");
FramelessHelper::Quick::initialize();
#ifdef Q_OS_WIN
FramelessConfig::instance()->set(Global::Option::ForceHideWindowFrameBorder);
#endif
FramelessConfig::instance()->set(Global::Option::DisableLazyInitializationForMicaMaterial);
FramelessConfig::instance()->set(Global::Option::CenterWindowBeforeShow);
FramelessConfig::instance()->set(Global::Option::EnableBlurBehindWindow);

View File

@ -15,6 +15,7 @@ class RibbonUI : public QQuickItem
QML_NAMED_ELEMENT(RibbonUI)
Q_PROPERTY_R(QString, version)
Q_PROPERTY_R(int, qt_version)
Q_PROPERTY_R(int, is_win11)
public:
static RibbonUI* instance();
static RibbonUI* create(QQmlEngine *qmlEngine, QJSEngine *jsEngine){return instance();}