1 #ifndef DRAGHANDLER_HPP
2 #define DRAGHANDLER_HPP
6 #include <MultiWidgets/Widget.hpp>
21 MultiWidgets::WidgetPtr dragged;
22 Nimble::Vector2f location{0, 0};
26 class SHOWCASE_API DropListener
30 DropListener(
bool multiHover) : m_multiHover(multiHover) {}
33 virtual bool dropEvent(
const DropEvent &) = 0;
35 bool multiHover()
const {
return m_multiHover; }
39 float maximumRelativeDropSize()
const {
return m_maxRelativeDropSize; }
40 void setMaximumRelativeDropSize(
float maxRelativeDropSize) { m_maxRelativeDropSize = maxRelativeDropSize; }
43 float m_maxRelativeDropSize{std::numeric_limits<float>::infinity()};
44 const bool m_multiHover;
48 class SHOWCASE_API
DragHandler :
public MultiWidgets::Operator
51 static void startDrag(MultiWidgets::WidgetPtr widget);
56 DragHandler(DropEvent event,
bool removeWidgetAtEnd);
58 virtual void update(MultiWidgets::Widget & dragged,
const MultiWidgets::FrameInfo & frameInfo)
override;
59 virtual void interactionEnd(MultiWidgets::Widget & dragged, MultiWidgets::GrabManager & gm)
override;
60 virtual void added(MultiWidgets::Widget & dragged)
override;
62 bool hoverBegin(MultiWidgets::Widget & dragged, MultiWidgets::WidgetPtr target,
63 const Nimble::Vector2f & location);
64 bool checkMaximumDropSize(MultiWidgets::Widget & dragged,
const MultiWidgets::WidgetPtr & target,
65 float maximumRelativeDropSize)
const;
66 void hoverEnd(MultiWidgets::WidgetPtr dragged);
69 MultiWidgets::WidgetPtr m_dragged;
70 MultiWidgets::WidgetPtr m_target;
72 bool m_removeWidgetAtEnd;
74 Nimble::Vector2f m_originalLocation{0, 0};
75 float m_originalScale{1};
84 virtual void added(MultiWidgets::Widget & widget)
override;
85 virtual void removed(MultiWidgets::Widget & widget)
override;
88 long m_dragEventListener;
92 #endif // DRAGHANDLER_HPP