From eff8bdedc48b3c1d1951405338d8556f107fd127 Mon Sep 17 00:00:00 2001 From: "moneromooo.monero" Date: Fri, 9 Dec 2016 21:23:43 +0000 Subject: [PATCH 1/3] Make the custom decorations optional A number of people actually like those, so be nice to them. The size change icons still don't work, but that's not my problem :) --- MiddlePanel.qml | 4 +- components/TitleBar.qml | 119 ++++++++++++++++++++++++++++++++++++++-- main.qml | 43 ++++++++++++++- 3 files changed, 157 insertions(+), 9 deletions(-) diff --git a/MiddlePanel.qml b/MiddlePanel.qml index 6f6e3043..b21da0c0 100644 --- a/MiddlePanel.qml +++ b/MiddlePanel.qml @@ -166,7 +166,7 @@ Rectangle { ColumnLayout { anchors.fill: parent anchors.margins: 2 - anchors.topMargin: 0 + anchors.topMargin: appWindow.persistentSettings.customDecorations ? 30 : 0 spacing: 0 @@ -185,7 +185,7 @@ Rectangle { anchors.verticalCenter: parent.verticalCenter anchors.verticalCenterOffset: -5 anchors.left: parent.left - anchors.leftMargin: 40 + anchors.leftMargin: appWindow.persistentSettings.customDecorations ? 20 : 40 source: "images/moneroLogo2.png" } diff --git a/components/TitleBar.qml b/components/TitleBar.qml index 4279c792..aa793985 100644 --- a/components/TitleBar.qml +++ b/components/TitleBar.qml @@ -35,19 +35,36 @@ Rectangle { property int mouseX: 0 property bool containsMouse: false property alias basicButtonVisible: goToBasicVersionButton.visible + property bool customDecorations: true signal goToBasicVersion(bool yes) + height: customDecorations ? 30 : 0 + y: -height + property string title + property alias maximizeButtonVisible: maximizeButton.visible + + Text { + anchors.centerIn: parent + font.family: "Arial" + font.pixelSize: 15 + font.letterSpacing: -1 + color: "#FFFFFF" + text: titleBar.title + visible: customDecorations + } + + Behavior on y { + NumberAnimation { duration: 100; easing.type: Easing.InQuad } + } Rectangle { id: goToBasicVersionButton property bool containsMouse: titleBar.mouseX >= x && titleBar.mouseX <= x + width property bool checked: false anchors.top: parent.top - anchors.bottom: parent.bottom anchors.left: parent.left - anchors.right: parent.right color: containsMouse || checked ? "#FFE00A" : "#000000" - width: parent.width - height: parent.height + height: 30 + width: height Image { anchors.centerIn: parent @@ -64,4 +81,98 @@ Rectangle { } } } + + Row { + id: row + anchors.right: parent.right + anchors.top: parent.top + anchors.bottom: parent.bottom + visible: parent.customDecorations + + Rectangle { + property bool containsMouse: titleBar.mouseX >= x + row.x && titleBar.mouseX <= x + row.x + width && titleBar.containsMouse + anchors.top: parent.top + anchors.bottom: parent.bottom + width: height + color: containsMouse ? "#6B0072" : "#000000" + + Image { + anchors.centerIn: parent + source: "../images/helpIcon.png" + } + + MouseArea { + id: whatIsArea + anchors.fill: parent + onClicked: { + + } + } + } + + Rectangle { + property bool containsMouse: titleBar.mouseX >= x + row.x && titleBar.mouseX <= x + row.x + width && titleBar.containsMouse + anchors.top: parent.top + anchors.bottom: parent.bottom + width: height + color: containsMouse ? "#3665B3" : "#000000" + + Image { + anchors.centerIn: parent + source: "../images/minimizeIcon.png" + } + + MouseArea { + id: minimizeArea + anchors.fill: parent + onClicked: { + appWindow.visibility = Window.Minimized + } + } + } + + Rectangle { + id: maximizeButton + property bool containsMouse: titleBar.mouseX >= x + row.x && titleBar.mouseX <= x + row.x + width && titleBar.containsMouse + anchors.top: parent.top + anchors.bottom: parent.bottom + width: height + color: containsMouse ? "#FF6C3C" : "#000000" + + Image { + anchors.centerIn: parent + source: appWindow.visibility === Window.FullScreen ? "../images/backToWindowIcon.png" : + "../images/maximizeIcon.png" + + } + + MouseArea { + id: maximizeArea + anchors.fill: parent + onClicked: { + appWindow.visibility = appWindow.visibility !== Window.FullScreen ? Window.FullScreen : + Window.Windowed + } + } + } + + Rectangle { + property bool containsMouse: titleBar.mouseX >= x + row.x && titleBar.mouseX <= x + row.x + width && titleBar.containsMouse + anchors.top: parent.top + anchors.bottom: parent.bottom + width: height + color: containsMouse ? "#E04343" : "#000000" + + Image { + anchors.centerIn: parent + source: "../images/closeIcon.png" + } + + MouseArea { + anchors.fill: parent + onClicked: appWindow.close(); + } + } + } + } diff --git a/main.qml b/main.qml index 0bbe4be3..f6be732e 100644 --- a/main.qml +++ b/main.qml @@ -625,7 +625,7 @@ ApplicationWindow { width: rightPanelExpanded ? 1269 : 1269 - 300 height: maxWindowHeight; color: "#FFFFFF" - flags: Qt.WindowSystemMenuHint | Qt.Window | Qt.WindowMinimizeButtonHint | Qt.WindowCloseButtonHint | Qt.WindowTitleHint | Qt.WindowMaximizeButtonHint + flags: persistentSettings.customDecorations ? (Qt.FramelessWindowHint | Qt.WindowSystemMenuHint | Qt.Window | Qt.WindowMinimizeButtonHint) : (Qt.WindowSystemMenuHint | Qt.Window | Qt.WindowMinimizeButtonHint | Qt.WindowCloseButtonHint | Qt.WindowTitleHint | Qt.WindowMaximizeButtonHint) onWidthChanged: x -= 0 @@ -669,6 +669,7 @@ ApplicationWindow { property string payment_id property int restore_height : 0 property bool is_recovering : false + property bool customDecorations : true } // Information dialog @@ -757,8 +758,11 @@ ApplicationWindow { PropertyChanges { target: appWindow; width: 930; } PropertyChanges { target: appWindow; height: 595; } PropertyChanges { target: resizeArea; visible: false } + PropertyChanges { target: titleBar; maximizeButtonVisible: false } PropertyChanges { target: frameArea; blocked: true } PropertyChanges { target: titleBar; visible: false } + PropertyChanges { target: titleBar; y: 0 } + PropertyChanges { target: titleBar; title: qsTr("Program setup wizard") + translationManager.emptyString } }, State { name: "normal" PropertyChanges { target: leftPanel; visible: true } @@ -769,8 +773,11 @@ ApplicationWindow { PropertyChanges { target: appWindow; width: rightPanelExpanded ? 1269 : 1269 - 300; } PropertyChanges { target: appWindow; height: maxWindowHeight; } PropertyChanges { target: resizeArea; visible: true } + PropertyChanges { target: titleBar; maximizeButtonVisible: true } PropertyChanges { target: frameArea; blocked: false } PropertyChanges { target: titleBar; visible: true } + PropertyChanges { target: titleBar; y: 0 } + PropertyChanges { target: titleBar; title: qsTr("Monero") + translationManager.emptyString } } ] @@ -838,6 +845,11 @@ ApplicationWindow { properties: "visibility" value: Window.Windowed } + PropertyAction { + target: titleBar + properties: "maximizeButtonVisible" + value: false + } PropertyAction { target: frameArea properties: "blocked" @@ -926,6 +938,11 @@ ApplicationWindow { properties: "blocked" value: false } + PropertyAction { + target: titleBar + properties: "maximizeButtonVisible" + value: true + } } WizardMain { @@ -988,10 +1005,11 @@ ApplicationWindow { TitleBar { id: titleBar + anchors.left: parent.left + anchors.right: parent.right x: 0 y: 0 - width: 30 - height: 30 + customDecorations: persistentSettings.customDecorations onGoToBasicVersion: { if (yes) { // basicPanel.currentView = middlePanel.currentView @@ -1001,6 +1019,25 @@ ApplicationWindow { goToProAnimation.start() } } + + MouseArea { + enabled: persistentSettings.customDecorations + property var previousPosition + anchors.fill: parent + propagateComposedEvents: true + onPressed: previousPosition = globalCursor.getPosition() + onPositionChanged: { + if (pressedButtons == Qt.LeftButton) { + var pos = globalCursor.getPosition() + var dx = pos.x - previousPosition.x + var dy = pos.y - previousPosition.y + + appWindow.x += dx + appWindow.y += dy + previousPosition = pos + } + } + } } // new ToolTip From 456bf04db6ef56b0e70d9eedf0973e570120315f Mon Sep 17 00:00:00 2001 From: "moneromooo.monero" Date: Fri, 9 Dec 2016 21:35:08 +0000 Subject: [PATCH 2/3] Settings: add user option to toggle custom decorations Some people prefer those --- pages/Settings.qml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pages/Settings.qml b/pages/Settings.qml index 9d296d35..155cc5f3 100644 --- a/pages/Settings.qml +++ b/pages/Settings.qml @@ -334,6 +334,17 @@ Rectangle { } + RowLayout { + CheckBox { + id: customDecorationsCheckBox + checked: persistentSettings.customDecorations + onClicked: persistentSettings.customDecorations = checked + text: qsTr("Custom decorations") + translationManager.emptyString + checkedIcon: "../images/checkedVioletIcon.png" + uncheckedIcon: "../images/uncheckedIcon.png" + } + } + } // Daemon console From 2a7f1605348cfeca6def8e0f336d174bd7c13eb1 Mon Sep 17 00:00:00 2001 From: "moneromooo.monero" Date: Thu, 15 Dec 2016 00:59:10 +0000 Subject: [PATCH 3/3] Settings hide/show window after changing decorations type --- main.qml | 17 +++++++++++++++++ pages/Settings.qml | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/main.qml b/main.qml index f6be732e..39826ab8 100644 --- a/main.qml +++ b/main.qml @@ -628,6 +628,23 @@ ApplicationWindow { flags: persistentSettings.customDecorations ? (Qt.FramelessWindowHint | Qt.WindowSystemMenuHint | Qt.Window | Qt.WindowMinimizeButtonHint) : (Qt.WindowSystemMenuHint | Qt.Window | Qt.WindowMinimizeButtonHint | Qt.WindowCloseButtonHint | Qt.WindowTitleHint | Qt.WindowMaximizeButtonHint) onWidthChanged: x -= 0 + function setCustomWindowDecorations(custom) { + var x = appWindow.x + var y = appWindow.y + if (x < 0) + x = 0 + if (y < 0) + y = 0 + persistentSettings.customDecorations = custom + if (custom) + appWindow.flags = Qt.FramelessWindowHint | Qt.WindowSystemMenuHint | Qt.Window | Qt.WindowMinimizeButtonHint + else + appWindow.flags = Qt.WindowSystemMenuHint | Qt.Window | Qt.WindowMinimizeButtonHint | Qt.WindowCloseButtonHint | Qt.WindowTitleHint | Qt.WindowMaximizeButtonHint + appWindow.hide() + appWindow.x = x + appWindow.y = y + appWindow.show() + } Component.onCompleted: { x = (Screen.width - width) / 2 diff --git a/pages/Settings.qml b/pages/Settings.qml index 155cc5f3..649242d6 100644 --- a/pages/Settings.qml +++ b/pages/Settings.qml @@ -338,7 +338,7 @@ Rectangle { CheckBox { id: customDecorationsCheckBox checked: persistentSettings.customDecorations - onClicked: persistentSettings.customDecorations = checked + onClicked: appWindow.setCustomWindowDecorations(checked) text: qsTr("Custom decorations") + translationManager.emptyString checkedIcon: "../images/checkedVioletIcon.png" uncheckedIcon: "../images/uncheckedIcon.png"