From 9ce44b6973eeaf8830403dd97dc982079c2cf7a3 Mon Sep 17 00:00:00 2001 From: Jan Holthuis Date: Sun, 23 May 2021 02:11:41 +0200 Subject: [PATCH] [WIP] Add qmldemo skin --- res/skins/qmldemo/MixxxSlider.qml | 33 ++++++ res/skins/qmldemo/MixxxToggleButton.qml | 30 +++++ res/skins/qmldemo/main.qml | 141 ++++++++++++++++++++++++ res/skins/qmldemo/skin.ini | 4 + res/skins/qmldemo/skin_preview.png | Bin 0 -> 20265 bytes 5 files changed, 208 insertions(+) create mode 100644 res/skins/qmldemo/MixxxSlider.qml create mode 100644 res/skins/qmldemo/MixxxToggleButton.qml create mode 100644 res/skins/qmldemo/main.qml create mode 100644 res/skins/qmldemo/skin.ini create mode 100644 res/skins/qmldemo/skin_preview.png diff --git a/res/skins/qmldemo/MixxxSlider.qml b/res/skins/qmldemo/MixxxSlider.qml new file mode 100644 index 00000000000..e588db09a18 --- /dev/null +++ b/res/skins/qmldemo/MixxxSlider.qml @@ -0,0 +1,33 @@ +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import Mixxx 1.0 + +Item { + id: root + property alias group: control.group + property alias key: control.key + + Slider { + id: slider + orientation: Qt.Vertical + value: control.parameter + wheelEnabled: true + + Control { + id: control + parameter: slider.value + } + + handle: Image { + source: "../LateNight/palemoon/sliders/knob_volume_deck.svg" + width: 42 + height: 19 + x: slider.leftPadding + slider.availableWidth / 2 - width / 2 + y: slider.visualPosition * (slider.height - height) + } + + background: Image { + source: "../LateNight/palemoon/sliders/slider_volume_deck.svg" + } + } +} diff --git a/res/skins/qmldemo/MixxxToggleButton.qml b/res/skins/qmldemo/MixxxToggleButton.qml new file mode 100644 index 00000000000..d8f4b2f60d4 --- /dev/null +++ b/res/skins/qmldemo/MixxxToggleButton.qml @@ -0,0 +1,30 @@ +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import Mixxx 1.0 + +Item { + id: root + property alias group: control.group + property alias key: control.key + property alias icon: button.icon + required property string icon_source + property string icon_source_active: icon + required property string bg_source + property string bg_source_active: bg_source + + Button { + id: button + highlighted: control.value + + Control { + id: control + } + + onPressed: control.value ? control.value = 0.0 : control.value = 1.0 + + icon.source: button.highlighted ? root.icon_source_active : root.icon_source; + background: Image { + source: button.highlighted ? root.bg_source_active : root.bg_source; + } + } +} diff --git a/res/skins/qmldemo/main.qml b/res/skins/qmldemo/main.qml new file mode 100644 index 00000000000..7b530ca1acf --- /dev/null +++ b/res/skins/qmldemo/main.qml @@ -0,0 +1,141 @@ +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.11 + +Rectangle { + id: window + width: 1920 + height: 1080 + color: "#202020" + visible: true + + Rectangle { + anchors.centerIn: parent + + RowLayout { + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + anchors.fill: parent + spacing: 6 + + MixxxToggleButton { + width: 68 + height: 26 + group: "[Channel1]" + key: "play" + icon.width: 50 + icon.height: 24 + icon_source: "../LateNight/palemoon/buttons/btn__play_deck.svg" + icon_source_active: "../LateNight/palemoon/buttons/btn__play_deck_active.svg" + bg_source_active: "../LateNight/palemoon/buttons/btn_embedded_play_active.svg" + bg_source: "../LateNight/palemoon/buttons/btn_embedded_play.svg" + } + + ColumnLayout { + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + + MixxxKnob { + width: 35 + height: 35 + group: "[EqualizerRack1_[Channel1]_Effect1]" + key: "parameter3" + } + MixxxKnob { + width: 35 + height: 35 + group: "[EqualizerRack1_[Channel1]_Effect1]" + key: "parameter2" + } + MixxxKnob { + width: 35 + height: 35 + group: "[EqualizerRack1_[Channel1]_Effect1]" + key: "parameter1" + } + MixxxKnob { + width: 35 + height: 35 + group: "[QuickEffectRack1_[Channel1]]" + key: "super1" + } + } + + ColumnLayout { + Layout.alignment: Qt.AlignHCenter | Qt.AlignTop + + MixxxKnob { + width: 35 + height: 35 + group: "[Channel1]" + key: "pregain" + } + + MixxxSlider { + width: 35 + height: 100 + group: "[Channel1]" + key: "volume" + } + } + + ColumnLayout { + Layout.alignment: Qt.AlignHCenter | Qt.AlignTop + + MixxxKnob { + width: 35 + height: 35 + group: "[Channel2]" + key: "pregain" + } + + MixxxSlider { + width: 42 + height: 100 + group: "[Channel2]" + key: "volume" + } + } + + ColumnLayout { + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + + MixxxKnob { + width: 35 + height: 35 + group: "[EqualizerRack1_[Channel2]_Effect1]" + key: "parameter3" + } + MixxxKnob { + width: 35 + height: 35 + group: "[EqualizerRack1_[Channel2]_Effect1]" + key: "parameter2" + } + MixxxKnob { + width: 35 + height: 35 + group: "[EqualizerRack1_[Channel2]_Effect1]" + key: "parameter1" + } + MixxxKnob { + width: 35 + height: 35 + group: "[QuickEffectRack1_[Channel2]]" + key: "super1" + } + } + + MixxxToggleButton { + width: 68 + height: 26 + group: "[Channel2]" + key: "play" + icon.width: 50 + icon.height: 24 + icon_source: "../LateNight/palemoon/buttons/btn__play_deck.svg" + icon_source_active: "../LateNight/palemoon/buttons/btn__play_deck_active.svg" + bg_source_active: "../LateNight/palemoon/buttons/btn_embedded_play_active.svg" + bg_source: "../LateNight/palemoon/buttons/btn_embedded_play.svg" + } + } + } +} diff --git a/res/skins/qmldemo/skin.ini b/res/skins/qmldemo/skin.ini new file mode 100644 index 00000000000..7dc83573a50 --- /dev/null +++ b/res/skins/qmldemo/skin.ini @@ -0,0 +1,4 @@ +[Skin] +description = "A QML example skin." +min_pixel_width = 1920 +min_pixel_height = 1080 diff --git a/res/skins/qmldemo/skin_preview.png b/res/skins/qmldemo/skin_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..f719322a99c7723305e385ccaf46254a9beb71f5 GIT binary patch literal 20265 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