Sparkle 0.0.1
Loading...
Searching...
No Matches
spk_scroll_bar.hpp
1#pragma once
2
3#include "structure/widget/spk_icon_button.hpp"
4#include "structure/widget/spk_linear_layout.hpp"
5#include "structure/widget/spk_slider.hpp"
6#include "type/spk_enablement.hpp"
7#include "type/spk_orientation.hpp"
8
9#include <cstdint>
10
11namespace spk
12{
23 class ScrollBar : public spk::Widget
24 {
25 private:
26 spk::IconButton _lowerButton;
27 Slider _slider;
28 spk::IconButton _raiseButton;
29
30 float _step = 0.1f;
31 uint32_t _minimalWidth = 16;
32 uint32_t _minimalLength = 0;
33
34 spk::VerticalLayout _verticalLayout;
35 spk::HorizontalLayout _horizontalLayout;
36 spk::Orientation _orientation = spk::Orientation::Vertical;
37
38 spk::IconButton::Contract _lowerButtonContract;
39 spk::IconButton::Contract _raiseButtonContract;
40
41 spk::Enablement _buttonVisibility = spk::Enablement::Enable;
42
43 void _applyOrientation();
44 void _applyMinimalWidth();
45 void _applyMinimalLength();
46 spk::Vector2UInt _minimalSize() const;
47 void _updateButtonLayout();
48
49 protected:
53 void _onGeometryChange() override;
54
55 public:
61 ScrollBar(const std::wstring &p_name, spk::Widget *p_parent);
62
67 void setStep(const float &p_step);
72 void setMinimalWidth(uint32_t p_width);
77 uint32_t minimalWidth() const;
82 void setMinimalLength(uint32_t p_length);
87 uint32_t minimalLength() const;
91 void increase();
95 void decrease();
100 float ratio() const;
105 void setOrientation(spk::Orientation p_orientation);
106
116 const spk::IconButton &lowerButton() const;
126 const spk::IconButton &raiseButton() const;
127
132 Slider &slider();
137 const Slider &slider() const;
138
143 void setButtonVisibility(spk::Enablement p_visibility);
144 };
145}
Button widget that displays a background and icon per state.
Definition spk_icon_button.hpp:22
spk::TContractProvider<>::Contract Contract
Contract type for click subscriptions.
Definition spk_icon_button.hpp:27
spk::IconButton & raiseButton()
Returns the raise button.
Definition spk_scroll_bar.cpp:252
void setMinimalWidth(uint32_t p_width)
Sets the minimal width for horizontal orientation.
Definition spk_scroll_bar.cpp:152
void increase()
Increases the scroll position.
Definition spk_scroll_bar.cpp:189
float ratio() const
Returns the current scroll ratio.
Definition spk_scroll_bar.cpp:199
void setStep(const float &p_step)
Sets the scroll step ratio.
Definition spk_scroll_bar.cpp:147
void setButtonVisibility(spk::Enablement p_visibility)
Sets button visibility.
Definition spk_scroll_bar.cpp:217
uint32_t minimalWidth() const
Returns the minimal width for horizontal orientation.
Definition spk_scroll_bar.cpp:166
uint32_t minimalLength() const
Returns the minimal length for vertical orientation.
Definition spk_scroll_bar.cpp:184
Slider & slider()
Returns the slider component.
Definition spk_scroll_bar.cpp:262
void _onGeometryChange() override
Updates layout geometry when size changes.
Definition spk_scroll_bar.cpp:130
ScrollBar(const std::wstring &p_name, spk::Widget *p_parent)
Builds a scroll bar widget.
Definition spk_scroll_bar.cpp:7
spk::IconButton & lowerButton()
Returns the lower button.
Definition spk_scroll_bar.cpp:242
void decrease()
Decreases the scroll position.
Definition spk_scroll_bar.cpp:194
void setMinimalLength(uint32_t p_length)
Sets the minimal length for vertical orientation.
Definition spk_scroll_bar.cpp:171
void setOrientation(spk::Orientation p_orientation)
Sets the scroll bar orientation.
Definition spk_scroll_bar.cpp:204
Slider widget for selecting a ratio within [0,1].
Definition spk_slider.hpp:25
Base class for interactive UI elements handling focus and events.
Definition spk_widget.hpp:52