TGUI 1.13
Loading...
Searching...
No Matches
RangeSlider.hpp
1
2//
3// TGUI - Texus' Graphical User Interface
4// Copyright (C) 2012-2026 Bruno Van de Velde (vdv_b@tgui.eu)
5//
6// This software is provided 'as-is', without any express or implied warranty.
7// In no event will the authors be held liable for any damages arising from the use of this software.
8//
9// Permission is granted to anyone to use this software for any purpose,
10// including commercial applications, and to alter it and redistribute it freely,
11// subject to the following restrictions:
12//
13// 1. The origin of this software must not be misrepresented;
14// you must not claim that you wrote the original software.
15// If you use this software in a product, an acknowledgment
16// in the product documentation would be appreciated but is not required.
17//
18// 2. Altered source versions must be plainly marked as such,
19// and must not be misrepresented as being the original software.
20//
21// 3. This notice may not be removed or altered from any source distribution.
22//
24
25#ifndef TGUI_RANGE_SLIDER_HPP
26#define TGUI_RANGE_SLIDER_HPP
27
28#include <TGUI/Renderers/RangeSliderRenderer.hpp>
29#include <TGUI/Widget.hpp>
30
32
33namespace tgui
34{
38 class TGUI_API RangeSlider : public Widget
39 {
40 public:
41 using Ptr = std::shared_ptr<RangeSlider>;
42 using ConstPtr = std::shared_ptr<const RangeSlider>;
43
44 static constexpr char StaticWidgetType[] = "RangeSlider";
45
53 explicit RangeSlider(const char* typeName = StaticWidgetType, bool initRenderer = true);
54
63 [[nodiscard]] static RangeSlider::Ptr create(float minimum = 0, float maximum = 10);
64
72 [[nodiscard]] static RangeSlider::Ptr copy(const RangeSlider::ConstPtr& slider);
73
78 [[nodiscard]] RangeSliderRenderer* getSharedRenderer() override;
79 [[nodiscard]] const RangeSliderRenderer* getSharedRenderer() const override;
80
86 [[nodiscard]] RangeSliderRenderer* getRenderer() override;
87
93 void setSize(const Layout2d& size) override;
94 using Widget::setSize;
95
103 [[nodiscard]] Vector2f getFullSize() const override;
104
113 [[nodiscard]] Vector2f getWidgetOffset() const override;
114
124 void setMinimum(float minimum);
125
133 [[nodiscard]] float getMinimum() const;
134
144 void setMaximum(float maximum);
145
153 [[nodiscard]] float getMaximum() const;
154
163 void setSelectionStart(float value);
164
170 [[nodiscard]] float getSelectionStart() const;
171
180 void setSelectionEnd(float value);
181
187 [[nodiscard]] float getSelectionEnd() const;
188
197 void setStep(float step);
198
204 [[nodiscard]] float getStep() const;
205
211 [[nodiscard]] bool isMouseOnWidget(Vector2f pos) const override;
212
216 bool leftMousePressed(Vector2f pos) override;
217
221 void leftMouseReleased(Vector2f pos) override;
222
226 void mouseMoved(Vector2f pos) override;
227
231 void leftMouseButtonNoLongerDown() override;
232
239 void draw(BackendRenderTarget& target, RenderStates states) const override;
240
242
243 protected:
253 [[nodiscard]] Signal& getSignal(String signalName) override;
254
260 void rendererChanged(const String& property) override;
261
265 [[nodiscard]] std::unique_ptr<DataIO::Node> save(SavingRenderersMap& renderers) const override;
266
270 void load(const std::unique_ptr<DataIO::Node>& node, const LoadingRenderersMap& renderers) override;
271
273 // Returns the size without the borders
275 [[nodiscard]] Vector2f getInnerSize() const;
276
278 // Updates the position of the thumb based on the current value of the slider
280 void updateThumbPositions();
281
283 // Makes a copy of the widget
285 [[nodiscard]] Widget::Ptr clone() const override;
286
288
289 public:
290 SignalRange onRangeChange = {"RangeChanged"};
291
293
294 protected:
295 std::pair<FloatRect, FloatRect> m_thumbs;
296
297 // When the mouse went down, did it go down on top of the thumb? If so, which one and where?
298 unsigned int m_mouseDownOnThumb = 0;
299 Vector2f m_mouseDownOnThumbPos;
300
301 float m_minimum = 0;
302 float m_maximum = 10;
303 float m_selectionStart = 0;
304 float m_selectionEnd = 0;
305 float m_step = 1;
306
307 Orientation m_orientation = Orientation::Horizontal; // Is the slider drawn horizontally or vertically?
308 Orientation m_imageOrientation = Orientation::Horizontal; // Does the loaded image lie horizontally or vertically?
309
310 Sprite m_spriteTrack;
311 Sprite m_spriteTrackHover;
312 Sprite m_spriteThumb;
313 Sprite m_spriteThumbHover;
314 Sprite m_spriteSelectedTrack;
315 Sprite m_spriteSelectedTrackHover;
316
317 // Cached renderer properties
318 Borders m_bordersCached;
319 Color m_borderColorCached;
320 Color m_borderColorHoverCached;
321 Color m_thumbColorCached;
322 Color m_thumbColorHoverCached;
323 Color m_trackColorCached;
324 Color m_trackColorHoverCached;
325 Color m_selectedTrackColorCached;
326 Color m_selectedTrackColorHoverCached;
327 };
328} // namespace tgui
329
330#endif // TGUI_RANGE_SLIDER_HPP
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
Definition RangeSliderRenderer.hpp:35
SignalRange onRangeChange
Value of the slider changed. Optional parameter: new value.
Definition RangeSlider.hpp:290
float getMinimum() const
Returns the minimum value.
Vector2f getWidgetOffset() const override
Returns the distance between the position where the widget is drawn and where the widget is placed.
float getStep() const
Returns the number of positions the thumb advances with each move.
bool leftMousePressed(Vector2f pos) override
Called by the parent when the left mouse button goes down on top of the widget.
float getSelectionEnd() const
Returns the current value where the selection ends.
void setSelectionStart(float value)
Changes the value where the selection starts.
std::shared_ptr< RangeSlider > Ptr
Shared widget pointer.
Definition RangeSlider.hpp:41
RangeSliderRenderer * getSharedRenderer() override
Returns the renderer, which gives access to functions that determine how the widget is displayed.
Vector2f getFullSize() const override
Returns the full size of the slider.
static RangeSlider::Ptr copy(const RangeSlider::ConstPtr &slider)
Makes a copy of another slider.
static constexpr char StaticWidgetType[]
Type name of the widget.
Definition RangeSlider.hpp:44
void setMinimum(float minimum)
Sets a minimum value.
void setSize(const Layout2d &size) override
Changes the size of the slider.
float getSelectionStart() const
Returns the current value where the selection starts.
static RangeSlider::Ptr create(float minimum=0, float maximum=10)
Creates a new slider widget.
Signal & getSignal(String signalName) override
Retrieves a signal based on its name.
void rendererChanged(const String &property) override
Function called when one of the properties of the renderer is changed.
std::unique_ptr< DataIO::Node > save(SavingRenderersMap &renderers) const override
Saves the widget as a tree node in order to save it to a file.
bool isMouseOnWidget(Vector2f pos) const override
Returns whether the mouse position (which is relative to the parent widget) lies on top of the widget...
void setSelectionEnd(float value)
Changes the value where the selection ends.
void setMaximum(float maximum)
Sets a maximum value.
void draw(BackendRenderTarget &target, RenderStates states) const override
Draw the widget to a render target.
void load(const std::unique_ptr< DataIO::Node > &node, const LoadingRenderersMap &renderers) override
Loads the widget from a tree of nodes.
Widget::Ptr clone() const override
Makes a copy of the widget if you don't know its exact type.
float getMaximum() const
Returns the maximum value.
void setStep(float step)
Changes the number of positions the thumb advances with each move.
RangeSliderRenderer * getRenderer() override
Returns the renderer, which gives access to functions that determine how the widget is displayed.
std::shared_ptr< const RangeSlider > ConstPtr
Shared constant widget pointer.
Definition RangeSlider.hpp:42
Signal to which the user can subscribe to get callbacks from.
Definition Signal.hpp:59
Definition Sprite.hpp:45
Wrapper class to store strings.
Definition String.hpp:94
std::shared_ptr< Widget > Ptr
Shared widget pointer.
Definition Widget.hpp:85
virtual void setSize(const Layout2d &size)
Changes the size of the widget.
Namespace that contains all TGUI functions and classes.
Definition AbsoluteOrRelativeValue.hpp:37
SignalTyped2< float, float > SignalRange
Signal with two floats as optional unbound parameters.
Definition Signal.hpp:416
Orientation
Orientation of the object.
Definition Layout.hpp:50
@ Horizontal
Horizontal orientation.
Definition Layout.hpp:52
States used for drawing.
Definition RenderStates.hpp:38