25#ifndef TGUI_SPIN_BUTTON_HPP
26#define TGUI_SPIN_BUTTON_HPP
28#include <TGUI/Renderers/SpinButtonRenderer.hpp>
29#include <TGUI/Widgets/ClickableWidget.hpp>
30#include <TGUI/Timer.hpp>
41 class TGUI_API SpinButton :
public ClickableWidget
45 using Ptr = std::shared_ptr<SpinButton>;
46 using ConstPtr = std::shared_ptr<const SpinButton>;
57 SpinButton(
const char* typeName =
StaticWidgetType,
bool initRenderer =
true);
149 template <typename T, typename = typename std::enable_if_t<std::is_arithmetic<T>::value, T>>
154 const double oldValue = m_value;
158 m_value = m_minimum + (std::round((
static_cast<double>(value) - m_minimum) / m_step) * m_step);
161 if (m_value < m_minimum)
163 else if (m_value > m_maximum)
166 if (oldValue != m_value)
184 template <typename T, typename = typename std::enable_if_t<std::is_arithmetic<T>::value, T>>
189 m_step =
static_cast<double>(step);
236 void leftMouseReleased(Vector2f pos) override;
241 void mouseMoved(Vector2f pos) override;
275 TGUI_NODISCARD std::unique_ptr<DataIO::Node>
save(SavingRenderersMap& renderers) const override;
280 void load(const std::unique_ptr<DataIO::Node>& node, const LoadingRenderersMap& renderers) override;
285 TGUI_NODISCARD Vector2f getArrowSize() const;
298 void callMousePressPeriodically(std::chrono::time_point<std::chrono::steady_clock> clickedTime,
bool repeatedCall);
309 bool m_orientationLocked =
false;
310 std::chrono::time_point<std::chrono::steady_clock> m_lastMousePressTime;
312 double m_minimum = 0;
313 double m_maximum = 10;
318 bool m_mouseHoverOnTopArrow =
false;
319 bool m_mouseDownOnTopArrow =
false;
322 Sprite m_spriteArrowUpHover;
324 Sprite m_spriteArrowDownHover;
327 Borders m_bordersCached;
328 Color m_borderColorCached;
329 Color m_backgroundColorCached;
330 Color m_backgroundColorHoverCached;
331 Color m_arrowColorCached;
332 Color m_arrowColorHoverCached;
333 float m_borderBetweenArrowsCached = 0;
Base class for render targets.
Definition BackendRenderTarget.hpp:46
Wrapper for colors.
Definition Color.hpp:71
Class to store the position or size of a widget.
Definition Layout.hpp:321
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:36
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:424
States used for drawing.
Definition RenderStates.hpp:38