Sparkle 0.0.1
Loading...
Searching...
No Matches
spk_slider.hpp
1#pragma once
2
3#include "structure/design_pattern/spk_observable_value.hpp"
4#include "structure/system/event/spk_mouse_event.hpp"
5#include "structure/widget/components/spk_nine_slice_background.hpp"
6#include "structure/widget/spk_widget.hpp"
7#include "type/spk_orientation.hpp"
8
9#include <algorithm>
10#include <cmath>
11#include <cstdint>
12
13namespace spk
14{
24 class Slider : public spk::Widget
25 {
26 private:
27 spk::NineSliceBackground _background;
29 float _thumbSizeRatio = 0.25f;
30 spk::Orientation _orientation = spk::Orientation::Vertical;
31
33 spk::ObservableValue<float>::Contract _updateGeometryOnRatioEdition;
34
35 bool _isDragging = false;
36
37 void _updateBodyGeometry();
38 float _ratioFromPosition(const spk::Vector2Int &p_position) const;
39
40 protected:
44 void _onGeometryChange() override;
49 void _onPaintEvent(spk::PaintEvent &p_event) override;
54 void _onMousePressEvent(spk::MousePressEvent &p_event) override;
59 void _onMouseReleaseEvent(spk::MouseReleaseEvent &p_event) override;
64 void _onMouseMotionEvent(spk::MouseMotionEvent &p_event) override;
65
66 public:
72 Slider(const std::wstring &p_name, spk::Widget *p_parent);
73
78 void setThumbSizeRatio(float p_ratio);
83 void setOrientation(spk::Orientation p_orientation);
84
89 void setRatio(float p_ratio);
94 void adjustRatio(float p_delta);
99 float ratioValue() const;
100
105 float thumbSizeRatio() const;
106
111 void setBackgroundTexture(const spk::SpriteSheet *p_spriteSheet);
116 void setBodyTexture(const spk::SpriteSheet *p_spriteSheet);
121 void setBackgroundCornerSize(const spk::Vector2UInt &p_cornerSize);
126 void setBodyCornerSize(const spk::Vector2UInt &p_cornerSize);
127
137 const spk::ObservableValue<float> &ratio() const;
138 };
139}
Renders a scalable nine-slice background using a sprite sheet.
Definition spk_nine_slice_background.hpp:25
Stores a value and notifies subscribers whenever it changes.
Definition spk_observable_value.hpp:22
spk::TContractProvider< TType >::Contract Contract
Contract type for subscriptions.
Definition spk_observable_value.hpp:27
void setRatio(float p_ratio)
Sets the ratio value.
Definition spk_slider.cpp:48
void _onMouseReleaseEvent(spk::MouseReleaseEvent &p_event) override
Handles mouse release events.
Definition spk_slider.cpp:133
void setBodyCornerSize(const spk::Vector2UInt &p_cornerSize)
Sets the body corner size.
Definition spk_slider.cpp:89
void _onPaintEvent(spk::PaintEvent &p_event) override
Paints the slider visuals.
Definition spk_slider.cpp:110
spk::ObservableValue< float > & ratio()
Returns the ratio observable.
Definition spk_slider.cpp:94
Slider(const std::wstring &p_name, spk::Widget *p_parent)
Builds a slider widget.
Definition spk_slider.cpp:8
void setBackgroundCornerSize(const spk::Vector2UInt &p_cornerSize)
Sets the background corner size.
Definition spk_slider.cpp:84
void adjustRatio(float p_delta)
Adjusts the ratio by a delta.
Definition spk_slider.cpp:59
void _onMousePressEvent(spk::MousePressEvent &p_event) override
Handles mouse press events.
Definition spk_slider.cpp:116
float ratioValue() const
Returns the ratio value.
Definition spk_slider.cpp:64
void setBackgroundTexture(const spk::SpriteSheet *p_spriteSheet)
Sets the background texture.
Definition spk_slider.cpp:74
void setBodyTexture(const spk::SpriteSheet *p_spriteSheet)
Sets the body texture.
Definition spk_slider.cpp:79
float thumbSizeRatio() const
Returns the thumb size ratio.
Definition spk_slider.cpp:69
void _onMouseMotionEvent(spk::MouseMotionEvent &p_event) override
Handles mouse motion events.
Definition spk_slider.cpp:150
void setOrientation(spk::Orientation p_orientation)
Sets the slider orientation.
Definition spk_slider.cpp:37
void _onGeometryChange() override
Updates geometry when size changes.
Definition spk_slider.cpp:104
void setThumbSizeRatio(float p_ratio)
Sets the thumb size ratio relative to the track.
Definition spk_slider.cpp:25
Loads an image and exposes individual sprite regions.
Definition spk_sprite_sheet.hpp:21
Base class for interactive UI elements handling focus and events.
Definition spk_widget.hpp:52
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
Event emitted when a drawable region needs repainting.
Definition spk_paint_event.hpp:19