1- // SPDX-FileCopyrightText: 2021 - 2022 UnionTech Software Technology Co., Ltd.
1+ // SPDX-FileCopyrightText: 2021 - 2026 UnionTech Software Technology Co., Ltd.
22//
33// SPDX-License-Identifier: LGPL-3.0-or-later
44
@@ -19,92 +19,90 @@ RowLayout {
1919
2020 property var __dwindow: Window .window .D .DWindow
2121 property bool __forceHind: ! __dwindow .enabled || embedMode || Window .window .visibility === Window .FullScreen
22+
23+ // 缓存 motifFunctions 位运算结果,避免重复计算
24+ readonly property bool __canMinimize: __dwindow .motifFunctions & D .WindowManagerHelper .FUNC_MINIMIZE
25+ readonly property bool __canMaximize: __dwindow .motifFunctions & D .WindowManagerHelper .FUNC_MAXIMIZE
26+ readonly property bool __canResize: __dwindow .motifFunctions & D .WindowManagerHelper .FUNC_RESIZE
27+ readonly property bool __canClose: __dwindow .motifFunctions & D .WindowManagerHelper .FUNC_CLOSE
2228
2329 onMaxOrWinded: {
24- if (! ( __dwindow . motifFunctions & D . WindowManagerHelper . FUNC_MAXIMIZE ) ) {
30+ if (! __canMaximize ) {
2531 return
2632 }
2733
2834 if (Window .window .visibility === Window .Maximized ) {
2935 __dwindow .showNormal ()
3036 } else if (Window .window .visibility !== Window .FullScreen &&
31- maxOrWindedBtn .active ) {
37+ maxOrWindedBtn .visible ) {
3238 __dwindow .showMaximized ()
3339 }
3440 }
3541
36- Loader {
42+ WindowButton {
3743 objectName: " minimizeBtn"
3844 property bool hasWindowFlag/* : (Window.window.flags & Qt.WindowMinimizeButtonHint)*/
3945 Component .onCompleted : hasWindowFlag = (Window .window .flags & Qt .WindowMinimizeButtonHint )
40- active: hasWindowFlag && ! __forceHind
41- visible: active
42- enabled: (__dwindow .motifFunctions & D .WindowManagerHelper .FUNC_MINIMIZE )
43-
44- sourceComponent: WindowButton {
45- icon .name : " window_minimize"
46- textColor: control .textColor
47-
48- onClicked: {
49- __dwindow .showMinimized ()
50- }
46+
47+ icon .name : " window_minimize"
48+ textColor: control .textColor
49+
50+ visible: hasWindowFlag && ! __forceHind
51+ enabled: __canMinimize
52+
53+ onClicked: {
54+ __dwindow .showMinimized ()
5155 }
5256 }
5357
54- Loader {
58+ WindowButton {
5559 objectName: " quitFullBtn"
56- active: ! (! control .fullScreenButtonVisible ||
57- ! __dwindow .enabled ||
58- Window .window .visibility !== Window .FullScreen )
59- visible: active
60- sourceComponent: WindowButton {
61- icon .name : " window_quit_full"
62- textColor: control .textColor
63-
64- onClicked: {
65- if (Window .window .visibility === Window .FullScreen ) {
66- __dwindow .showNormal ()
67- } else {
68- __dwindow .showFullScreen ()
69- }
60+
61+ icon .name : " window_quit_full"
62+ textColor: control .textColor
63+
64+ visible: ! (! control .fullScreenButtonVisible ||
65+ ! __dwindow .enabled ||
66+ Window .window .visibility !== Window .FullScreen )
67+
68+ onClicked: {
69+ if (Window .window .visibility === Window .FullScreen ) {
70+ __dwindow .showNormal ()
71+ } else {
72+ __dwindow .showFullScreen ()
7073 }
7174 }
7275 }
7376
74- Loader {
77+ WindowButton {
7578 id: maxOrWindedBtn; objectName: " maxOrWindedBtn"
7679 property bool hasWindowFlag/* : (Window.window.flags & Qt.WindowMaximizeButtonHint)*/
7780 Component .onCompleted : hasWindowFlag = (Window .window .flags & Qt .WindowMaximizeButtonHint )
7881
79- readonly property size maxSize: Qt .size (Window .window .maximumWidth , Window .window .maximumHeight )
80- readonly property size minSize: Qt .size (Window .window .minimumWidth , Window .window .minimumHeight )
81- active: (hasWindowFlag && ! __forceHind &&
82- (__dwindow .motifFunctions & D .WindowManagerHelper .FUNC_RESIZE ) &&
83- maxSize != minSize)
84- visible: active
85- enabled: ((__dwindow .motifFunctions & D .WindowManagerHelper .FUNC_MAXIMIZE ) &&
86- (__dwindow .motifFunctions & D .WindowManagerHelper .FUNC_RESIZE ))
87-
88- sourceComponent: WindowButton {
89- property bool isMaximized: Window .window .visibility === Window .Maximized
90- icon .name : isMaximized ? " window_restore" : " window_maximize"
91- textColor: control .textColor
92- onClicked: maxOrWinded ()
93- }
82+ // 使用简单值比较代替对象创建,避免性能开销
83+ readonly property bool __sizeResizable: (Window .window .maximumWidth !== Window .window .minimumWidth ||
84+ Window .window .maximumHeight !== Window .window .minimumHeight )
85+
86+ property bool isMaximized: Window .window .visibility === Window .Maximized
87+ icon .name : isMaximized ? " window_restore" : " window_maximize"
88+ textColor: control .textColor
89+ onClicked: maxOrWinded ()
90+
91+ visible: (hasWindowFlag && ! __forceHind && __canResize && __sizeResizable)
92+ enabled: (__canMaximize && __canResize)
9493 }
9594
96- Loader {
95+ WindowButton {
9796 objectName: " closeBtn"
9897 property bool hasWindowFlag/* : (Window.window.flags & Qt.WindowCloseButtonHint)*/
9998 Component .onCompleted : hasWindowFlag = (Window .window .flags & Qt .WindowCloseButtonHint )
100- active: hasWindowFlag && __dwindow .enabled
101- visible: active
102- enabled: __dwindow .motifFunctions & D .WindowManagerHelper .FUNC_CLOSE
103-
104- sourceComponent: WindowButton {
105- icon .name : " window_close"
106- textColor: control .textColor
107- onClicked: Window .window .close ()
108- }
99+
100+ icon .name : " window_close"
101+ textColor: control .textColor
102+
103+ visible: hasWindowFlag && __dwindow .enabled
104+ enabled: __canClose
105+
106+ onClicked: Window .window .close ()
109107 }
110108}
0 commit comments