diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2017-08-30 13:29:00 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2017-08-30 12:29:25 +0000 |
commit | f0697c622ab087faa19679725250c0ac7f79372d (patch) | |
tree | 1352e89c391404af361ef2949b7c0ac9da27ca7e /src | |
parent | 31d90e308e46d644d74e9434ce31dd664677bc59 (diff) |
ColorImage: colorize only if needed
QQuickColorImageProvider got replaced by QQuickColorImage in 9fc3659.
This seems to have introduced a performance regression in several
controls that are now colorizing images even when there's no need to.
Various indicator images have the correct default color that matches
the normal state. They need to be colorized only when gaining focus
or being disabled, for example.
The improvement in qmlbench results:
- CheckBox: 70 => 84 frames
- ComboBox: 88 => 92 frames
- Dial: 73 => 77 frames
- MenuItem: 73 => 84 frames
Change-Id: I9155042542f5069cff201a1730b9dd2a62cffd67
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/imports/controls/CheckIndicator.qml | 2 | ||||
-rw-r--r-- | src/imports/controls/ComboBox.qml | 2 | ||||
-rw-r--r-- | src/imports/controls/Dial.qml | 2 | ||||
-rw-r--r-- | src/imports/controls/MenuItem.qml | 4 | ||||
-rw-r--r-- | src/quickcontrols2/qquickcolorimage.cpp | 5 | ||||
-rw-r--r-- | src/quickcontrols2/qquickcolorimage_p.h | 3 |
6 files changed, 12 insertions, 6 deletions
diff --git a/src/imports/controls/CheckIndicator.qml b/src/imports/controls/CheckIndicator.qml index 2bc87fe6..a3137ff1 100644 --- a/src/imports/controls/CheckIndicator.qml +++ b/src/imports/controls/CheckIndicator.qml @@ -58,7 +58,7 @@ Rectangle { ColorImage { x: (parent.width - width) / 2 y: (parent.height - height) / 2 - color: control.visualFocus ? Default.focusColor : Default.textColor + color: control.visualFocus ? Default.focusColor : undefined source: "qrc:/qt-project.org/imports/QtQuick/Controls.2/images/check.png" visible: control.checkState === Qt.Checked } diff --git a/src/imports/controls/ComboBox.qml b/src/imports/controls/ComboBox.qml index a3735880..2c834d8d 100644 --- a/src/imports/controls/ComboBox.qml +++ b/src/imports/controls/ComboBox.qml @@ -64,7 +64,7 @@ T.ComboBox { indicator: ColorImage { x: control.mirrored ? control.padding : control.width - width - control.padding y: control.topPadding + (control.availableHeight - height) / 2 - color: !control.editable && control.visualFocus ? Default.focusColor : Default.textColor + color: !control.editable && control.visualFocus ? Default.focusColor : undefined source: "qrc:/qt-project.org/imports/QtQuick/Controls.2/images/double-arrow.png" opacity: enabled ? 1 : 0.3 } diff --git a/src/imports/controls/Dial.qml b/src/imports/controls/Dial.qml index f33ebf72..ae5e490a 100644 --- a/src/imports/controls/Dial.qml +++ b/src/imports/controls/Dial.qml @@ -59,7 +59,7 @@ T.Dial { y: background.y + background.height / 2 - handle.height / 2 width: 14 height: 10 - color: control.visualFocus ? Default.focusColor : Default.textColor + color: control.visualFocus ? Default.focusColor : undefined source: "qrc:/qt-project.org/imports/QtQuick/Controls.2/images/dial-indicator.png" antialiasing: true opacity: control.enabled ? 1 : 0.3 diff --git a/src/imports/controls/MenuItem.qml b/src/imports/controls/MenuItem.qml index 225f9310..c3be68f6 100644 --- a/src/imports/controls/MenuItem.qml +++ b/src/imports/controls/MenuItem.qml @@ -79,7 +79,7 @@ T.MenuItem { visible: control.checked source: control.checkable ? "qrc:/qt-project.org/imports/QtQuick/Controls.2/images/check.png" : "" - color: control.enabled ? Default.textDarkColor : Default.textDisabledColor + color: control.enabled ? undefined : Default.textDisabledColor } arrow: ColorImage { @@ -89,7 +89,7 @@ T.MenuItem { visible: control.subMenu mirror: control.mirrored source: control.subMenu ? "qrc:/qt-project.org/imports/QtQuick/Controls.2/images/arrow-indicator.png" : "" - color: control.enabled ? Default.textDarkColor : Default.textDisabledColor + color: control.enabled ? undefined : Default.textDisabledColor } background: Item { diff --git a/src/quickcontrols2/qquickcolorimage.cpp b/src/quickcontrols2/qquickcolorimage.cpp index 430ba6ea..9358c3ca 100644 --- a/src/quickcontrols2/qquickcolorimage.cpp +++ b/src/quickcontrols2/qquickcolorimage.cpp @@ -61,6 +61,11 @@ void QQuickColorImage::setColor(const QColor &color) emit colorChanged(); } +void QQuickColorImage::resetColor() +{ + setColor(Qt::transparent); +} + void QQuickColorImage::pixmapChange() { QQuickImage::pixmapChange(); diff --git a/src/quickcontrols2/qquickcolorimage_p.h b/src/quickcontrols2/qquickcolorimage_p.h index 8b0f769d..6de2e21b 100644 --- a/src/quickcontrols2/qquickcolorimage_p.h +++ b/src/quickcontrols2/qquickcolorimage_p.h @@ -57,13 +57,14 @@ QT_BEGIN_NAMESPACE class Q_QUICKCONTROLS2_PRIVATE_EXPORT QQuickColorImage : public QQuickImage { Q_OBJECT - Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged FINAL) + Q_PROPERTY(QColor color READ color WRITE setColor RESET resetColor NOTIFY colorChanged FINAL) public: explicit QQuickColorImage(QQuickItem *parent = nullptr); QColor color() const; void setColor(const QColor &color); + void resetColor(); Q_SIGNALS: void colorChanged(); |