From feac04d441d4b9871f3abdbc84ffa970f2e4f8e6 Mon Sep 17 00:00:00 2001 From: cutefishd Date: Sun, 28 Mar 2021 22:35:06 +0800 Subject: [PATCH] Add stackview style --- .vscode/settings.json | 17 ++++++++++++++ src/iconitem.cpp | 5 +++-- src/meui-style/Button.qml | 29 ++++++++++-------------- src/meui-style/ComboBox.qml | 10 ++++----- src/meui-style/Dialog.qml | 7 +++++- src/meui-style/StackView.qml | 43 ++++++++++++++++++++++++++++++++++++ 6 files changed, 86 insertions(+), 25 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 src/meui-style/StackView.qml diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..48f21af --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,17 @@ +{ + "files.associations": { + "optional": "cpp", + "ostream": "cpp", + "ratio": "cpp", + "system_error": "cpp", + "array": "cpp", + "functional": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "variant": "cpp", + "string_view": "cpp", + "initializer_list": "cpp", + "ranges": "cpp" + } +} \ No newline at end of file diff --git a/src/iconitem.cpp b/src/iconitem.cpp index 40b3751..96bee9b 100644 --- a/src/iconitem.cpp +++ b/src/iconitem.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include "managedtexturenode.h" @@ -201,13 +202,11 @@ void IconItem::setSource(const QVariant &source) m_source = source; QString sourceString = source.toString(); - // If the QIcon was created with QIcon::fromTheme(), try to load it as svg if (source.canConvert() && !source.value().name().isEmpty()) { sourceString = source.value().name(); } if (!sourceString.isEmpty()) { - // If a file:// URL or a absolute path is passed, take the image pointed by that from disk QString localFile; if (sourceString.startsWith(QLatin1String("file:"))) { localFile = QUrl(sourceString).toLocalFile(); @@ -400,6 +399,8 @@ void IconItem::loadPixmap() return; } + QPixmapCache::clear(); + int size = qMin(qRound(width()), qRound(height())); QPixmap result; diff --git a/src/meui-style/Button.qml b/src/meui-style/Button.qml index 1a8cb4c..6cc8852 100644 --- a/src/meui-style/Button.qml +++ b/src/meui-style/Button.qml @@ -6,9 +6,8 @@ import QtQuick.Controls.impl 2.4 T.Button { id: control - implicitWidth: Math.max(background.implicitWidth + Meui.Units.extendBorderWidth + Meui.Theme.mediumRadius / 2, - contentItem.implicitWidth + Meui.Units.largeSpacing + Meui.Units.extendBorderWidth) - implicitHeight: background.implicitHeight + Meui.Units.extendBorderWidth + implicitWidth: Math.max(background.implicitWidth, contentItem.implicitWidth + Meui.Units.largeSpacing) + implicitHeight: background.implicitHeight hoverEnabled: true property color hoveredColor: Qt.tint(Meui.Theme.textColor, Qt.rgba(Meui.Theme.backgroundColor.r, @@ -31,7 +30,7 @@ T.Button text: control.text font: control.font icon: control.icon - color: !control.enabled ? control.Meui.Theme.disabledTextColor : control.flat ? Meui.Theme.highlightColor : Meui.Theme.textColor + color: !control.enabled ? control.Meui.Theme.disabledTextColor : control.flat ? Meui.Theme.highlightedTextColor : Meui.Theme.textColor spacing: control.spacing mirrored: control.mirrored display: control.display @@ -45,29 +44,25 @@ T.Button Rectangle { id: _border anchors.fill: parent + visible: control.activeFocus color: "transparent" - border.color: control.activeFocus ? Qt.rgba(Meui.Theme.highlightColor.r, - Meui.Theme.highlightColor.g, - Meui.Theme.highlightColor.b, 0.2) : "transparent" + border.color: Qt.rgba(Meui.Theme.highlightColor.r, + Meui.Theme.highlightColor.g, + Meui.Theme.highlightColor.b, 0.3) border.width: Meui.Units.extendBorderWidth - radius: Meui.Theme.mediumRadius + Meui.Units.extendBorderWidth - - Behavior on border.color { - ColorAnimation { - duration: 50 - } - } + radius: Meui.Theme.mediumRadius } Rectangle { anchors.fill: parent anchors.margins: Meui.Units.extendBorderWidth - radius: Meui.Theme.mediumRadius - border.color: control.activeFocus || control.pressed ? Meui.Theme.highlightColor : + radius: Meui.Theme.mediumRadius - Meui.Units.extendBorderWidth + border.color: control.flat && control.enabled ? Meui.Theme.highlightColor : control.activeFocus || control.pressed ? Meui.Theme.highlightColor : Qt.tint(Meui.Theme.textColor, Qt.rgba(Meui.Theme.backgroundColor.r, Meui.Theme.backgroundColor.g, Meui.Theme.backgroundColor.b, 0.7)) border.width: 1 - color: control.pressed ? control.pressedColor : control.hovered ? control.hoveredColor : Meui.Theme.backgroundColor + color: control.flat && control.enabled ? control.pressed ? control.flatPressedColor : control.hovered ? control.flatHoveredColor : Meui.Theme.highlightColor + : control.pressed ? control.pressedColor : control.hovered ? control.hoveredColor : Meui.Theme.backgroundColor } } } diff --git a/src/meui-style/ComboBox.qml b/src/meui-style/ComboBox.qml index d5742d0..951db47 100644 --- a/src/meui-style/ComboBox.qml +++ b/src/meui-style/ComboBox.qml @@ -45,11 +45,11 @@ import MeuiKit 1.0 as Meui T.ComboBox { id: control - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset + Meui.Units.extendBorderWidth, - implicitContentWidth + leftPadding + rightPadding + Meui.Units.extendBorderWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset + Meui.Units.extendBorderWidth, - implicitContentHeight + topPadding + bottomPadding + Meui.Units.extendBorderWidth, - implicitIndicatorHeight + topPadding + bottomPadding + Meui.Units.extendBorderWidth) + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) topInset: Meui.Units.smallSpacing bottomInset: Meui.Units.smallSpacing diff --git a/src/meui-style/Dialog.qml b/src/meui-style/Dialog.qml index aef4232..6ae6563 100644 --- a/src/meui-style/Dialog.qml +++ b/src/meui-style/Dialog.qml @@ -60,7 +60,12 @@ T.Dialog { contentItem: Item {} - background: Meui.RoundedRect { + background: Rectangle { + radius: Meui.Theme.mediumRadius + color: Meui.Theme.backgroundColor + border.width: 1 + border.color: Meui.Theme.darkMode ? Qt.rgba(255, 255, 255, 0.2) : Qt.rgba(0, 0, 0, 0.1) + layer.enabled: true layer.effect: DropShadow { transparentBorder: true diff --git a/src/meui-style/StackView.qml b/src/meui-style/StackView.qml new file mode 100644 index 0000000..743c426 --- /dev/null +++ b/src/meui-style/StackView.qml @@ -0,0 +1,43 @@ +import QtQuick 2.12 +import QtQuick.Templates 2.3 as T + + +T.StackView { + id: control + + popEnter: Transition { + // slide_in_left + NumberAnimation { property: "x"; from: (control.mirrored ? -0.5 : 0.5) * -control.width; to: 0; duration: 200; easing.type: Easing.OutCubic } + NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; duration: 200; easing.type: Easing.OutCubic } + } + + popExit: Transition { + // slide_out_right + NumberAnimation { property: "x"; from: 0; to: (control.mirrored ? -0.5 : 0.5) * control.width; duration: 200; easing.type: Easing.OutCubic } + NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; duration: 200; easing.type: Easing.OutCubic } + } + + pushEnter: Transition { + // slide_in_right + NumberAnimation { property: "x"; from: (control.mirrored ? -0.5 : 0.5) * control.width; to: 0; duration: 200; easing.type: Easing.OutCubic } + NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; duration: 200; easing.type: Easing.OutCubic } + } + + pushExit: Transition { + // slide_out_left + NumberAnimation { property: "x"; from: 0; to: (control.mirrored ? -0.5 : 0.5) * -control.width; duration: 200; easing.type: Easing.OutCubic } + NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; duration: 200; easing.type: Easing.OutCubic } + } + + replaceEnter: Transition { + // slide_in_right + NumberAnimation { property: "x"; from: (control.mirrored ? -0.5 : 0.5) * control.width; to: 0; duration: 200; easing.type: Easing.OutCubic } + NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; duration: 200; easing.type: Easing.OutCubic } + } + + replaceExit: Transition { + // slide_out_left + NumberAnimation { property: "x"; from: 0; to: (control.mirrored ? -0.5 : 0.5) * -control.width; duration: 200; easing.type: Easing.OutCubic } + NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; duration: 200; easing.type: Easing.OutCubic } + } +} \ No newline at end of file