From 95f05dffe2c6a88acd7501341c6b909f5d6a54c2 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Mon, 11 Jul 2016 14:47:28 +0200 Subject: Material: trigger ripple effects on release for some controls Android 5 used to trigger ripple effects on press, but Android 6 made ripple effects a bit more subtle. For check boxes, radio buttons, and switches it still triggers on press, but these controls where the wave is larger, it's triggered on release instead. Change-Id: Ib4d301d5ccf72d5db106bcc6ad6afee30cef0b1e Reviewed-by: Mitch Curtis --- src/imports/controls/material/Button.qml | 1 + src/imports/controls/material/CheckDelegate.qml | 1 + src/imports/controls/material/ItemDelegate.qml | 1 + src/imports/controls/material/MenuItem.qml | 1 + src/imports/controls/material/RadioDelegate.qml | 1 + src/imports/controls/material/SwitchDelegate.qml | 1 + .../controls/material/qquickmaterialripple.cpp | 27 ++++++++++++++++++---- .../controls/material/qquickmaterialripple_p.h | 8 +++++++ 8 files changed, 36 insertions(+), 5 deletions(-) (limited to 'src/imports') diff --git a/src/imports/controls/material/Button.qml b/src/imports/controls/material/Button.qml index ae98853a..dd4d614e 100644 --- a/src/imports/controls/material/Button.qml +++ b/src/imports/controls/material/Button.qml @@ -107,6 +107,7 @@ T.Button { clipRadius: 2 width: parent.width height: parent.height + trigger: Ripple.Release pressed: control.pressed anchor: control active: control.down || control.visualFocus || control.hovered diff --git a/src/imports/controls/material/CheckDelegate.qml b/src/imports/controls/material/CheckDelegate.qml index 0092f174..099c851b 100644 --- a/src/imports/controls/material/CheckDelegate.qml +++ b/src/imports/controls/material/CheckDelegate.qml @@ -83,6 +83,7 @@ T.CheckDelegate { height: parent.height clip: visible + trigger: Ripple.Release pressed: control.pressed anchor: control active: control.down || control.visualFocus || control.hovered diff --git a/src/imports/controls/material/ItemDelegate.qml b/src/imports/controls/material/ItemDelegate.qml index a493ecbd..79aa60ea 100644 --- a/src/imports/controls/material/ItemDelegate.qml +++ b/src/imports/controls/material/ItemDelegate.qml @@ -75,6 +75,7 @@ T.ItemDelegate { height: parent.height clip: visible + trigger: Ripple.Release pressed: control.pressed anchor: control active: control.down || control.visualFocus || control.hovered diff --git a/src/imports/controls/material/MenuItem.qml b/src/imports/controls/material/MenuItem.qml index 4f221f2c..63379e84 100644 --- a/src/imports/controls/material/MenuItem.qml +++ b/src/imports/controls/material/MenuItem.qml @@ -84,6 +84,7 @@ T.MenuItem { height: parent.height clip: visible + trigger: Ripple.Release pressed: control.pressed anchor: control active: control.down || control.visualFocus || control.hovered diff --git a/src/imports/controls/material/RadioDelegate.qml b/src/imports/controls/material/RadioDelegate.qml index 918f9a37..5c943a7f 100644 --- a/src/imports/controls/material/RadioDelegate.qml +++ b/src/imports/controls/material/RadioDelegate.qml @@ -83,6 +83,7 @@ T.RadioDelegate { height: parent.height clip: visible + trigger: Ripple.Release pressed: control.pressed anchor: control active: control.down || control.visualFocus || control.hovered diff --git a/src/imports/controls/material/SwitchDelegate.qml b/src/imports/controls/material/SwitchDelegate.qml index 7b81524c..31cd4660 100644 --- a/src/imports/controls/material/SwitchDelegate.qml +++ b/src/imports/controls/material/SwitchDelegate.qml @@ -83,6 +83,7 @@ T.SwitchDelegate { height: parent.height clip: visible + trigger: Ripple.Release pressed: control.pressed anchor: control active: control.down || control.visualFocus || control.hovered diff --git a/src/imports/controls/material/qquickmaterialripple.cpp b/src/imports/controls/material/qquickmaterialripple.cpp index efe022f4..2cb80f1b 100644 --- a/src/imports/controls/material/qquickmaterialripple.cpp +++ b/src/imports/controls/material/qquickmaterialripple.cpp @@ -202,7 +202,7 @@ QQuickAnimatorJob *QQuickMaterialRippleAnimator::createJob() const } QQuickMaterialRipple::QQuickMaterialRipple(QQuickItem *parent) - : QQuickItem(parent), m_active(false), m_pressed(false), m_enterDelay(0), m_clipRadius(0.0), m_anchor(nullptr), m_opacityAnimator(nullptr) + : QQuickItem(parent), m_active(false), m_pressed(false), m_enterDelay(0), m_trigger(Press), m_clipRadius(0.0), m_anchor(nullptr), m_opacityAnimator(nullptr) { setOpacity(0.0); setFlag(ItemHasContents); @@ -275,10 +275,27 @@ void QQuickMaterialRipple::setPressed(bool pressed) m_pressed = pressed; - if (pressed) - prepareWave(); - else - exitWave(); + if (pressed) { + if (m_trigger == Press) + prepareWave(); + else + exitWave(); + } else { + if (m_trigger == Release) + enterWave(); + else + exitWave(); + } +} + +QQuickMaterialRipple::Trigger QQuickMaterialRipple::trigger() const +{ + return m_trigger; +} + +void QQuickMaterialRipple::setTrigger(Trigger trigger) +{ + m_trigger = trigger; } QPointF QQuickMaterialRipple::anchorPoint() const diff --git a/src/imports/controls/material/qquickmaterialripple_p.h b/src/imports/controls/material/qquickmaterialripple_p.h index 80a562cf..a1cfed94 100644 --- a/src/imports/controls/material/qquickmaterialripple_p.h +++ b/src/imports/controls/material/qquickmaterialripple_p.h @@ -63,6 +63,7 @@ class QQuickMaterialRipple : public QQuickItem Q_PROPERTY(bool pressed READ isPressed WRITE setPressed FINAL) Q_PROPERTY(bool active READ isActive WRITE setActive FINAL) Q_PROPERTY(QQuickItem *anchor READ anchor WRITE setAnchor FINAL) + Q_PROPERTY(Trigger trigger READ trigger WRITE setTrigger FINAL) public: QQuickMaterialRipple(QQuickItem *parent = nullptr); @@ -79,6 +80,12 @@ public: bool isPressed() const; void setPressed(bool pressed); + enum Trigger { Press, Release }; + Q_ENUM (Trigger) + + Trigger trigger() const; + void setTrigger(Trigger trigger); + QPointF anchorPoint() const; QQuickItem *anchor() const; @@ -97,6 +104,7 @@ private: bool m_active; bool m_pressed; int m_enterDelay; + Trigger m_trigger; qreal m_clipRadius; QColor m_color; QQuickItem *m_anchor; -- cgit v1.2.3