Optimize background color animation

This commit is contained in:
cutefishd 2021-03-17 23:17:51 +08:00
parent 360764be8d
commit e77d1f0f2a
5 changed files with 23 additions and 21 deletions

View file

@ -1,9 +0,0 @@
import QtQuick 2.12
Loader {
sourceComponent: _item
Component {
id: _item
}
}

View file

@ -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
}
}
}

View file

@ -102,6 +102,5 @@
<file>svg/light/dark-mode.svg</file>
<file>svg/dark/dark-mode.svg</file>
<file>svg/dark/bluetooth-symbolic.svg</file>
<file>qml/StatusNotifierItem.qml</file>
</qresource>
</RCC>

View file

@ -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,6 +230,9 @@ void IconItem::setSource(const QVariant &source)
m_iconItemSource.reset(new QImageSource(imageIcon, this));
}
} else {
// 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()) {
@ -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();

View file

@ -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;