25#ifndef TGUI_SPIN_BUTTON_HPP
26#define TGUI_SPIN_BUTTON_HPP
28#include <TGUI/Renderers/SpinButtonRenderer.hpp>
29#include <TGUI/Timer.hpp>
30#include <TGUI/Widgets/ClickableWidget.hpp>
41 class TGUI_API SpinButton :
public ClickableWidget
44 using Ptr = std::shared_ptr<SpinButton>;
45 using ConstPtr = std::shared_ptr<const SpinButton>;
56 explicit SpinButton(
const char* typeName =
StaticWidgetType,
bool initRenderer =
true);
148 template <
typename T,
typename =
typename std::enable_if_t<std::is_arithmetic_v<T>, T>>
153 const double oldValue = m_value;
157 m_value = m_minimum + (std::round((
static_cast<double>(value) - m_minimum) / m_step) * m_step);
160 if (m_value < m_minimum)
162 else if (m_value > m_maximum)
165 if (oldValue != m_value)
183 template <
typename T,
typename =
typename std::enable_if_t<std::is_arithmetic_v<T>, T>>
188 m_step =
static_cast<double>(step);
235 void leftMouseReleased(Vector2f pos) override;
240 void mouseMoved(Vector2f pos) override;
274 [[nodiscard]] std::unique_ptr<DataIO::Node>
save(SavingRenderersMap& renderers) const override;
279 void load(const std::unique_ptr<DataIO::Node>& node, const LoadingRenderersMap& renderers) override;
284 [[nodiscard]] Vector2f getArrowSize() const;
297 void callMousePressPeriodically(std::chrono::time_point<std::chrono::steady_clock> clickedTime,
bool repeatedCall);
308 bool m_orientationLocked =
false;
309 std::chrono::time_point<std::chrono::steady_clock> m_lastMousePressTime;
311 double m_minimum = 0;
312 double m_maximum = 10;
317 bool m_mouseHoverOnTopArrow =
false;
318 bool m_mouseDownOnTopArrow =
false;
321 Sprite m_spriteArrowUpHover;
323 Sprite m_spriteArrowDownHover;
326 Borders m_bordersCached;
327 Color m_borderColorCached;
328 Color m_backgroundColorCached;
329 Color m_backgroundColorHoverCached;
330 Color m_arrowColorCached;
331 Color m_arrowColorHoverCached;
332 float m_borderBetweenArrowsCached = 0;
Base class for render targets.
Definition BackendRenderTarget.hpp:46
Wrapper for colors.
Definition Color.hpp:63
Class to store the position or size of a widget.
Definition Layout.hpp:320
Signal to which the user can subscribe to get callbacks from.
Definition Signal.hpp:59
Wrapper class to store strings.
Definition String.hpp:94
Namespace that contains all TGUI functions and classes.
Definition AbsoluteOrRelativeValue.hpp:37
Orientation
Orientation of the object.
Definition Layout.hpp:50
@ Vertical
Vertical orientation.
Definition Layout.hpp:51
SignalTyped< float > SignalFloat
Signal with one "float" as optional unbound parameter.
Definition Signal.hpp:411
States used for drawing.
Definition RenderStates.hpp:38