From e77d1f0f2ab495e0f680c634a349ca7d70b4bfaa Mon Sep 17 00:00:00 2001 From: cutefishd Date: Wed, 17 Mar 2021 23:17:51 +0800 Subject: [PATCH] Optimize background color animation --- qml/StatusNotifierItem.qml | 9 --------- qml/main.qml | 10 ++++++++-- resources.qrc | 1 - src/iconitem.cpp | 22 +++++++++++++++------- src/iconitem.h | 2 -- 5 files changed, 23 insertions(+), 21 deletions(-) delete mode 100644 qml/StatusNotifierItem.qml diff --git a/qml/StatusNotifierItem.qml b/qml/StatusNotifierItem.qml deleted file mode 100644 index af62393..0000000 --- a/qml/StatusNotifierItem.qml +++ /dev/null @@ -1,9 +0,0 @@ -import QtQuick 2.12 - -Loader { - sourceComponent: _item - - Component { - id: _item - } -} diff --git a/qml/main.qml b/qml/main.qml index 09dac29..fd939a4 100644 --- a/qml/main.qml +++ b/qml/main.qml @@ -6,7 +6,6 @@ import QtGraphicalEffects 1.0 import Cyber.NetworkManagement 1.0 as NM import Cutefish.Dock 1.0 import MeuiKit 1.0 as Meui -import org.kde.plasma.core 2.0 as PlasmaCore Item { id: root @@ -70,10 +69,17 @@ Item { color: Meui.Theme.backgroundColor opacity: Meui.Theme.darkMode ? 0.3 : 0.5 + Behavior on opacity { + NumberAnimation { + duration: 200 + easing.type: Easing.Linear + } + } + Behavior on color { ColorAnimation { duration: 200 - easing.type: Easing.InOutQuad + easing.type: Easing.Linear } } } diff --git a/resources.qrc b/resources.qrc index 4360cf5..754c47a 100644 --- a/resources.qrc +++ b/resources.qrc @@ -102,6 +102,5 @@ svg/light/dark-mode.svg svg/dark/dark-mode.svg svg/dark/bluetooth-symbolic.svg - qml/StatusNotifierItem.qml diff --git a/src/iconitem.cpp b/src/iconitem.cpp index e0b2116..b86b263 100644 --- a/src/iconitem.cpp +++ b/src/iconitem.cpp @@ -152,16 +152,20 @@ public: explicit SvgSource(const QString &sourceString, IconItem *iconItem) : IconItemSource(iconItem) { + m_reader.setFileName(sourceString); + } + bool isValid() const override { + return m_reader.canRead(); } const QSize size() const override { - return size(); + return QSize(); } QPixmap pixmap(const QSize &size) override { - Q_UNUSED(size); - return QPixmap(); + m_reader.setScaledSize(size * devicePixelRatio()); + return QPixmap::fromImage(m_reader.read()); } private: @@ -169,6 +173,7 @@ private: return window() ? window()->devicePixelRatio() : qApp->devicePixelRatio(); } + QImageReader m_reader; QString m_svgIconName; }; @@ -177,7 +182,6 @@ IconItem::IconItem(QQuickItem *parent) , m_iconItemSource(new NullSource(this)) , m_active(false) , m_animated(false) - , m_usesPlasmaTheme(false) , m_roundToIconSize(true) , m_textureChanged(false) , m_sizeChanged(false) @@ -226,7 +230,10 @@ void IconItem::setSource(const QVariant &source) m_iconItemSource.reset(new QImageSource(imageIcon, this)); } } else { - // m_iconItemSource.reset(new SvgSource(sourceString, this)); +// if (sourceString.startsWith("qrc:/")) +// m_iconItemSource.reset(new SvgSource(sourceString.remove(0, 3), this)); +// else if (sourceString.startsWith(":/")) +// m_iconItemSource.reset(new SvgSource(sourceString, this)); if (!m_iconItemSource->isValid()) { // if we started with a QIcon use that. @@ -388,7 +395,6 @@ void IconItem::loadPixmap() return; } - const qreal devicePixelRatio = window() ? window()->devicePixelRatio() : qApp->devicePixelRatio(); int size = qMin(qRound(width()), qRound(height())); QPixmap result; @@ -399,7 +405,9 @@ void IconItem::loadPixmap() } if (m_iconItemSource->isValid()) { - result = m_iconItemSource->pixmap(QSize(size * devicePixelRatio, size * devicePixelRatio)); + result = m_iconItemSource->pixmap(QSize(size * qApp->devicePixelRatio(), + size * qApp->devicePixelRatio())); + result.setDevicePixelRatio(qApp->devicePixelRatio()); } else { m_iconPixmap = QPixmap(); update(); diff --git a/src/iconitem.h b/src/iconitem.h index 89a2cd3..f8454f8 100644 --- a/src/iconitem.h +++ b/src/iconitem.h @@ -62,7 +62,6 @@ signals: void activeChanged(); void sourceChanged(); void animatedChanged(); - void usesPlasmaThemeChanged(); void roundToIconSizeChanged(); void validChanged(); void colorGroupChanged(); @@ -83,7 +82,6 @@ private: bool m_active; bool m_animated; - bool m_usesPlasmaTheme; bool m_roundToIconSize; bool m_textureChanged;