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>
32#if !TGUI_EXPERIMENTAL_USE_STD_MODULE
38TGUI_MODULE_EXPORT
namespace tgui
43 class TGUI_API SpinButton :
public ClickableWidget
47 using Ptr = std::shared_ptr<SpinButton>;
48 using ConstPtr = std::shared_ptr<const SpinButton>;
59 SpinButton(
const char* typeName =
StaticWidgetType,
bool initRenderer =
true);
151 template <typename T, typename = typename std::enable_if_t<std::is_arithmetic<T>::value, T>>
156 const double oldValue = m_value;
160 m_value = m_minimum + (std::round((
static_cast<double>(value) - m_minimum) / m_step) * m_step);
163 if (m_value < m_minimum)
165 else if (m_value > m_maximum)
168 if (oldValue != m_value)
186 template <typename T, typename = typename std::enable_if_t<std::is_arithmetic<T>::value, T>>
191 m_step =
static_cast<double>(step);
238 void leftMouseReleased(Vector2f pos) override;
243 void mouseMoved(Vector2f pos) override;
277 TGUI_NODISCARD std::unique_ptr<DataIO::Node>
save(SavingRenderersMap& renderers) const override;
282 void load(const std::unique_ptr<DataIO::Node>& node, const LoadingRenderersMap& renderers) override;
287 TGUI_NODISCARD Vector2f getArrowSize() const;
300 void callMousePressPeriodically(std::chrono::time_point<std::chrono::steady_clock> clickedTime,
bool repeatedCall);
311 bool m_orientationLocked =
false;
312 std::chrono::time_point<std::chrono::steady_clock> m_lastMousePressTime;
314 double m_minimum = 0;
315 double m_maximum = 10;
320 bool m_mouseHoverOnTopArrow =
false;
321 bool m_mouseDownOnTopArrow =
false;
324 Sprite m_spriteArrowUpHover;
326 Sprite m_spriteArrowDownHover;
329 Borders m_bordersCached;
330 Color m_borderColorCached;
331 Color m_backgroundColorCached;
332 Color m_backgroundColorHoverCached;
333 Color m_arrowColorCached;
334 Color m_arrowColorHoverCached;
335 float m_borderBetweenArrowsCached = 0;
Base class for render targets.
Definition BackendRenderTarget.hpp:46
Wrapper for colors.
Definition Color.hpp:73
Class to store the position or size of a widget.
Definition Layout.hpp:323
Signal to which the user can subscribe to get callbacks from.
Definition Signal.hpp:61
Wrapper class to store strings.
Definition String.hpp:96
Namespace that contains all TGUI functions and classes.
Definition AbsoluteOrRelativeValue.hpp:38
Orientation
Orientation of the object.
Definition Layout.hpp:52
@ Vertical
Vertical orientation.
Definition Layout.hpp:53
SignalTyped< float > SignalFloat
Signal with one "float" as optional unbound parameter.
Definition Signal.hpp:426
States used for drawing.
Definition RenderStates.hpp:38