diff options
author | Mitch Curtis <mitch.curtis@theqtcompany.com> | 2016-04-12 16:19:58 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@theqtcompany.com> | 2016-04-15 14:45:47 +0000 |
commit | eae24fccc57437170e2ba01b894fa24fe65292be (patch) | |
tree | dfbd1450c237df8c2cd08838d2f054ef029ceea8 | |
parent | 0fe0283308199a6bf4a155627cddd524638c7063 (diff) |
Add QQuickAbstractButton::down
This property will determine whether or not the button is visually
pressed. Having such a distinction allows users more control over their
controls.
The patch also fixes the problem with ComboBox where pressing on the
ComboBox when it's open would cause a delegate in the popup to show as
being pressed.
Unless explicitly set, this property follows the value of the pressed
property. To return to the default value, set it to undefined.
Change-Id: I29ecf325ed2ede125613f0c878b0427937599866
Task-number: QTBUG-51005
Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
46 files changed, 191 insertions, 96 deletions
diff --git a/src/imports/controls/Button.qml b/src/imports/controls/Button.qml index 82ff0914..406ae931 100644 --- a/src/imports/controls/Button.qml +++ b/src/imports/controls/Button.qml @@ -55,7 +55,7 @@ T.Button { text: control.text font: control.font opacity: enabled || highlighted ? 1 : 0.3 - color: control.checked || control.highlighted ? "#ffffff" : (control.activeKeyFocus ? "#0066ff" : (control.pressed ? "#26282a" : "#353637")) + color: control.checked || control.highlighted ? "#ffffff" : (control.activeKeyFocus ? "#0066ff" : (control.down ? "#26282a" : "#353637")) horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter elide: Text.ElideRight @@ -68,9 +68,9 @@ T.Button { implicitHeight: 40 opacity: enabled ? 1 : (control.checked ? 0.2 : 0.3) color: control.checked || control.highlighted ? - (control.activeKeyFocus ? (control.pressed ? "#599bff" : "#0066ff") : (control.pressed ? "#585a5c" : "#353637")) : - (control.activeKeyFocus ? (control.pressed ? "#cce0ff" : "#f0f6ff") : (control.pressed ? "#d6d6d6" : "#f6f6f6")) - border.color: control.activeKeyFocus ? "#0066ff" : (control.pressed ? "#26282a" : "#353637") + (control.activeKeyFocus ? (control.down ? "#599bff" : "#0066ff") : (control.down ? "#585a5c" : "#353637")) : + (control.activeKeyFocus ? (control.down ? "#cce0ff" : "#f0f6ff") : (control.down ? "#d6d6d6" : "#f6f6f6")) + border.color: control.activeKeyFocus ? "#0066ff" : (control.down ? "#26282a" : "#353637") border.width: control.checked || control.highlighted ? 0 : (control.activeKeyFocus ? 2 : 1) } //! [background] diff --git a/src/imports/controls/CheckBox.qml b/src/imports/controls/CheckBox.qml index 720bd428..f46b46f2 100644 --- a/src/imports/controls/CheckBox.qml +++ b/src/imports/controls/CheckBox.qml @@ -67,7 +67,7 @@ T.CheckBox { text: control.text font: control.font - color: control.pressed ? "#26282a" : "#353637" + color: control.down ? "#26282a" : "#353637" elide: Text.ElideRight visible: control.text horizontalAlignment: Text.AlignLeft diff --git a/src/imports/controls/CheckDelegate.qml b/src/imports/controls/CheckDelegate.qml index f09dfd15..c56ef221 100644 --- a/src/imports/controls/CheckDelegate.qml +++ b/src/imports/controls/CheckDelegate.qml @@ -79,8 +79,8 @@ T.CheckDelegate { background: Rectangle { implicitWidth: 100 implicitHeight: 40 - visible: control.pressed || control.highlighted - color: control.pressed ? "#bdbebf" : "#eeeeee" + visible: control.down || control.highlighted + color: control.down ? "#bdbebf" : "#eeeeee" } //! [background] } diff --git a/src/imports/controls/CheckIndicator.qml b/src/imports/controls/CheckIndicator.qml index 260a0d28..68ff134e 100644 --- a/src/imports/controls/CheckIndicator.qml +++ b/src/imports/controls/CheckIndicator.qml @@ -44,9 +44,9 @@ Rectangle { implicitWidth: 28 implicitHeight: 28 - color: control.enabled ? (control.pressed ? (control.activeFocus ? "#cce0ff" : "#e4e4e4") : "#f6f6f6") : "#353637" + color: control.enabled ? (control.down ? (control.activeFocus ? "#cce0ff" : "#e4e4e4") : "#f6f6f6") : "#353637" border.width: control.activeFocus ? 2 : 1 - border.color: control.enabled ? (control.activeFocus ? "#0066ff" : (control.pressed ? "#26282a" : "#353637")) : "transparent" + border.color: control.enabled ? (control.activeFocus ? "#0066ff" : (control.down ? "#26282a" : "#353637")) : "transparent" Image { x: (parent.width - width) / 2 diff --git a/src/imports/controls/ComboBox.qml b/src/imports/controls/ComboBox.qml index 08ce97c8..5ecd638c 100644 --- a/src/imports/controls/ComboBox.qml +++ b/src/imports/controls/ComboBox.qml @@ -60,7 +60,7 @@ T.ComboBox { autoExclusive: true checked: control.currentIndex === index highlighted: control.highlightedIndex === index - pressed: highlighted && control.pressed + down: highlighted && control.down } //! [delegate] @@ -85,7 +85,7 @@ T.ComboBox { width: parent.width height: parent.height opacity: control.enabled ? 1.0 : 0.2 - color: control.pressed || popup.visible ? "#585A5C" : "#353637" + color: control.down || popup.visible ? "#585A5C" : "#353637" } Image { diff --git a/src/imports/controls/ItemDelegate.qml b/src/imports/controls/ItemDelegate.qml index 4339df86..7bd4fd58 100644 --- a/src/imports/controls/ItemDelegate.qml +++ b/src/imports/controls/ItemDelegate.qml @@ -69,8 +69,8 @@ T.ItemDelegate { background: Rectangle { implicitWidth: 100 implicitHeight: 40 - visible: control.pressed || control.highlighted - color: control.pressed ? "#bdbebf" : "#eeeeee" + visible: control.down || control.highlighted + color: control.down ? "#bdbebf" : "#eeeeee" } //! [background] } diff --git a/src/imports/controls/MenuItem.qml b/src/imports/controls/MenuItem.qml index eb3135ce..1ad513e5 100644 --- a/src/imports/controls/MenuItem.qml +++ b/src/imports/controls/MenuItem.qml @@ -84,7 +84,7 @@ T.MenuItem { y: 1 width: parent.width - 2 height: parent.height - 2 - color: control.activeKeyFocus || control.pressed ? "#eeeeee" : "transparent" + color: control.activeKeyFocus || control.down ? "#eeeeee" : "transparent" } } //! [background] diff --git a/src/imports/controls/RadioButton.qml b/src/imports/controls/RadioButton.qml index e114ad89..b9ac74f3 100644 --- a/src/imports/controls/RadioButton.qml +++ b/src/imports/controls/RadioButton.qml @@ -67,7 +67,7 @@ T.RadioButton { text: control.text font: control.font - color: control.pressed ? "#26282a" : "#353637" + color: control.down ? "#26282a" : "#353637" elide: Text.ElideRight visible: control.text horizontalAlignment: Text.AlignLeft diff --git a/src/imports/controls/RadioDelegate.qml b/src/imports/controls/RadioDelegate.qml index f5e661bd..2dce11fd 100644 --- a/src/imports/controls/RadioDelegate.qml +++ b/src/imports/controls/RadioDelegate.qml @@ -78,8 +78,8 @@ T.RadioDelegate { background: Rectangle { implicitWidth: 100 implicitHeight: 40 - visible: control.pressed || control.highlighted - color: control.pressed ? "#bdbebf" : "#eeeeee" + visible: control.down || control.highlighted + color: control.down ? "#bdbebf" : "#eeeeee" } //! [background] } diff --git a/src/imports/controls/RadioIndicator.qml b/src/imports/controls/RadioIndicator.qml index 49e682e4..041f8f3e 100644 --- a/src/imports/controls/RadioIndicator.qml +++ b/src/imports/controls/RadioIndicator.qml @@ -41,9 +41,9 @@ Rectangle { implicitHeight: 28 radius: width / 2 - color: control.pressed ? (control.activeFocus ? "#cce0ff" : "#e4e4e4") : "#f6f6f6" + color: control.down ? (control.activeFocus ? "#cce0ff" : "#e4e4e4") : "#f6f6f6" border.width: control.activeFocus ? 2 : 1 - border.color: control.activeFocus ? "#0066ff" : (control.pressed ? "#26282a" : "#353637") + border.color: control.activeFocus ? "#0066ff" : (control.down ? "#26282a" : "#353637") property Item control diff --git a/src/imports/controls/SwipeDelegate.qml b/src/imports/controls/SwipeDelegate.qml index 6621f44d..12673f33 100644 --- a/src/imports/controls/SwipeDelegate.qml +++ b/src/imports/controls/SwipeDelegate.qml @@ -64,7 +64,7 @@ T.SwipeDelegate { verticalAlignment: Text.AlignVCenter Behavior on x { - enabled: !control.pressed + enabled: !control.down NumberAnimation { easing.type: Easing.InOutCubic duration: 400 @@ -75,10 +75,10 @@ T.SwipeDelegate { //! [background] background: Rectangle { - color: control.pressed ? "#bdbebf" : "#eeeeee" + color: control.down ? "#bdbebf" : "#eeeeee" Behavior on x { - enabled: !control.pressed + enabled: !control.down NumberAnimation { easing.type: Easing.InOutCubic duration: 400 diff --git a/src/imports/controls/TabButton.qml b/src/imports/controls/TabButton.qml index dff05d8c..352bef1a 100644 --- a/src/imports/controls/TabButton.qml +++ b/src/imports/controls/TabButton.qml @@ -54,7 +54,7 @@ T.TabButton { font: control.font elide: Text.ElideRight opacity: enabled ? 1 : 0.3 - color: !control.checked ? "#ffffff" : control.pressed ? "#26282a" : "#353637" + color: !control.checked ? "#ffffff" : control.down ? "#26282a" : "#353637" horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter } @@ -63,7 +63,7 @@ T.TabButton { //! [background] background: Rectangle { implicitHeight: 40 - color: control.pressed ? (control.checked ? "#e4e4e4" : "#585a5c") : (control.checked ? "transparent" : "#353637") + color: control.down ? (control.checked ? "#e4e4e4" : "#585a5c") : (control.checked ? "transparent" : "#353637") } //! [background] } diff --git a/src/imports/controls/ToolButton.qml b/src/imports/controls/ToolButton.qml index fd336371..8c903bb4 100644 --- a/src/imports/controls/ToolButton.qml +++ b/src/imports/controls/ToolButton.qml @@ -65,8 +65,8 @@ T.ToolButton { implicitHeight: 40 color: Qt.darker("#33333333", control.enabled && (control.checked || control.highlighted) ? 1.5 : 1.0) - opacity: control.pressed ? 1.0 : control.enabled && (control.checked || control.highlighted) ? 0.5 : 0 - visible: control.pressed || (control.enabled && (control.checked || control.highlighted)) + opacity: control.down ? 1.0 : control.enabled && (control.checked || control.highlighted) ? 0.5 : 0 + visible: control.down || (control.enabled && (control.checked || control.highlighted)) } //! [background] } diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-button-pressed.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-button-pressed.qml index b5c918db..9fde2fc4 100644 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-button-pressed.qml +++ b/src/imports/controls/doc/snippets/qtquickcontrols2-button-pressed.qml @@ -31,5 +31,5 @@ import Qt.labs.controls 1.0 Button { width: 80 text: "Pressed" - pressed: true + down: true } diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-tooltip.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-tooltip.qml index 7a061b2d..08ee995d 100644 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-tooltip.qml +++ b/src/imports/controls/doc/snippets/qtquickcontrols2-tooltip.qml @@ -36,7 +36,7 @@ Item { property Button button: children[0] - Binding { target: button; property: "pressed"; value: root.Window.active } + Binding { target: button; property: "down"; value: root.Window.active } Binding { target: button.anchors; property: "bottom"; value: root.bottom } Binding { target: button.anchors; property: "horizontalCenter"; value: root.horizontalCenter } diff --git a/src/imports/controls/material/Button.qml b/src/imports/controls/material/Button.qml index 09dac44c..1e12cb6e 100644 --- a/src/imports/controls/material/Button.qml +++ b/src/imports/controls/material/Button.qml @@ -76,7 +76,7 @@ T.Button { height: parent.height - 12 radius: 2 color: !control.enabled ? (control.highlighted ? control.Material.raisedHighlightedButtonDisabledColor : control.Material.raisedButtonDisabledColor) : - (control.pressed ? (control.highlighted ? control.Material.raisedHighlightedButtonPressColor : control.Material.raisedButtonPressColor) : + (control.down ? (control.highlighted ? control.Material.raisedHighlightedButtonPressColor : control.Material.raisedButtonPressColor) : (control.activeKeyFocus ? (control.highlighted ? control.Material.raisedHighlightedButtonHoverColor : control.Material.raisedButtonHoverColor) : (control.highlighted ? control.Material.raisedHighlightedButtonColor : control.Material.raisedButtonColor))) @@ -98,7 +98,7 @@ T.Button { layer.effect: DropShadow { verticalOffset: 1 color: control.Material.dropShadowColor - samples: control.pressed ? 15 : 9 + samples: control.down ? 15 : 9 spread: 0.5 } } diff --git a/src/imports/controls/material/CheckDelegate.qml b/src/imports/controls/material/CheckDelegate.qml index acea613c..70104962 100644 --- a/src/imports/controls/material/CheckDelegate.qml +++ b/src/imports/controls/material/CheckDelegate.qml @@ -77,8 +77,8 @@ T.CheckDelegate { //! [background] background: Rectangle { - visible: control.pressed || control.highlighted - color: control.pressed ? control.Material.flatButtonPressColor : control.Material.listHighlightColor + visible: control.down || control.highlighted + color: control.down ? control.Material.flatButtonPressColor : control.Material.listHighlightColor } //! [background] } diff --git a/src/imports/controls/material/CheckIndicator.qml b/src/imports/controls/material/CheckIndicator.qml index ba6de6a2..31e1abaf 100644 --- a/src/imports/controls/material/CheckIndicator.qml +++ b/src/imports/controls/material/CheckIndicator.qml @@ -68,7 +68,7 @@ Rectangle { height: width control: control colored: control.checked - opacity: control.pressed ? 1 : 0 + opacity: control.down ? 1 : 0 } // TODO: This needs to be transparent diff --git a/src/imports/controls/material/ComboBox.qml b/src/imports/controls/material/ComboBox.qml index b1c0c332..5a6e0610 100644 --- a/src/imports/controls/material/ComboBox.qml +++ b/src/imports/controls/material/ComboBox.qml @@ -58,7 +58,7 @@ T.ComboBox { width: control.width text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData highlighted: control.highlightedIndex === index - pressed: highlighted && control.pressed + down: highlighted && control.down } //! [delegate] @@ -92,7 +92,7 @@ T.ComboBox { layer.effect: DropShadow { verticalOffset: 1 color: control.Material.dropShadowColor - samples: control.pressed ? 15 : 9 + samples: control.down ? 15 : 9 spread: 0.5 } diff --git a/src/imports/controls/material/ItemDelegate.qml b/src/imports/controls/material/ItemDelegate.qml index 96323716..efba10b0 100644 --- a/src/imports/controls/material/ItemDelegate.qml +++ b/src/imports/controls/material/ItemDelegate.qml @@ -68,8 +68,8 @@ T.ItemDelegate { //! [background] background: Rectangle { - visible: control.pressed || control.highlighted - color: control.pressed ? control.Material.flatButtonPressColor : control.Material.listHighlightColor + visible: control.down || control.highlighted + color: control.down ? control.Material.flatButtonPressColor : control.Material.listHighlightColor } //! [background] } diff --git a/src/imports/controls/material/MenuItem.qml b/src/imports/controls/material/MenuItem.qml index ecc8a388..48eb390b 100644 --- a/src/imports/controls/material/MenuItem.qml +++ b/src/imports/controls/material/MenuItem.qml @@ -79,8 +79,8 @@ T.MenuItem { //! [background] background: Rectangle { implicitWidth: 200 - visible: control.pressed || control.highlighted - color: control.pressed ? control.Material.flatButtonPressColor : control.Material.listHighlightColor + visible: control.down || control.highlighted + color: control.down ? control.Material.flatButtonPressColor : control.Material.listHighlightColor } //! [background] } diff --git a/src/imports/controls/material/RadioDelegate.qml b/src/imports/controls/material/RadioDelegate.qml index 78780e50..5f5f58cf 100644 --- a/src/imports/controls/material/RadioDelegate.qml +++ b/src/imports/controls/material/RadioDelegate.qml @@ -76,8 +76,8 @@ T.RadioDelegate { //! [background] background: Rectangle { - visible: control.pressed || control.highlighted - color: control.pressed ? control.Material.flatButtonPressColor : control.Material.listHighlightColor + visible: control.down || control.highlighted + color: control.down ? control.Material.flatButtonPressColor : control.Material.listHighlightColor } //! [background] } diff --git a/src/imports/controls/material/RadioIndicator.qml b/src/imports/controls/material/RadioIndicator.qml index 5ad92c3d..27ab8d9a 100644 --- a/src/imports/controls/material/RadioIndicator.qml +++ b/src/imports/controls/material/RadioIndicator.qml @@ -43,7 +43,7 @@ Rectangle { implicitHeight: 20 radius: width / 2 border.width: 2 - border.color: control.checked || control.pressed ? control.Material.accentColor : control.Material.secondaryTextColor + border.color: control.checked || control.down ? control.Material.accentColor : control.Material.secondaryTextColor color: "transparent" property alias control: ripple.control @@ -54,7 +54,7 @@ Rectangle { height: width control: control colored: control.checked - opacity: control.pressed || control.activeFocus ? 1 : 0 + opacity: control.down || control.activeFocus ? 1 : 0 } Rectangle { @@ -64,6 +64,6 @@ Rectangle { height: 10 radius: width / 2 color: parent.border.color - visible: control.checked || control.pressed + visible: control.checked || control.down } } diff --git a/src/imports/controls/material/SwipeDelegate.qml b/src/imports/controls/material/SwipeDelegate.qml index cb114bfc..c4bacc10 100644 --- a/src/imports/controls/material/SwipeDelegate.qml +++ b/src/imports/controls/material/SwipeDelegate.qml @@ -66,7 +66,7 @@ T.SwipeDelegate { verticalAlignment: Text.AlignVCenter Behavior on x { - enabled: !control.pressed + enabled: !control.down NumberAnimation { easing.type: Easing.InOutCubic duration: 400 @@ -78,11 +78,11 @@ T.SwipeDelegate { //! [background] background: Rectangle { color: !control.enabled ? control.Material.swipeDelegateDisabledColor : - (control.pressed ? control.Material.swipeDelegatePressColor : + (control.down ? control.Material.swipeDelegatePressColor : (control.activeKeyFocus || control.hovered ? control.Material.swipeDelegateHoverColor : control.Material.swipeDelegateColor)) Behavior on x { - enabled: !control.pressed + enabled: !control.down NumberAnimation { easing.type: Easing.InOutCubic duration: 400 diff --git a/src/imports/controls/material/TabButton.qml b/src/imports/controls/material/TabButton.qml index 63728d2d..70efc0ff 100644 --- a/src/imports/controls/material/TabButton.qml +++ b/src/imports/controls/material/TabButton.qml @@ -54,7 +54,7 @@ T.TabButton { text: control.text font: control.font elide: Text.ElideRight - color: !control.enabled ? control.Material.hintTextColor : control.pressed || control.checked ? control.Material.accentColor : control.Material.primaryTextColor + color: !control.enabled ? control.Material.hintTextColor : control.down || control.checked ? control.Material.accentColor : control.Material.primaryTextColor horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter } diff --git a/src/imports/controls/material/ToolButton.qml b/src/imports/controls/material/ToolButton.qml index 53da9077..e3a1d740 100644 --- a/src/imports/controls/material/ToolButton.qml +++ b/src/imports/controls/material/ToolButton.qml @@ -65,8 +65,8 @@ T.ToolButton { implicitWidth: 48 implicitHeight: 48 - color: control.pressed ? control.Material.flatButtonPressColor : control.Material.flatButtonFocusColor - visible: control.enabled && (control.pressed || control.activeKeyFocus || control.checked || control.highlighted) + color: control.down ? control.Material.flatButtonPressColor : control.Material.flatButtonFocusColor + visible: control.enabled && (control.down || control.activeKeyFocus || control.checked || control.highlighted) } //! [background] } diff --git a/src/imports/controls/universal/Button.qml b/src/imports/controls/universal/Button.qml index cd0d9310..d0dbcf99 100644 --- a/src/imports/controls/universal/Button.qml +++ b/src/imports/controls/universal/Button.qml @@ -71,7 +71,7 @@ T.Button { implicitWidth: 32 implicitHeight: 32 - color: control.pressed ? control.Universal.baseMediumLowColor : + color: control.down ? control.Universal.baseMediumLowColor : control.enabled && (control.highlighted || control.checked) ? control.Universal.accent : control.Universal.baseLowColor } diff --git a/src/imports/controls/universal/CheckDelegate.qml b/src/imports/controls/universal/CheckDelegate.qml index 186f9048..91f57b24 100644 --- a/src/imports/controls/universal/CheckDelegate.qml +++ b/src/imports/controls/universal/CheckDelegate.qml @@ -81,8 +81,8 @@ T.CheckDelegate { //! [background] background: Rectangle { - visible: control.pressed || control.highlighted || control.activeFocus - color: control.pressed ? control.Universal.listMediumColor : control.Universal.altMediumLowColor + visible: control.down || control.highlighted || control.activeFocus + color: control.down ? control.Universal.listMediumColor : control.Universal.altMediumLowColor Rectangle { width: parent.width height: parent.height diff --git a/src/imports/controls/universal/CheckIndicator.qml b/src/imports/controls/universal/CheckIndicator.qml index f0858a21..4795ccce 100644 --- a/src/imports/controls/universal/CheckIndicator.qml +++ b/src/imports/controls/universal/CheckIndicator.qml @@ -43,10 +43,10 @@ Rectangle { implicitHeight: 20 color: !control.enabled ? "transparent" : - control.pressed && control.checkState !== Qt.PartiallyChecked ? control.Universal.baseMediumColor : + control.down && control.checkState !== Qt.PartiallyChecked ? control.Universal.baseMediumColor : control.checkState === Qt.Checked ? control.Universal.accent : "transparent" border.color: !control.enabled ? control.Universal.baseLowColor : - control.pressed ? control.Universal.baseMediumColor : + control.down ? control.Universal.baseMediumColor : control.checked ? control.Universal.accent : control.Universal.baseMediumHighColor border.width: 2 // CheckBoxBorderThemeThickness @@ -68,6 +68,6 @@ Rectangle { visible: control.checkState === Qt.PartiallyChecked color: !control.enabled ? control.Universal.baseLowColor : - control.pressed ? control.Universal.baseMediumColor : control.Universal.baseMediumHighColor + control.down ? control.Universal.baseMediumColor : control.Universal.baseMediumHighColor } } diff --git a/src/imports/controls/universal/ComboBox.qml b/src/imports/controls/universal/ComboBox.qml index 233dc0b0..01ee0883 100644 --- a/src/imports/controls/universal/ComboBox.qml +++ b/src/imports/controls/universal/ComboBox.qml @@ -60,7 +60,7 @@ T.ComboBox { width: control.width text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData highlighted: control.highlightedIndex === index - pressed: highlighted && control.pressed + down: highlighted && control.down } //! [delegate] @@ -83,9 +83,9 @@ T.ComboBox { border.width: 2 // ComboBoxBorderThemeThickness border.color: !control.enabled ? control.Universal.baseLowColor : - control.pressed || popup.visible ? control.Universal.baseMediumLowColor : control.Universal.baseMediumLowColor + control.down || popup.visible ? control.Universal.baseMediumLowColor : control.Universal.baseMediumLowColor color: !control.enabled ? control.Universal.baseLowColor : - control.pressed || popup.visible ? control.Universal.listMediumColor : control.Universal.altMediumLowColor + control.down || popup.visible ? control.Universal.listMediumColor : control.Universal.altMediumLowColor Rectangle { x: 2 diff --git a/src/imports/controls/universal/Dial.qml b/src/imports/controls/universal/Dial.qml index cfb325b3..a55bc19f 100644 --- a/src/imports/controls/universal/Dial.qml +++ b/src/imports/controls/universal/Dial.qml @@ -67,7 +67,7 @@ T.Dial { radius: width / 2 color: !control.enabled ? control.Universal.baseLowColor : - control.pressed ? control.Universal.baseMediumColor : control.Universal.baseMediumHighColor + control.down ? control.Universal.baseMediumColor : control.Universal.baseMediumHighColor transform: [ Translate { diff --git a/src/imports/controls/universal/ItemDelegate.qml b/src/imports/controls/universal/ItemDelegate.qml index e01f0368..7066bb3e 100644 --- a/src/imports/controls/universal/ItemDelegate.qml +++ b/src/imports/controls/universal/ItemDelegate.qml @@ -73,8 +73,8 @@ T.ItemDelegate { //! [background] background: Rectangle { - visible: control.pressed || control.highlighted || control.activeKeyFocus - color: control.pressed ? control.Universal.listMediumColor : control.Universal.altMediumLowColor + visible: control.down || control.highlighted || control.activeKeyFocus + color: control.down ? control.Universal.listMediumColor : control.Universal.altMediumLowColor Rectangle { width: parent.width height: parent.height diff --git a/src/imports/controls/universal/MenuItem.qml b/src/imports/controls/universal/MenuItem.qml index dbc41eec..aef20ff9 100644 --- a/src/imports/controls/universal/MenuItem.qml +++ b/src/imports/controls/universal/MenuItem.qml @@ -75,7 +75,7 @@ T.MenuItem { y: control.topPadding + (control.availableHeight - height) / 2 visible: control.checked - source: !control.checkable ? "" : "image://universal/checkmark/" + (!control.enabled ? control.Universal.baseLowColor : control.pressed ? control.Universal.baseHighColor : control.Universal.baseMediumHighColor) + source: !control.checkable ? "" : "image://universal/checkmark/" + (!control.enabled ? control.Universal.baseLowColor : control.down ? control.Universal.baseHighColor : control.Universal.baseMediumHighColor) } //! [indicator] @@ -85,7 +85,7 @@ T.MenuItem { implicitHeight: 40 color: !control.enabled ? control.Universal.baseLowColor : - control.pressed ? control.Universal.listMediumColor : control.Universal.altMediumLowColor + control.down ? control.Universal.listMediumColor : control.Universal.altMediumLowColor Rectangle { x: 1; y: 1 diff --git a/src/imports/controls/universal/RadioDelegate.qml b/src/imports/controls/universal/RadioDelegate.qml index 623e7e13..3ea37555 100644 --- a/src/imports/controls/universal/RadioDelegate.qml +++ b/src/imports/controls/universal/RadioDelegate.qml @@ -83,8 +83,8 @@ T.RadioDelegate { //! [background] background: Rectangle { - visible: control.pressed || control.highlighted || control.activeFocus - color: control.pressed ? control.Universal.listMediumColor : control.Universal.altMediumLowColor + visible: control.down || control.highlighted || control.activeFocus + color: control.down ? control.Universal.listMediumColor : control.Universal.altMediumLowColor Rectangle { width: parent.width height: parent.height diff --git a/src/imports/controls/universal/RadioIndicator.qml b/src/imports/controls/universal/RadioIndicator.qml index d107da96..3fd74cbf 100644 --- a/src/imports/controls/universal/RadioIndicator.qml +++ b/src/imports/controls/universal/RadioIndicator.qml @@ -45,7 +45,7 @@ Rectangle { border.width: 2 // RadioButtonBorderThemeThickness border.color: control.checked ? "transparent" : !control.enabled ? control.Universal.baseLowColor : - control.pressed ? control.Universal.baseMediumColor : control.Universal.baseMediumHighColor + control.down ? control.Universal.baseMediumColor : control.Universal.baseMediumHighColor property var control @@ -59,7 +59,7 @@ Rectangle { color: "transparent" border.width: 2 // RadioButtonBorderThemeThickness border.color: !control.enabled ? control.Universal.baseLowColor : - control.pressed ? control.Universal.baseMediumColor : control.Universal.accent + control.down ? control.Universal.baseMediumColor : control.Universal.accent } Rectangle { @@ -72,6 +72,6 @@ Rectangle { radius: width / 2 opacity: control.checked ? 1 : 0 color: !control.enabled ? control.Universal.baseLowColor : - control.pressed ? control.Universal.baseMediumColor : control.Universal.baseMediumHighColor + control.down ? control.Universal.baseMediumColor : control.Universal.baseMediumHighColor } } diff --git a/src/imports/controls/universal/SwipeDelegate.qml b/src/imports/controls/universal/SwipeDelegate.qml index 1bcfe083..eace3045 100644 --- a/src/imports/controls/universal/SwipeDelegate.qml +++ b/src/imports/controls/universal/SwipeDelegate.qml @@ -71,7 +71,7 @@ T.SwipeDelegate { color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor Behavior on x { - enabled: !control.pressed + enabled: !control.down NumberAnimation { easing.type: Easing.InOutCubic duration: 400 @@ -83,7 +83,7 @@ T.SwipeDelegate { //! [background] background: Rectangle { color: !control.enabled ? control.Universal.chromeDisabledHighColor : - (control.pressed ? control.Universal.chromeHighColor : + (control.down ? control.Universal.chromeHighColor : (control.activeKeyFocus || control.hovered ? control.Universal.chromeLowColor : control.Universal.chromeMediumColor)) Rectangle { @@ -95,7 +95,7 @@ T.SwipeDelegate { } Behavior on x { - enabled: !control.pressed + enabled: !control.down NumberAnimation { easing.type: Easing.InOutCubic duration: 400 diff --git a/src/imports/controls/universal/TabButton.qml b/src/imports/controls/universal/TabButton.qml index 16ee8fec..149de82c 100644 --- a/src/imports/controls/universal/TabButton.qml +++ b/src/imports/controls/universal/TabButton.qml @@ -54,7 +54,7 @@ T.TabButton { text: control.text font: control.font elide: Text.ElideRight - color: control.checked || control.pressed ? control.Universal.baseHighColor : control.Universal.baseLowColor + color: control.checked || control.down ? control.Universal.baseHighColor : control.Universal.baseLowColor horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter } diff --git a/src/imports/controls/universal/ToolButton.qml b/src/imports/controls/universal/ToolButton.qml index 06eecf17..14d2d923 100644 --- a/src/imports/controls/universal/ToolButton.qml +++ b/src/imports/controls/universal/ToolButton.qml @@ -67,7 +67,7 @@ T.ToolButton { implicitWidth: 68 implicitHeight: 48 // AppBarThemeCompactHeight - color: control.pressed ? control.Universal.listMediumColor : + color: control.down ? control.Universal.listMediumColor : control.enabled && (control.highlighted || control.checked) ? control.Universal.accent : "transparent" } //! [background] diff --git a/src/quicktemplates2/qquickabstractbutton.cpp b/src/quicktemplates2/qquickabstractbutton.cpp index fdcc6fc0..ec6b3d63 100644 --- a/src/quicktemplates2/qquickabstractbutton.cpp +++ b/src/quicktemplates2/qquickabstractbutton.cpp @@ -106,7 +106,8 @@ static const int AUTO_REPEAT_INTERVAL = 100; */ QQuickAbstractButtonPrivate::QQuickAbstractButtonPrivate() : - pressed(false), checked(false), checkable(false), highlighted(false), autoExclusive(false), autoRepeat(false), wasHeld(false), + down(false), explicitDown(false), pressed(false), checked(false), checkable(false), + highlighted(false), autoExclusive(false), autoRepeat(false), wasHeld(false), holdTimer(0), delayTimer(0), repeatTimer(0), repeatButton(Qt::NoButton), indicator(nullptr), group(nullptr) { } @@ -256,9 +257,51 @@ void QQuickAbstractButton::setText(const QString &text) } /*! + \qmlproperty bool Qt.labs.controls::AbstractButton::down + + This property holds whether the button is visually down. + + Unless explicitly set, this property follows the value of \l pressed. To + return to the default value, set this property to \c undefined. + + \sa pressed +*/ +bool QQuickAbstractButton::isDown() const +{ + Q_D(const QQuickAbstractButton); + return d->down; +} + +void QQuickAbstractButton::setDown(bool down) +{ + Q_D(QQuickAbstractButton); + d->explicitDown = true; + + if (d->down == down) + return; + + d->down = down; + emit downChanged(); +} + +void QQuickAbstractButton::resetDown() +{ + Q_D(QQuickAbstractButton); + if (!d->explicitDown) + return; + + setDown(d->pressed); + d->explicitDown = false; +} + +/*! \qmlproperty bool Qt.labs.controls::AbstractButton::pressed + \readonly - This property holds whether the button is pressed. + This property holds whether the button is physically pressed. A button can + be pressed by either touch or key events. + + \sa down */ bool QQuickAbstractButton::isPressed() const { @@ -275,6 +318,11 @@ void QQuickAbstractButton::setPressed(bool isPressed) d->pressed = isPressed; setAccessibleProperty("pressed", isPressed); emit pressedChanged(); + + if (!d->explicitDown) { + setDown(d->pressed); + d->explicitDown = false; + } } /*! diff --git a/src/quicktemplates2/qquickabstractbutton_p.h b/src/quicktemplates2/qquickabstractbutton_p.h index 49de79da..c8e6931f 100644 --- a/src/quicktemplates2/qquickabstractbutton_p.h +++ b/src/quicktemplates2/qquickabstractbutton_p.h @@ -58,7 +58,8 @@ class Q_QUICKTEMPLATES2_EXPORT QQuickAbstractButton : public QQuickControl { Q_OBJECT Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged FINAL) - Q_PROPERTY(bool pressed READ isPressed WRITE setPressed NOTIFY pressedChanged FINAL) + Q_PROPERTY(bool down READ isDown WRITE setDown NOTIFY downChanged RESET resetDown FINAL) + Q_PROPERTY(bool pressed READ isPressed NOTIFY pressedChanged FINAL) Q_PROPERTY(bool checked READ isChecked WRITE setChecked NOTIFY checkedChanged FINAL) Q_PROPERTY(bool highlighted READ isHighlighted WRITE setHighlighted NOTIFY highlightedChanged FINAL) Q_PROPERTY(bool autoExclusive READ autoExclusive WRITE setAutoExclusive NOTIFY autoExclusiveChanged FINAL) @@ -72,6 +73,10 @@ public: QString text() const; void setText(const QString &text); + bool isDown() const; + void setDown(bool down); + void resetDown(); + bool isPressed() const; void setPressed(bool pressed); @@ -104,6 +109,7 @@ Q_SIGNALS: void pressAndHold(); void doubleClicked(); void textChanged(); + void downChanged(); void pressedChanged(); void checkedChanged(); void highlightedChanged(); diff --git a/src/quicktemplates2/qquickabstractbutton_p_p.h b/src/quicktemplates2/qquickabstractbutton_p_p.h index 23e0b52c..7aa2c028 100644 --- a/src/quicktemplates2/qquickabstractbutton_p_p.h +++ b/src/quicktemplates2/qquickabstractbutton_p_p.h @@ -79,6 +79,8 @@ public: QList<QQuickAbstractButton *> findExclusiveButtons() const; QString text; + bool down; + bool explicitDown; bool pressed; bool checked; bool checkable; diff --git a/src/quicktemplates2/qquickcombobox.cpp b/src/quicktemplates2/qquickcombobox.cpp index e10a8b48..ec75c053 100644 --- a/src/quicktemplates2/qquickcombobox.cpp +++ b/src/quicktemplates2/qquickcombobox.cpp @@ -112,6 +112,7 @@ QT_BEGIN_NAMESPACE */ /*! + \readonly \qmlsignal void Qt.labs.controls::ComboBox::highlighted(int index) This signal is emitted when the item at \a index in the popup list is highlighted by the user. @@ -450,7 +451,6 @@ void QQuickComboBox::setPressed(bool pressed) } /*! - \readonly \qmlproperty int Qt.labs.controls::ComboBox::highlightedIndex This property holds the index of the highlighted item in the combo box popup list. diff --git a/tests/auto/controls/data/tst_button.qml b/tests/auto/controls/data/tst_button.qml index 06038994..4831bdd6 100644 --- a/tests/auto/controls/data/tst_button.qml +++ b/tests/auto/controls/data/tst_button.qml @@ -57,7 +57,7 @@ TestCase { property SignalSequenceSpy spy: SignalSequenceSpy { target: control - signals: ["pressed", "released", "canceled", "clicked", "doubleClicked", "pressedChanged", "checkedChanged"] + signals: ["pressed", "released", "canceled", "clicked", "doubleClicked", "pressedChanged", "downChanged", "checkedChanged"] } } } @@ -80,12 +80,15 @@ TestCase { verify(control) // click - control.spy.expectedSequence = [["pressedChanged", { "pressed": true }], "pressed"] + control.spy.expectedSequence = [["pressedChanged", { "pressed": true }], + ["downChanged", { "down": true }], + "pressed"] mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton) compare(control.pressed, true) verify(control.spy.success) control.spy.expectedSequence = [["pressedChanged", { "pressed": false }], + ["downChanged", { "down": false }], "released", "clicked"] mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftButton) @@ -93,12 +96,15 @@ TestCase { verify(control.spy.success) // release outside - control.spy.expectedSequence = [["pressedChanged", { "pressed": true }], "pressed"] + control.spy.expectedSequence = [["pressedChanged", { "pressed": true }], + ["downChanged", { "down": true }], + "pressed"] mousePress(control, control.width / 2, control.height / 2, Qt.LeftButton) compare(control.pressed, true) verify(control.spy.success) - control.spy.expectedSequence = [["pressedChanged", { "pressed": false }]] + control.spy.expectedSequence = [["pressedChanged", { "pressed": false }], + ["downChanged", { "down": false }]] mouseMove(control, control.width * 2, control.height * 2, 0, Qt.LeftButton) compare(control.pressed, false) verify(control.spy.success) @@ -119,14 +125,18 @@ TestCase { // double click control.spy.expectedSequence = [["pressedChanged", { "pressed": true }], + ["downChanged", { "down": true }], "pressed", ["pressedChanged", { "pressed": false }], + ["downChanged", { "down": false }], "released", "clicked", ["pressedChanged", { "pressed": true }], + ["downChanged", { "down": true }], "pressed", "doubleClicked", ["pressedChanged", { "pressed": false }], + ["downChanged", { "down": false }], "released", "clicked"] mouseDoubleClickSequence(control, control.width / 2, control.height / 2, Qt.LeftButton) @@ -144,8 +154,10 @@ TestCase { // click control.spy.expectedSequence = [["pressedChanged", { "pressed": true }], + ["downChanged", { "down": true }], "pressed", ["pressedChanged", { "pressed": false }], + ["downChanged", { "down": false }], "released", "clicked"] keyClick(Qt.Key_Space) @@ -185,6 +197,7 @@ TestCase { var repeatCount = 2 var repeatSequence = [["pressedChanged", { "pressed": true }], + ["downChanged", { "down": true }], "pressed", "released", "clicked", @@ -201,6 +214,7 @@ TestCase { verify(control.spy.success) control.spy.expectedSequence = [["pressedChanged", { "pressed": false }], + ["downChanged", { "down": false }], "released", "clicked"] mouseRelease(control) @@ -216,6 +230,7 @@ TestCase { verify(control.spy.success) control.spy.expectedSequence = [["pressedChanged", { "pressed": false }], + ["downChanged", { "down": false }], "released", "clicked"] keyRelease(Qt.Key_Space) diff --git a/tests/auto/controls/data/tst_combobox.qml b/tests/auto/controls/data/tst_combobox.qml index 24df675e..6af82dc5 100644 --- a/tests/auto/controls/data/tst_combobox.qml +++ b/tests/auto/controls/data/tst_combobox.qml @@ -644,7 +644,7 @@ TestCase { autoExclusive: true checked: _combobox.currentIndex === index highlighted: _combobox.highlightedIndex === index - pressed: highlighted && _combobox.pressed + down: highlighted && _combobox.pressed } } } diff --git a/tests/auto/controls/data/tst_toolbutton.qml b/tests/auto/controls/data/tst_toolbutton.qml index 6c03f18c..ddabb0fc 100644 --- a/tests/auto/controls/data/tst_toolbutton.qml +++ b/tests/auto/controls/data/tst_toolbutton.qml @@ -56,6 +56,11 @@ TestCase { } SignalSpy { + id: downSpy + signalName: "downChanged" + } + + SignalSpy { id: clickedSpy signalName: "clicked" } @@ -97,47 +102,66 @@ TestCase { verify(control) pressedSpy.target = control + downSpy.target = control clickedSpy.target = control verify(pressedSpy.valid) + verify(downSpy.valid) verify(clickedSpy.valid) // check mousePress(control, control.width / 2, control.height / 2, Qt.LeftToolButton) compare(pressedSpy.count, 1) + compare(downSpy.count, 1) compare(control.pressed, true) + compare(control.down, true) mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftToolButton) compare(clickedSpy.count, 1) compare(pressedSpy.count, 2) + compare(downSpy.count, 2) compare(control.pressed, false) + compare(control.down, false) // uncheck mousePress(control, control.width / 2, control.height / 2, Qt.LeftToolButton) compare(pressedSpy.count, 3) + compare(downSpy.count, 3) compare(control.pressed, true) + compare(control.down, true) mouseRelease(control, control.width / 2, control.height / 2, Qt.LeftToolButton) compare(clickedSpy.count, 2) compare(pressedSpy.count, 4) + compare(downSpy.count, 4) compare(control.pressed, false) + compare(control.down, false) // release outside mousePress(control, control.width / 2, control.height / 2, Qt.LeftToolButton) compare(pressedSpy.count, 5) + compare(downSpy.count, 5) compare(control.pressed, true) + compare(control.down, true) mouseMove(control, control.width * 2, control.height * 2, 0, Qt.LeftToolButton) compare(control.pressed, false) + compare(control.down, false) mouseRelease(control, control.width * 2, control.height * 2, Qt.LeftToolButton) compare(clickedSpy.count, 2) compare(pressedSpy.count, 6) + compare(downSpy.count, 6) compare(control.pressed, false) + compare(control.down, false) // right button mousePress(control, control.width / 2, control.height / 2, Qt.RightButton) compare(pressedSpy.count, 6) + compare(downSpy.count, 6) compare(control.pressed, false) + compare(control.down, false) mouseRelease(control, control.width / 2, control.height / 2, Qt.RightButton) compare(clickedSpy.count, 2) compare(pressedSpy.count, 6) + compare(downSpy.count, 6) compare(control.pressed, false) + compare(control.down, false) control.destroy() } diff --git a/tests/manual/testbench/main.qml b/tests/manual/testbench/main.qml index 76d945ba..8d0fe7a7 100644 --- a/tests/manual/testbench/main.qml +++ b/tests/manual/testbench/main.qml @@ -96,7 +96,7 @@ ApplicationWindow { } ToolButton { text: "Pressed" - pressed: true + down: true hoverEnabled: true ToolTip.text: text ToolTip.delay: 1000 @@ -141,7 +141,7 @@ ApplicationWindow { } TabButton { text: "Pressed" - pressed: true + down: true } TabButton { text: "Disabled" @@ -169,7 +169,7 @@ ApplicationWindow { } Button { text: "Pressed" - pressed: true + down: true } Button { text: "Checked" @@ -178,7 +178,7 @@ ApplicationWindow { Button { text: "CH + PR" checked: true - pressed: true + down: true } Button { text: "Disabled" @@ -201,7 +201,7 @@ ApplicationWindow { Button { text: "HI + PR" highlighted: true - pressed: true + down: true } Button { text: "HI + CH" @@ -211,7 +211,7 @@ ApplicationWindow { Button { text: "HI+CH+PR" highlighted: true - pressed: true + down: true checked: true } Button { @@ -233,7 +233,7 @@ ApplicationWindow { } CheckBox { text: "Pressed" - pressed: true + down: true } CheckBox { text: "Checked" @@ -242,7 +242,7 @@ ApplicationWindow { CheckBox { text: "CH + PR" checked: true - pressed: true + down: true } CheckBox { text: "Disabled" @@ -261,7 +261,7 @@ ApplicationWindow { } RadioButton { text: "Pressed" - pressed: true + down: true } RadioButton { text: "Checked" @@ -270,7 +270,7 @@ ApplicationWindow { RadioButton { text: "CH + PR" checked: true - pressed: true + down: true } RadioButton { text: "Disabled" @@ -289,7 +289,7 @@ ApplicationWindow { } Switch { text: "Pressed" - pressed: true + down: true } Switch { text: "Checked" @@ -298,7 +298,7 @@ ApplicationWindow { Switch { text: "CH + PR" checked: true - pressed: true + down: true } Switch { text: "Disabled" @@ -452,7 +452,7 @@ ApplicationWindow { implicitHeight: normalComboBox.implicitHeight ComboBox { - pressed: true + down: true model: ListModel { ListElement { text: "Pressed" } } |