QmlMaterial 0.1.0
Loading...
Searching...
No Matches
swipe_to_dismiss_state.hpp
1#pragma once
2
3#include <QObject>
4#include <qqmlregistration.h>
5#include "qml_material/export.hpp"
6
7namespace qml_material
8{
9// Logical anchors and targets; the presenter owns animation and acknowledges its revision.
10class QML_MATERIAL_API SwipeToDismissState : public QObject {
11 Q_OBJECT
12 QML_ELEMENT
13 Q_PROPERTY(qreal distance READ distance WRITE setDistance NOTIFY configurationChanged FINAL)
14 Q_PROPERTY(bool startToEndEnabled READ startToEndEnabled WRITE setStartToEndEnabled NOTIFY
15 configurationChanged FINAL)
16 Q_PROPERTY(bool endToStartEnabled READ endToStartEnabled WRITE setEndToStartEnabled NOTIFY
17 configurationChanged FINAL)
18 Q_PROPERTY(qreal positionalThreshold READ positionalThreshold WRITE setPositionalThreshold
19 NOTIFY configurationChanged FINAL)
20 Q_PROPERTY(qreal velocityThreshold READ velocityThreshold WRITE setVelocityThreshold NOTIFY
21 configurationChanged FINAL)
22 Q_PROPERTY(qreal offset READ offset NOTIFY motionChanged FINAL)
23 Q_PROPERTY(qreal progress READ progress NOTIFY motionChanged FINAL)
24 Q_PROPERTY(Value targetValue READ targetValue NOTIFY motionChanged FINAL)
25 Q_PROPERTY(Value settledValue READ settledValue NOTIFY motionChanged FINAL)
26 Q_PROPERTY(Value dismissDirection READ dismissDirection NOTIFY motionChanged FINAL)
27 Q_PROPERTY(bool dragging READ dragging NOTIFY motionChanged FINAL)
28 Q_PROPERTY(bool settling READ settling NOTIFY motionChanged FINAL)
29public:
30 enum Value
31 {
32 Settled,
33 StartToEnd,
34 EndToStart
35 };
36 Q_ENUM(Value)
37 explicit SwipeToDismissState(QObject* parent = nullptr);
38 qreal distance() const { return m_distance; }
39 bool startToEndEnabled() const { return m_startToEnd; }
40 bool endToStartEnabled() const { return m_endToStart; }
41 qreal positionalThreshold() const { return m_positionalThreshold; }
42 qreal velocityThreshold() const { return m_velocityThreshold; }
43 qreal offset() const { return m_offset; }
44 qreal progress() const;
45 Value targetValue() const { return m_target; }
46 Value settledValue() const { return m_settled; }
47 Value dismissDirection() const;
48 bool dragging() const { return m_dragging; }
49 bool settling() const { return m_settling; }
50 void setDistance(qreal);
51 void setStartToEndEnabled(bool);
52 void setEndToStartEnabled(bool);
53 void setPositionalThreshold(qreal);
54 void setVelocityThreshold(qreal);
55 Q_INVOKABLE void dismiss(Value);
56 Q_INVOKABLE void reset();
57 Q_INVOKABLE void snapTo(Value);
58 Q_INVOKABLE bool begin(qreal presentedOffset);
59 Q_INVOKABLE void dragBy(qreal delta);
60 Q_INVOKABLE void release(qreal velocity);
61 Q_INVOKABLE void cancel();
62 Q_INVOKABLE void complete(quint32 revision);
63 Q_SIGNAL void configurationChanged();
64 Q_SIGNAL void motionChanged();
65 Q_SIGNAL void transitionRequested(quint32 revision, qreal offset, bool animate);
66 Q_SIGNAL void dismissed(Value direction);
67
68private:
69 bool allowed(Value) const;
70 qreal position(Value) const;
71 qreal bounded(qreal) const;
72 Value releaseTarget(qreal velocity) const;
73 void request(Value, bool animate);
74 void anchorsChanged();
75 qreal m_distance = 0;
76 qreal m_positionalThreshold = 56;
77 qreal m_velocityThreshold = 125;
78 qreal m_offset = 0;
79 Value m_target = Settled;
80 Value m_settled = Settled;
81 bool m_startToEnd = true;
82 bool m_endToStart = true;
83 bool m_dragging = false;
84 bool m_settling = false;
85 quint32 m_revision = 0;
86};
87} // namespace qml_material