aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2017-08-30 13:29:00 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2017-08-30 12:29:25 +0000
commitf0697c622ab087faa19679725250c0ac7f79372d (patch)
tree1352e89c391404af361ef2949b7c0ac9da27ca7e /src
parent31d90e308e46d644d74e9434ce31dd664677bc59 (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.qml2
-rw-r--r--src/imports/controls/ComboBox.qml2
-rw-r--r--src/imports/controls/Dial.qml2
-rw-r--r--src/imports/controls/MenuItem.qml4
-rw-r--r--src/quickcontrols2/qquickcolorimage.cpp5
-rw-r--r--src/quickcontrols2/qquickcolorimage_p.h3
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();