From e2f7ac7e576eb3877919b54df170fc489ddcff44 Mon Sep 17 00:00:00 2001 From: ajuncosa Date: Fri, 26 Jun 2026 18:19:16 +0200 Subject: [PATCH 1/6] Add new accent colors replacing legacy ones --- muse | 2 +- sandbox/web_sandbox/configs/dark.cfg | 2 +- sandbox/web_sandbox/configs/light.cfg | 2 +- src/app/configs/dark.cfg | 2 +- src/app/configs/light.cfg | 2 +- .../FirstLaunchSetupDialog.qml | 2 +- .../AppShell/FirstLaunchSetup/ThemesPage.qml | 3 - .../FirstLaunchSetup/TutorialsPage.qml | 8 +- .../Preferences/AccentColorsList.qml | 117 +++++++++++------- .../internal/AccentColorsSection.qml | 8 +- 10 files changed, 87 insertions(+), 61 deletions(-) diff --git a/muse b/muse index 85cb301795f5c..e0c49b9ea5c60 160000 --- a/muse +++ b/muse @@ -1 +1 @@ -Subproject commit 85cb301795f5cf729e0c4d93082e9a7ef0d94936 +Subproject commit e0c49b9ea5c605b6ca8dc08dc3611474d70097c2 diff --git a/sandbox/web_sandbox/configs/dark.cfg b/sandbox/web_sandbox/configs/dark.cfg index 79daf9bfa7de5..d164f9a9dcb99 100644 --- a/sandbox/web_sandbox/configs/dark.cfg +++ b/sandbox/web_sandbox/configs/dark.cfg @@ -3,7 +3,7 @@ "background_secondary_color": "#363638", "popup_background_color": "#39393C", "text_field_color": "#242427", - "accent_color": "#2093FE", + "accent_color": "#2082DD", "stroke_color": "#1E1E1E", "button_color": "#595959", "font_primary_color": "#EBEBEB", diff --git a/sandbox/web_sandbox/configs/light.cfg b/sandbox/web_sandbox/configs/light.cfg index 490417bc57b15..355e581c7aa5e 100644 --- a/sandbox/web_sandbox/configs/light.cfg +++ b/sandbox/web_sandbox/configs/light.cfg @@ -3,7 +3,7 @@ "background_secondary_color": "#E6E9ED", "popup_background_color": "#F5F5F6", "text_field_color": "#FFFFFF", - "accent_color": "#70AFEA", + "accent_color": "#62B1FA", "stroke_color": "#CED1D4", "button_color": "#CFD5DD", "font_primary_color": "#111132", diff --git a/src/app/configs/dark.cfg b/src/app/configs/dark.cfg index 79daf9bfa7de5..d164f9a9dcb99 100644 --- a/src/app/configs/dark.cfg +++ b/src/app/configs/dark.cfg @@ -3,7 +3,7 @@ "background_secondary_color": "#363638", "popup_background_color": "#39393C", "text_field_color": "#242427", - "accent_color": "#2093FE", + "accent_color": "#2082DD", "stroke_color": "#1E1E1E", "button_color": "#595959", "font_primary_color": "#EBEBEB", diff --git a/src/app/configs/light.cfg b/src/app/configs/light.cfg index 490417bc57b15..355e581c7aa5e 100644 --- a/src/app/configs/light.cfg +++ b/src/app/configs/light.cfg @@ -3,7 +3,7 @@ "background_secondary_color": "#E6E9ED", "popup_background_color": "#F5F5F6", "text_field_color": "#FFFFFF", - "accent_color": "#70AFEA", + "accent_color": "#62B1FA", "stroke_color": "#CED1D4", "button_color": "#CFD5DD", "font_primary_color": "#111132", diff --git a/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/FirstLaunchSetupDialog.qml b/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/FirstLaunchSetupDialog.qml index 6dff426609f28..247897e839797 100644 --- a/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/FirstLaunchSetupDialog.qml +++ b/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/FirstLaunchSetupDialog.qml @@ -32,7 +32,7 @@ StyledDialogView { title: qsTrc("appshell/gettingstarted", "Getting started") contentWidth: 576 - contentHeight: 384 + contentHeight: 416 margins: 20 diff --git a/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/ThemesPage.qml b/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/ThemesPage.qml index 32306137f3b90..a1e0390b6b578 100644 --- a/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/ThemesPage.qml +++ b/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/ThemesPage.qml @@ -99,9 +99,6 @@ Page { colors: model.accentColors currentColorIndex: model.currentAccentColorIndex - sampleSize: 20 - spacing: 4 - navigationPanel.section: root.navigationSection navigationPanel.order: root.navigationStartRow + 3 diff --git a/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/TutorialsPage.qml b/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/TutorialsPage.qml index 7f39bed115a72..a0fe9a601d40e 100644 --- a/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/TutorialsPage.qml +++ b/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/TutorialsPage.qml @@ -32,7 +32,7 @@ Page { title: qsTrc("appshell/gettingstarted", "Video tutorials") explanation: qsTrc("appshell/gettingstarted", "Behind this dialog is the ‘Learn’ section, where you’ll find tutorials to get you started\n(Video tutorials require an internet connection)") - titleContentSpacing: 24 + titleContentSpacing: 32 TutorialsPageModel { id: tutorialsModel @@ -42,7 +42,7 @@ Page { id: content anchors.fill: parent - spacing: 20 + spacing: 40 Item { id: imageArea @@ -55,8 +55,8 @@ Page { anchors.centerIn: parent - height: parent.height - width: implicitWidth + height: 172 + width: 277 fillMode: Image.PreserveAspectFit source: "resources/VideoTutorials.png" diff --git a/src/preferences/qml/MuseScore/Preferences/AccentColorsList.qml b/src/preferences/qml/MuseScore/Preferences/AccentColorsList.qml index 64057e346f8a6..294f27974b403 100644 --- a/src/preferences/qml/MuseScore/Preferences/AccentColorsList.qml +++ b/src/preferences/qml/MuseScore/Preferences/AccentColorsList.qml @@ -26,83 +26,112 @@ import QtQuick import Muse.Ui import Muse.UiComponents -RadioButtonGroup { +Grid { id: root - property alias colors: root.model - property alias currentColorIndex: root.currentIndex + property var colors: [] + property int currentColorIndex: -1 property NavigationPanel navigationPanel: NavigationPanel { name: "AccentColorsList" enabled: root.enabled && root.visible - direction: NavigationPanel.Horizontal + direction: NavigationPanel.Both onNavigationEvent: function(event) { - if (event.type === NavigationEvent.AboutActive) { - event.setData("controlIndex", [root.navigationRow, root.navigationColumnStart + root.currentIndex]) + if (event.type === NavigationEvent.AboutActive && root.currentColorIndex >= 0) { + event.setData("controlIndex", [root.navigationRowOf(root.currentColorIndex), + root.navigationColumnOf(root.currentColorIndex)]) } } } - property int navigationRow: -1 + property int navigationRow: 0 property int navigationColumnStart: 0 - property int navigationColumnEnd: navigationColumnStart + count - property real sampleSize: 30 + property real sampleSize: 24 readonly property real totalSampleSize: sampleSize + 6 + // Height of a single row, so callers can align labels with the first row only: + readonly property real firstRowHeight: totalSampleSize + signal accentColorChangeRequested(var newColorIndex) - implicitWidth: count * totalSampleSize + (count - 1) * spacing - implicitHeight: totalSampleSize - spacing: 10 + columns: Math.floor(root.colors.length / 2) + spacing: 6 - delegate: RoundedRadioButton { - id: button + // Visual order of the color indices (first row is left-to-right, second row is right-to-left): + readonly property var orderedColorIndices: { + let indices = [] - required property int index - required property var modelData - readonly property color accentColor: modelData + for (let i = 0; i < root.columns && i < root.colors.length; ++i) { + indices.push(i) + } + for (let j = root.colors.length - 1; j >= root.columns; --j) { + indices.push(j) + } + return indices + } - width: root.totalSampleSize - height: width + function navigationRowOf(colorIndex) { + return root.navigationRow + (colorIndex < root.columns ? 0 : 1) + } - checked: root.currentIndex === index + function navigationColumnOf(colorIndex) { + return root.navigationColumnStart + (colorIndex < root.columns + ? colorIndex + : root.colors.length - 1 - colorIndex) + } - navigation.name: "AccentColourButton" - navigation.panel: root.navigationPanel - navigation.row: root.navigationRow - navigation.column: root.navigationColumnStart + index - navigation.accessible.name: Utils.accessibleColorDescription(accentColor) + Repeater { + model: root.orderedColorIndices - onToggled: { - root.accentColorChangeRequested(index) - } + delegate: RoundedRadioButton { + id: button - indicator: Rectangle { - anchors.fill: parent + required property var modelData + readonly property int colorIndex: modelData + readonly property color accentColor: root.colors[colorIndex] - color: "transparent" - border.color: ui.theme.fontPrimaryColor - border.width: parent.checked ? 1 : 0 - radius: width / 2 + width: root.totalSampleSize + height: width - NavigationFocusBorder { navigationCtrl: button.navigation } + checked: root.currentColorIndex === colorIndex - Rectangle { - anchors.centerIn: parent + navigation.name: "AccentColourButton" + navigation.panel: root.navigationPanel + navigation.row: root.navigationRowOf(colorIndex) + navigation.column: root.navigationColumnOf(colorIndex) + navigation.accessible.name: Utils.accessibleColorDescription(accentColor) - width: root.sampleSize - height: width + onClicked: { + root.accentColorChangeRequested(colorIndex) + } + + indicator: Rectangle { + anchors.fill: parent + + color: "transparent" + border.color: ui.theme.fontPrimaryColor + border.width: parent.checked ? 1 : 0 radius: width / 2 - border.color: ui.theme.strokeColor - border.width: 1 + NavigationFocusBorder { navigationCtrl: button.navigation } + + Rectangle { + anchors.centerIn: parent + + width: root.sampleSize + height: width + radius: width / 2 - color: button.accentColor + border.color: ui.theme.strokeColor + border.width: 1 + + color: button.accentColor + } } - } - background: null + background: null + } } } diff --git a/src/preferences/qml/MuseScore/Preferences/internal/AccentColorsSection.qml b/src/preferences/qml/MuseScore/Preferences/internal/AccentColorsSection.qml index 8e56803bb57cf..18363de123df4 100644 --- a/src/preferences/qml/MuseScore/Preferences/internal/AccentColorsSection.qml +++ b/src/preferences/qml/MuseScore/Preferences/internal/AccentColorsSection.qml @@ -34,7 +34,7 @@ Row { property NavigationPanel navigation: NavigationPanel { name: titleLabel.text enabled: root.enabled && root.visible - direction: NavigationPanel.Horizontal + direction: NavigationPanel.Both accessible.name: titleLabel.text onActiveChanged: function(active) { @@ -55,8 +55,10 @@ Row { id: titleLabel width: root.columnWidth - anchors.verticalCenter: parent.verticalCenter + anchors.top: parent.top + height: colorsList.firstRowHeight horizontalAlignment: Qt.AlignLeft + verticalAlignment: Qt.AlignVCenter text: qsTrc("preferences", "Accent color") } @@ -66,8 +68,6 @@ Row { navigationPanel: root.navigation - sampleSize: 30 - onAccentColorChangeRequested: function(newColorIndex) { root.accentColorChangeRequested(newColorIndex) } From eef1c0ffe99070a74bbcde6a313dc3682c3f8ffa Mon Sep 17 00:00:00 2001 From: ajuncosa Date: Mon, 29 Jun 2026 18:31:25 +0200 Subject: [PATCH 2/6] Update MuseSounds image in the Getting Started dialog --- .../FirstLaunchSetup/resources/MuseSounds.png | Bin 43581 -> 33530 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/resources/MuseSounds.png b/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/resources/MuseSounds.png index dcb3d37f67bb3646f832fec1437f0e92a44cd7d4..80ab419f776c3b86b7d9088dff53d4cdee9b5a0c 100644 GIT binary patch literal 33530 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 literal 43581 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 Date: Wed, 1 Jul 2026 13:38:31 +0200 Subject: [PATCH 3/6] Fix ThemeSample border colour to match current theme instead of preview theme; Left align accent colours in Preferences --- .../Preferences/AccentColorsList.qml | 3 -- .../internal/AccentColorsSection.qml | 6 +--- .../Preferences/internal/ThemeSample.qml | 2 +- .../Preferences/internal/ThemesSection.qml | 28 +++++++++---------- 4 files changed, 16 insertions(+), 23 deletions(-) diff --git a/src/preferences/qml/MuseScore/Preferences/AccentColorsList.qml b/src/preferences/qml/MuseScore/Preferences/AccentColorsList.qml index 294f27974b403..ea7b1d67fc3e8 100644 --- a/src/preferences/qml/MuseScore/Preferences/AccentColorsList.qml +++ b/src/preferences/qml/MuseScore/Preferences/AccentColorsList.qml @@ -51,9 +51,6 @@ Grid { property real sampleSize: 24 readonly property real totalSampleSize: sampleSize + 6 - // Height of a single row, so callers can align labels with the first row only: - readonly property real firstRowHeight: totalSampleSize - signal accentColorChangeRequested(var newColorIndex) columns: Math.floor(root.colors.length / 2) diff --git a/src/preferences/qml/MuseScore/Preferences/internal/AccentColorsSection.qml b/src/preferences/qml/MuseScore/Preferences/internal/AccentColorsSection.qml index 18363de123df4..9f8801c79f644 100644 --- a/src/preferences/qml/MuseScore/Preferences/internal/AccentColorsSection.qml +++ b/src/preferences/qml/MuseScore/Preferences/internal/AccentColorsSection.qml @@ -25,7 +25,7 @@ import QtQuick.Controls import Muse.Ui import Muse.UiComponents -Row { +Column { id: root property alias colors: colorsList.colors @@ -48,17 +48,13 @@ Row { signal accentColorChangeRequested(var newColorIndex) - height: colorsList.height spacing: 12 StyledTextLabel { id: titleLabel width: root.columnWidth - anchors.top: parent.top - height: colorsList.firstRowHeight horizontalAlignment: Qt.AlignLeft - verticalAlignment: Qt.AlignVCenter text: qsTrc("preferences", "Accent color") } diff --git a/src/preferences/qml/MuseScore/Preferences/internal/ThemeSample.qml b/src/preferences/qml/MuseScore/Preferences/internal/ThemeSample.qml index 44a4a65857a2b..3bffb345c3ae8 100644 --- a/src/preferences/qml/MuseScore/Preferences/internal/ThemeSample.qml +++ b/src/preferences/qml/MuseScore/Preferences/internal/ThemeSample.qml @@ -129,7 +129,7 @@ Rectangle { color: "transparent" radius: 4 border.width: 1 - border.color: mouseArea.containsMouse ? root.theme.accentColor : root.theme.strokeColor + border.color: mouseArea.containsMouse ? ui.theme.accentColor : ui.theme.strokeColor } MouseArea { diff --git a/src/preferences/qml/MuseScore/Preferences/internal/ThemesSection.qml b/src/preferences/qml/MuseScore/Preferences/internal/ThemesSection.qml index e1c82e0db1bc3..4f934fc262860 100644 --- a/src/preferences/qml/MuseScore/Preferences/internal/ThemesSection.qml +++ b/src/preferences/qml/MuseScore/Preferences/internal/ThemesSection.qml @@ -102,26 +102,26 @@ BaseSection { } } } - } - AccentColorsSection { - id: accentColorsSection + AccentColorsSection { + id: accentColorsSection - columnWidth: root.columnWidth - spacing: root.columnSpacing + columnWidth: root.columnWidth + spacing: root.columnSpacing - visible: !root.highContrastEnabled + visible: !root.highContrastEnabled - navigation.section: root.navigation.section - navigation.order: root.navigation.order + 1 + navigation.section: root.navigation.section + navigation.order: root.navigation.order + 1 - onAccentColorChangeRequested: function(newColorIndex) { - root.accentColorChangeRequested(newColorIndex) - } + onAccentColorChangeRequested: function(newColorIndex) { + root.accentColorChangeRequested(newColorIndex) + } - onFocusChanged: { - if (activeFocus) { - root.ensureContentVisibleRequested(Qt.rect(x, y, width, height)) + onFocusChanged: { + if (activeFocus) { + root.ensureContentVisibleRequested(Qt.rect(x, y, width, height)) + } } } } From afa3504c91fa163ef863cec4df51c23ec90acce4 Mon Sep 17 00:00:00 2001 From: ajuncosa Date: Thu, 2 Jul 2026 11:51:58 +0200 Subject: [PATCH 4/6] Fix keyboard navigation in Accent Colours list --- src/preferences/qml/MuseScore/Preferences/AccentColorsList.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/preferences/qml/MuseScore/Preferences/AccentColorsList.qml b/src/preferences/qml/MuseScore/Preferences/AccentColorsList.qml index ea7b1d67fc3e8..b055991295f74 100644 --- a/src/preferences/qml/MuseScore/Preferences/AccentColorsList.qml +++ b/src/preferences/qml/MuseScore/Preferences/AccentColorsList.qml @@ -100,7 +100,7 @@ Grid { navigation.column: root.navigationColumnOf(colorIndex) navigation.accessible.name: Utils.accessibleColorDescription(accentColor) - onClicked: { + onToggled: { root.accentColorChangeRequested(colorIndex) } From b2384edec4bfdd755cfc16e589d776a63cf21edb Mon Sep 17 00:00:00 2001 From: ajuncosa Date: Thu, 2 Jul 2026 12:59:37 +0200 Subject: [PATCH 5/6] Fix flashing of ThemeSamples whenever an accent colour was selected --- .../AppShell/FirstLaunchSetup/ThemesPage.qml | 1 + .../FirstLaunchSetup/themespagemodel.cpp | 16 +++++++++++++ .../FirstLaunchSetup/themespagemodel.h | 5 ++++ .../Preferences/AppearancePreferencesPage.qml | 1 + .../Preferences/ThemeSamplesList.qml | 19 ++++++++------- .../appearancepreferencesmodel.cpp | 24 +++++++++++++++++++ .../Preferences/appearancepreferencesmodel.h | 11 ++++++++- .../Preferences/internal/ThemeSample.qml | 2 +- .../Preferences/internal/ThemesSection.qml | 1 + 9 files changed, 70 insertions(+), 10 deletions(-) diff --git a/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/ThemesPage.qml b/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/ThemesPage.qml index a1e0390b6b578..c1301ca78deda 100644 --- a/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/ThemesPage.qml +++ b/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/ThemesPage.qml @@ -78,6 +78,7 @@ Page { Layout.alignment: Qt.AlignCenter themes: model.highContrastEnabled ? model.highContrastThemes : model.generalThemes + themeCodes: model.highContrastEnabled ? model.highContrastThemeCodes : model.generalThemeCodes currentThemeCode: model.currentThemeCode spacing: 48 diff --git a/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/themespagemodel.cpp b/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/themespagemodel.cpp index 9ce9047a17c1b..4860b1fc0295c 100644 --- a/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/themespagemodel.cpp +++ b/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/themespagemodel.cpp @@ -66,6 +66,22 @@ ThemeList ThemesPageModel::allThemes() const return uiConfiguration()->themes(); } +QStringList ThemesPageModel::generalThemeCodes() const +{ + return { + QString::fromStdString(LIGHT_THEME_CODE), + QString::fromStdString(DARK_THEME_CODE) + }; +} + +QStringList ThemesPageModel::highContrastThemeCodes() const +{ + return { + QString::fromStdString(HIGH_CONTRAST_WHITE_THEME_CODE), + QString::fromStdString(HIGH_CONTRAST_BLACK_THEME_CODE) + }; +} + QVariantList ThemesPageModel::generalThemes() const { QVariantList result; diff --git a/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/themespagemodel.h b/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/themespagemodel.h index 2838dd0df971b..3fd162ad64b31 100644 --- a/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/themespagemodel.h +++ b/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/themespagemodel.h @@ -38,6 +38,9 @@ class ThemesPageModel : public QObject, public muse::Contextable, public muse::a Q_PROPERTY(bool isFollowSystemThemeAvailable READ isFollowSystemThemeAvailable CONSTANT) Q_PROPERTY(bool isFollowSystemTheme READ isFollowSystemTheme WRITE setFollowSystemTheme NOTIFY isFollowSystemThemeChanged) + Q_PROPERTY(QStringList generalThemeCodes READ generalThemeCodes CONSTANT) + Q_PROPERTY(QStringList highContrastThemeCodes READ highContrastThemeCodes CONSTANT) + Q_PROPERTY(bool highContrastEnabled READ highContrastEnabled WRITE setHighContrastEnabled NOTIFY highContrastEnabledChanged) Q_PROPERTY(QVariantList generalThemes READ generalThemes NOTIFY themesChanged) Q_PROPERTY(QVariantList highContrastThemes READ highContrastThemes NOTIFY themesChanged) @@ -58,6 +61,8 @@ class ThemesPageModel : public QObject, public muse::Contextable, public muse::a bool isFollowSystemThemeAvailable() const; bool isFollowSystemTheme() const; + QStringList generalThemeCodes() const; + QStringList highContrastThemeCodes() const; QVariantList generalThemes() const; QVariantList highContrastThemes() const; bool highContrastEnabled() const; diff --git a/src/preferences/qml/MuseScore/Preferences/AppearancePreferencesPage.qml b/src/preferences/qml/MuseScore/Preferences/AppearancePreferencesPage.qml index ddd68e2b3a6b9..6e49aa987487a 100644 --- a/src/preferences/qml/MuseScore/Preferences/AppearancePreferencesPage.qml +++ b/src/preferences/qml/MuseScore/Preferences/AppearancePreferencesPage.qml @@ -46,6 +46,7 @@ PreferencesPage { width: parent.width themes: appearanceModel.highContrastEnabled ? appearanceModel.highContrastThemes : appearanceModel.generalThemes + themeCodes: appearanceModel.highContrastEnabled ? appearanceModel.highContrastThemeCodes : appearanceModel.generalThemeCodes currentThemeCode: appearanceModel.currentThemeCode highContrastEnabled: appearanceModel.highContrastEnabled isFollowSystemThemeAvailable: appearanceModel.isFollowSystemThemeAvailable diff --git a/src/preferences/qml/MuseScore/Preferences/ThemeSamplesList.qml b/src/preferences/qml/MuseScore/Preferences/ThemeSamplesList.qml index aa19555d13a96..f92369c4df8e5 100644 --- a/src/preferences/qml/MuseScore/Preferences/ThemeSamplesList.qml +++ b/src/preferences/qml/MuseScore/Preferences/ThemeSamplesList.qml @@ -29,10 +29,11 @@ import "internal" ListView { id: root - property alias themes: root.model + required property var themes // re-read on every color edit, used to paint the samples + property alias themeCodes: root.model // does not change on color edits, so that the delegates aren't destroyed & re-created property string currentThemeCode - currentIndex: model.findIndex((theme) => theme.codeKey === currentThemeCode) + currentIndex: themeCodes.indexOf(currentThemeCode) property NavigationPanel navigationPanel: NavigationPanel { name: "ThemeSamplesList" @@ -70,26 +71,28 @@ ListView { spacing: 16 + readonly property var themeData: root.themes.find((theme) => theme.codeKey === modelData) + ThemeSample { - theme: modelData + theme: parent.themeData ?? ui.theme onClicked: { - root.themeChangeRequested(modelData.codeKey) + root.themeChangeRequested(modelData) } } RoundedRadioButton { width: parent.width - checked: root.currentThemeCode === modelData.codeKey - text: modelData.title + checked: root.currentThemeCode === modelData + text: parent.themeData ? parent.themeData.title : "" navigation.name: text navigation.panel: root.navigationPanel navigation.row: root.navigationRow - navigation.column: root.navigationColumnStart + model.index + navigation.column: root.navigationColumnStart + index onToggled: { - root.themeChangeRequested(modelData.codeKey) + root.themeChangeRequested(modelData) } } } diff --git a/src/preferences/qml/MuseScore/Preferences/appearancepreferencesmodel.cpp b/src/preferences/qml/MuseScore/Preferences/appearancepreferencesmodel.cpp index 3a2ebb84edf9c..98b8ddf5532f2 100644 --- a/src/preferences/qml/MuseScore/Preferences/appearancepreferencesmodel.cpp +++ b/src/preferences/qml/MuseScore/Preferences/appearancepreferencesmodel.cpp @@ -46,9 +46,17 @@ void AppearancePreferencesModel::init() emit isFollowSystemThemeChanged(); }); + m_lastHighContrast = highContrastEnabled(); + uiConfiguration()->currentThemeChanged().onNotify(this, [this]() { emit themesChanged(); emit foregroundColorChanged(); + + bool hc = highContrastEnabled(); + if (hc != m_lastHighContrast) { + m_lastHighContrast = hc; + emit highContrastEnabledChanged(); + } }); uiConfiguration()->fontChanged().onNotify(this, [this]() { @@ -103,6 +111,22 @@ bool AppearancePreferencesModel::highContrastEnabled() const return uiConfiguration()->isHighContrast(); } +QStringList AppearancePreferencesModel::generalThemeCodes() const +{ + return { + QString::fromStdString(LIGHT_THEME_CODE), + QString::fromStdString(DARK_THEME_CODE) + }; +} + +QStringList AppearancePreferencesModel::highContrastThemeCodes() const +{ + return { + QString::fromStdString(HIGH_CONTRAST_WHITE_THEME_CODE), + QString::fromStdString(HIGH_CONTRAST_BLACK_THEME_CODE) + }; +} + QVariantList AppearancePreferencesModel::generalThemes() const { QVariantList result; diff --git a/src/preferences/qml/MuseScore/Preferences/appearancepreferencesmodel.h b/src/preferences/qml/MuseScore/Preferences/appearancepreferencesmodel.h index ee3a15393ee17..556d4928407da 100644 --- a/src/preferences/qml/MuseScore/Preferences/appearancepreferencesmodel.h +++ b/src/preferences/qml/MuseScore/Preferences/appearancepreferencesmodel.h @@ -40,7 +40,11 @@ class AppearancePreferencesModel : public QObject, public muse::Contextable, pub Q_PROPERTY(bool isFollowSystemThemeAvailable READ isFollowSystemThemeAvailable CONSTANT) Q_PROPERTY(bool isFollowSystemTheme READ isFollowSystemTheme WRITE setFollowSystemTheme NOTIFY isFollowSystemThemeChanged) - Q_PROPERTY(bool highContrastEnabled READ highContrastEnabled WRITE setHighContrastEnabled NOTIFY themesChanged) + Q_PROPERTY(QStringList generalThemeCodes READ generalThemeCodes CONSTANT) + Q_PROPERTY(QStringList highContrastThemeCodes READ highContrastThemeCodes CONSTANT) + + Q_PROPERTY(bool highContrastEnabled READ highContrastEnabled WRITE setHighContrastEnabled NOTIFY highContrastEnabledChanged) + Q_PROPERTY(QVariantList generalThemes READ generalThemes NOTIFY themesChanged) Q_PROPERTY(QVariantList highContrastThemes READ highContrastThemes NOTIFY themesChanged) Q_PROPERTY(QStringList accentColors READ accentColors NOTIFY themesChanged) @@ -86,6 +90,8 @@ class AppearancePreferencesModel : public QObject, public muse::Contextable, pub bool isFollowSystemTheme() const; bool highContrastEnabled() const; + QStringList generalThemeCodes() const; + QStringList highContrastThemeCodes() const; QVariantList generalThemes() const; QVariantList highContrastThemes() const; @@ -133,6 +139,7 @@ public slots: signals: void isFollowSystemThemeChanged(); + void highContrastEnabledChanged(); void themesChanged(); void currentFontIndexChanged(); void bodyTextSizeChanged(); @@ -148,5 +155,7 @@ public slots: private: muse::ui::ThemeInfo currentTheme() const; muse::ui::ThemeList allThemes() const; + + bool m_lastHighContrast = false; }; } diff --git a/src/preferences/qml/MuseScore/Preferences/internal/ThemeSample.qml b/src/preferences/qml/MuseScore/Preferences/internal/ThemeSample.qml index 3bffb345c3ae8..9d0bae44a950c 100644 --- a/src/preferences/qml/MuseScore/Preferences/internal/ThemeSample.qml +++ b/src/preferences/qml/MuseScore/Preferences/internal/ThemeSample.qml @@ -25,7 +25,7 @@ import Muse.UiComponents Rectangle { id: root - property var theme + required property var theme signal clicked diff --git a/src/preferences/qml/MuseScore/Preferences/internal/ThemesSection.qml b/src/preferences/qml/MuseScore/Preferences/internal/ThemesSection.qml index 4f934fc262860..512ed11e43649 100644 --- a/src/preferences/qml/MuseScore/Preferences/internal/ThemesSection.qml +++ b/src/preferences/qml/MuseScore/Preferences/internal/ThemesSection.qml @@ -36,6 +36,7 @@ BaseSection { property alias isFollowSystemTheme: followSystemThemeCheckBox.checked property alias themes: themeSamplesList.themes + property alias themeCodes: themeSamplesList.themeCodes property alias currentThemeCode: themeSamplesList.currentThemeCode property alias accentColors: accentColorsSection.colors From fa65ef728d7c6a150c8682d638afe7ec4c25c446 Mon Sep 17 00:00:00 2001 From: ajuncosa Date: Tue, 7 Jul 2026 08:46:31 +0200 Subject: [PATCH 6/6] Add theme sample strokes when HC mode is enabled --- .../qml/MuseScore/AppShell/FirstLaunchSetup/ThemesPage.qml | 1 + src/preferences/qml/MuseScore/Preferences/ThemeSamplesList.qml | 2 ++ .../qml/MuseScore/Preferences/internal/ThemeSample.qml | 3 +++ .../qml/MuseScore/Preferences/internal/ThemesSection.qml | 1 + 4 files changed, 7 insertions(+) diff --git a/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/ThemesPage.qml b/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/ThemesPage.qml index c1301ca78deda..e31d6c9a3ea20 100644 --- a/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/ThemesPage.qml +++ b/src/appshell/qml/MuseScore/AppShell/FirstLaunchSetup/ThemesPage.qml @@ -80,6 +80,7 @@ Page { themes: model.highContrastEnabled ? model.highContrastThemes : model.generalThemes themeCodes: model.highContrastEnabled ? model.highContrastThemeCodes : model.generalThemeCodes currentThemeCode: model.currentThemeCode + highContrast: model.highContrastEnabled spacing: 48 diff --git a/src/preferences/qml/MuseScore/Preferences/ThemeSamplesList.qml b/src/preferences/qml/MuseScore/Preferences/ThemeSamplesList.qml index f92369c4df8e5..4aeda60c6883b 100644 --- a/src/preferences/qml/MuseScore/Preferences/ThemeSamplesList.qml +++ b/src/preferences/qml/MuseScore/Preferences/ThemeSamplesList.qml @@ -32,6 +32,7 @@ ListView { required property var themes // re-read on every color edit, used to paint the samples property alias themeCodes: root.model // does not change on color edits, so that the delegates aren't destroyed & re-created property string currentThemeCode + property bool highContrast: false currentIndex: themeCodes.indexOf(currentThemeCode) @@ -75,6 +76,7 @@ ListView { ThemeSample { theme: parent.themeData ?? ui.theme + highContrast: root.highContrast onClicked: { root.themeChangeRequested(modelData) diff --git a/src/preferences/qml/MuseScore/Preferences/internal/ThemeSample.qml b/src/preferences/qml/MuseScore/Preferences/internal/ThemeSample.qml index 9d0bae44a950c..fe01fb868a7ed 100644 --- a/src/preferences/qml/MuseScore/Preferences/internal/ThemeSample.qml +++ b/src/preferences/qml/MuseScore/Preferences/internal/ThemeSample.qml @@ -26,6 +26,7 @@ Rectangle { id: root required property var theme + property bool highContrast: false signal clicked @@ -110,6 +111,7 @@ Rectangle { radius: 3 color: Utils.colorWithAlpha(root.theme.accentColor, root.theme.buttonOpacityNormal) + border.color: root.highContrast ? root.theme.strokeColor : "transparent" } Rectangle { @@ -118,6 +120,7 @@ Rectangle { radius: 3 color: Utils.colorWithAlpha(root.theme.buttonColor, root.theme.buttonOpacityNormal) + border.color: root.highContrast ? root.theme.strokeColor : "transparent" } } } diff --git a/src/preferences/qml/MuseScore/Preferences/internal/ThemesSection.qml b/src/preferences/qml/MuseScore/Preferences/internal/ThemesSection.qml index 512ed11e43649..e98792ae0b1cb 100644 --- a/src/preferences/qml/MuseScore/Preferences/internal/ThemesSection.qml +++ b/src/preferences/qml/MuseScore/Preferences/internal/ThemesSection.qml @@ -57,6 +57,7 @@ BaseSection { id: themeSamplesList width: parent.width spacing: root.columnWidth + root.columnSpacing - sampleWidth + highContrast: root.highContrastEnabled navigationPanel: root.navigation navigationRow: 0