3#include "qml_material/control/popup.hpp"
4#include "qml_material/item/item_proxy.hpp"
8class QML_MATERIAL_API Drawer :
public Popup {
10 QML_NAMED_ELEMENT(DrawerBase)
11 Q_PROPERTY(Qt::Edge edge READ edge WRITE setEdge NOTIFY edgeChanged FINAL)
13 RevealMode revealMode READ revealMode WRITE setRevealMode NOTIFY revealModeChanged FINAL)
14 Q_PROPERTY(qreal position READ position WRITE setPosition NOTIFY positionChanged FINAL)
16 bool interactive READ interactive WRITE setInteractive NOTIFY interactiveChanged FINAL)
17 Q_PROPERTY(qreal dragMargin READ dragMargin WRITE setDragMargin RESET resetDragMargin NOTIFY
18 dragMarginChanged FINAL)
26 RevealMode revealMode()
const {
return m_revealMode; }
27 void setRevealMode(RevealMode);
28 bool prepareExpansion(QObject* owner, ItemProxy* origin);
29 void clearExpansion(QObject* owner);
30 Q_SIGNAL
void revealModeChanged();
31 explicit Drawer(QObject* parent =
nullptr);
33 bool interactive()
const {
return m_interactive; }
34 void setInteractive(
bool);
35 qreal dragMargin()
const {
return m_dragMargin; }
36 void setDragMargin(qreal);
37 void resetDragMargin();
38 bool acceptsDrag(
const QPointF&)
const;
39 bool wantsDrag(
const QPointF&)
const;
40 void pressDrag(
const QPointF&, ulong timestamp);
41 void startDrag(
const QPointF&);
42 void moveDrag(
const QPointF&);
43 void releaseDrag(
const QPointF&, ulong timestamp);
45 bool dragging()
const {
return m_dragging; }
47 void close()
override;
48 void dismissImmediately()
override;
49 Qt::Edge edge()
const {
return m_edge; }
50 void setEdge(Qt::Edge);
51 qreal position()
const {
return m_position; }
52 void setPosition(qreal);
53 void updateDimmer(QQuickItem*, qreal opacity)
const override;
54 bool blocksScenePoint(
const QPointF&)
const override;
55 bool overlayContainsScenePoint(
const QPointF&)
const override;
56 Q_SIGNAL
void edgeChanged();
57 Q_SIGNAL
void positionChanged();
58 Q_SIGNAL
void interactiveChanged();
59 Q_SIGNAL
void dragMarginChanged();
62 QPointF surfacePosition()
const override;
63 QSizeF surfaceSize()
const override;
64 qreal presentationScale()
const override;
65 QList<TransitionTarget> transitionTargets(
bool opening)
const override;
66 void finalizeTransition(
bool opening)
override;
69 void registerOverlay();
71 QRectF expansionRect()
const;
72 ItemProxy::Geometry expansionGeometry()
const;
73 ItemProxy::Geometry originGeometry()
const;
74 QPointer<ItemProxy> m_origin;
75 QList<QMetaObject::Connection> m_originConnections;
76 ItemProxy::Geometry m_originGeometry;
77 mutable ItemProxy::Geometry m_startGeometry, m_endGeometry, m_anchorGeometry;
78 mutable qreal m_anchorProgress = 0;
79 mutable bool m_geometryReady =
false;
80 RevealMode m_revealMode = Slide;
81 qreal axis(
const QPointF&)
const;
83 qreal distanceFromEdge(
const QPointF&)
const;
84 QPointer<OverlayManager> m_inputOverlay;
86 ulong m_pressTimestamp = 0;
87 qreal m_dragOrigin = 0, m_dragPosition = 0, m_dragMargin = 0;
88 bool m_interactive =
true, m_dragging =
false, m_wasOpen =
false;
89 Qt::Edge m_edge = Qt::LeftEdge;