QmlMaterial 0.1.0
Loading...
Searching...
No Matches
nested_scroll_connection.hpp
1#pragma once
2
3#include <QObject>
4#include <QPointF>
5#include <QPointer>
6#include <qqmlregistration.h>
7#include "qml_material/export.hpp"
8
9namespace qml_material
10{
11class NestedScroll;
12
13class QML_MATERIAL_API NestedScrollConnection : public QObject {
14 Q_OBJECT
15 QML_ELEMENT
16 QML_UNCREATABLE("Use a concrete scroll behavior")
17public:
18 enum Source
19 {
20 Drag,
21 Wheel,
22 Fling
23 };
24 Q_ENUM(Source)
25 explicit NestedScrollConnection(QObject* parent = nullptr): QObject(parent) {}
26 // Called once on pointer release, before remaining velocity starts a fling.
27 virtual QPointF release(QPointF velocity) {
28 Q_UNUSED(velocity);
29 return {};
30 }
31 // Vectors use local content displacement, not pointer displacement.
32 virtual QPointF preScroll(QPointF available, Source source) = 0;
33 virtual QPointF postScroll(QPointF consumed, QPointF available, Source source) = 0;
34 virtual bool canConsume(QPointF delta, Source source) const = 0;
35 virtual void begin(Source source) = 0;
36 virtual void end(bool cancelled) = 0;
37 Q_SIGNAL void invalidated();
38
39private:
40 friend class NestedScroll;
41 QPointer<QObject> m_attachment;
42};
43} // namespace qml_material