Sparkle 0.0.1
Loading...
Searching...
No Matches
spk_scalable_widget.hpp
1#pragma once
2
3#include "structure/graphics/spk_extend_2d.hpp"
4#include "structure/widget/spk_widget.hpp"
5
6namespace spk
7{
13 {
14 private:
15 class InnerBehavior : public spk::Widget
16 {
17 private:
18 enum Edge : uint8_t
19 {
20 None = 0,
21 Left = 1,
22 Right = 2,
23 Top = 4,
24 Bottom = 8
25 };
26
27 uint8_t _activeEdges = Edge::None;
28
29 spk::Extend2D _baseGeometry;
30 spk::Vector2Int _positionDelta;
31
32 spk::Extend2D _topAnchorArea;
33 spk::Extend2D _leftAnchorArea;
34 spk::Extend2D _rightAnchorArea;
35 spk::Extend2D _downAnchorArea;
36
37 uint8_t _hoverEdges(const spk::Vector2Int &p_mousePos) const;
38 void _setCursorForEdges(uint8_t p_edges);
39 spk::Extend2D _computeResizedGeometry(const spk::Vector2Int &p_currentPos) const;
40 void _beginResize(uint8_t p_edges, const spk::Vector2Int &p_startPos);
41 void _endResize();
42
43 void _onMousePressEvent(spk::MousePressEvent &p_event) override;
44 void _onMouseMotionEvent(spk::MouseMotionEvent &p_event) override;
45 void _onMouseReleaseEvent(spk::MouseReleaseEvent &p_event) override;
46
47 public:
48 InnerBehavior(const std::wstring &p_name, Widget *p_parent);
49
50 void setAnchorArea(const spk::Extend2D &p_extend2D);
51 };
52
53 InnerBehavior _resizeBehavior;
54
55 public:
61 ScalableWidget(const std::wstring &p_name, Widget *p_parent);
62
67 void setGeometry(const spk::Extend2D &p_extend2D) override;
68 };
69}
ScalableWidget(const std::wstring &p_name, Widget *p_parent)
Builds a scalable widget.
Definition spk_scalable_widget.cpp:255
void setGeometry(const spk::Extend2D &p_extend2D) override
Sets the widget geometry and updates resize handles.
Definition spk_scalable_widget.cpp:262
Base class for interactive UI elements handling focus and events.
Definition spk_widget.hpp:52
virtual void _onMousePressEvent(spk::MousePressEvent &p_event)
Mouse button press handler for derived widgets.
Definition spk_widget.cpp:236
virtual void _onMouseReleaseEvent(spk::MouseReleaseEvent &p_event)
Mouse button release handler for derived widgets.
Definition spk_widget.cpp:240
virtual void _onMouseMotionEvent(spk::MouseMotionEvent &p_event)
Mouse motion handler for derived widgets.
Definition spk_widget.cpp:248
Widget(const std::wstring &p_name, Widget *p_parent)
Builds a widget optionally attached to a parent.
Definition spk_widget.cpp:103
Axis-aligned rectangle defined by an anchor point and size.
Definition spk_extend_2d.hpp:24
Mouse move event carrying current position.
Definition spk_mouse_event.hpp:50
Mouse button press event.
Definition spk_mouse_event.hpp:14
Mouse button release event.
Definition spk_mouse_event.hpp:26