3#include "qml_material/input/nested_scroll_connection.hpp"
4#include <QQmlParserStatus>
5#include <QVariantAnimation>
10class QML_MATERIAL_API AppBarScroll :
public NestedScrollConnection,
public QQmlParserStatus {
13 Q_INTERFACES(QQmlParserStatus)
14 Q_PROPERTY(Mode mode READ mode WRITE setMode NOTIFY modeChanged FINAL)
15 Q_PROPERTY(qreal collapseDistance READ collapseDistance WRITE setCollapseDistance NOTIFY
16 collapseDistanceChanged FINAL)
18 qreal heightOffset READ heightOffset WRITE setHeightOffset NOTIFY heightOffsetChanged FINAL)
19 Q_PROPERTY(qreal collapsedFraction READ collapsedFraction NOTIFY heightOffsetChanged FINAL)
20 Q_PROPERTY(
bool overlapped READ overlapped NOTIFY overlappedChanged FINAL)
21 Q_PROPERTY(qreal contentOffset READ contentOffset WRITE setContentOffset NOTIFY
22 contentOffsetChanged FINAL)
24 qreal overlappedFraction READ overlappedFraction NOTIFY overlappedFractionChanged FINAL)
25 Q_PROPERTY(
bool contentAtStart READ contentAtStart WRITE setContentAtStart NOTIFY
26 contentAtStartChanged FINAL)
27 Q_PROPERTY(
bool active READ active NOTIFY activeChanged FINAL)
28 Q_PROPERTY(
bool settling READ settling NOTIFY settlingChanged FINAL)
29 Q_PROPERTY(
bool animationsEnabled READ animationsEnabled WRITE setAnimationsEnabled NOTIFY
30 animationsEnabledChanged FINAL)
31 Q_PROPERTY(
bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged FINAL)
32 Q_PROPERTY(
bool reverseLayout READ reverseLayout WRITE setReverseLayout NOTIFY
33 reverseLayoutChanged FINAL)
42 explicit AppBarScroll(QObject* parent =
nullptr);
43 void classBegin()
override;
44 void componentComplete()
override;
45 Mode mode()
const {
return m_mode; }
46 qreal collapseDistance()
const {
return m_distance; }
47 qreal heightOffset()
const {
return m_offset; }
48 qreal collapsedFraction()
const {
return m_distance > 0 ? -m_offset / m_distance : 0; }
49 bool overlapped()
const {
return m_enabled && (! m_contentAtStart || m_offset < 0); }
50 qreal contentOffset()
const {
return m_contentOffset; }
51 qreal overlappedFraction()
const;
52 bool contentAtStart()
const {
return m_contentAtStart; }
53 bool active()
const {
return m_active; }
54 bool settling()
const {
return m_snap->state() == QAbstractAnimation::Running; }
55 bool animationsEnabled()
const {
return m_animationsEnabled; }
56 bool enabled()
const {
return m_enabled; }
57 bool reverseLayout()
const {
return m_reverseLayout; }
59 void setCollapseDistance(qreal);
60 void setHeightOffset(qreal);
61 void setContentAtStart(
bool);
62 void setContentOffset(qreal);
63 void setAnimationsEnabled(
bool);
64 void setEnabled(
bool);
65 void setReverseLayout(
bool);
66 QPointF preScroll(QPointF, Source)
override;
67 QPointF postScroll(QPointF, QPointF, Source)
override;
68 bool canConsume(QPointF, Source)
const override;
69 void begin(Source)
override;
70 void end(
bool cancelled)
override;
71 Q_INVOKABLE
void reset();
72 Q_SIGNAL
void modeChanged();
73 Q_SIGNAL
void collapseDistanceChanged();
74 Q_SIGNAL
void heightOffsetChanged();
75 Q_SIGNAL
void contentAtStartChanged();
76 Q_SIGNAL
void overlappedChanged();
77 Q_SIGNAL
void activeChanged();
78 Q_SIGNAL
void settlingChanged();
79 Q_SIGNAL
void animationsEnabledChanged();
80 Q_SIGNAL
void contentOffsetChanged();
81 Q_SIGNAL
void overlappedFractionChanged();
82 Q_SIGNAL
void enabledChanged();
83 Q_SIGNAL
void reverseLayoutChanged();
84 Q_SIGNAL
void inputStarted();
87 QPointF consume(QPointF);
88 void update(qreal,
bool);
89 Mode m_mode = ExitUntilCollapsed;
92 qreal m_contentOffset = 0;
93 bool m_contentAtStart =
true;
94 bool m_active =
false;
95 bool m_enabled =
true;
96 bool m_reverseLayout =
false;
97 bool m_animationsEnabled =
true;
98 bool m_initializing =
false;
99 quint64 m_revision = 0;
100 QVariantAnimation* m_snap;
101 std::optional<qreal> m_initialOffset;