TGUI  1.6.1
Loading...
Searching...
No Matches
Slider.hpp
1
2//
3// TGUI - Texus' Graphical User Interface
4// Copyright (C) 2012-2024 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_SLIDER_HPP
26#define TGUI_SLIDER_HPP
27
28#include <TGUI/Widget.hpp>
29#include <TGUI/Renderers/SliderRenderer.hpp>
30
32
33TGUI_MODULE_EXPORT namespace tgui
34{
38 class TGUI_API Slider : public Widget
39 {
40 public:
41
42 using Ptr = std::shared_ptr<Slider>;
43 using ConstPtr = std::shared_ptr<const Slider>;
44
45 static constexpr const char StaticWidgetType[] = "Slider";
46
54 Slider(const char* typeName = StaticWidgetType, bool initRenderer = true);
55
64 TGUI_NODISCARD static Slider::Ptr create(float minimum = 0, float maximum = 10);
65
73 TGUI_NODISCARD static Slider::Ptr copy(const Slider::ConstPtr& slider);
74
79 TGUI_NODISCARD SliderRenderer* getSharedRenderer() override;
80 TGUI_NODISCARD const SliderRenderer* getSharedRenderer() const override;
81
87 TGUI_NODISCARD SliderRenderer* getRenderer() override;
88
97 void setSize(const Layout2d& size) override;
98 using Widget::setSize;
99
107 TGUI_NODISCARD Vector2f getFullSize() const override;
108
117 TGUI_NODISCARD Vector2f getWidgetOffset() const override;
118
128 void setMinimum(float minimum);
129
137 TGUI_NODISCARD float getMinimum() const;
138
148 void setMaximum(float maximum);
149
157 TGUI_NODISCARD float getMaximum() const;
158
167 void setValue(float value);
168
176 TGUI_NODISCARD float getValue() const;
177
186 void setStep(float step);
187
193 TGUI_NODISCARD float getStep() const;
194
201 TGUI_DEPRECATED("Use setOrientation instead") void setVerticalScroll(bool vertical);
202
207 TGUI_DEPRECATED("Use getOrientation instead") TGUI_NODISCARD bool getVerticalScroll() const;
208
215 void setOrientation(Orientation orientation);
216
222 TGUI_NODISCARD Orientation getOrientation() const;
223
230 void setInvertedDirection(bool invertedDirection);
231
238 TGUI_NODISCARD bool getInvertedDirection() const;
239
244 void setChangeValueOnScroll(bool changeValueOnScroll);
245
250 TGUI_NODISCARD bool getChangeValueOnScroll() const;
251
257 TGUI_NODISCARD bool isMouseOnWidget(Vector2f pos) const override;
258
262 bool leftMousePressed(Vector2f pos) override;
263
267 void leftMouseReleased(Vector2f pos) override;
268
272 void mouseMoved(Vector2f pos) override;
273
277 bool scrolled(float delta, Vector2f pos, bool touch) override;
278
282 void leftMouseButtonNoLongerDown() override;
283
290 void draw(BackendRenderTarget& target, RenderStates states) const override;
291
293 protected:
294
304 TGUI_NODISCARD Signal& getSignal(String signalName) override;
305
311 void rendererChanged(const String& property) override;
312
316 TGUI_NODISCARD std::unique_ptr<DataIO::Node> save(SavingRenderersMap& renderers) const override;
317
321 void load(const std::unique_ptr<DataIO::Node>& node, const LoadingRenderersMap& renderers) override;
322
324 // Returns the size without the borders
326 TGUI_NODISCARD Vector2f getInnerSize() const;
327
329 // Updates the position of the thumb based on the current value of the slider
331 void updateThumbPosition();
332
334 // Makes a copy of the widget
336 TGUI_NODISCARD Widget::Ptr clone() const override;
337
339 public:
340
341 SignalFloat onValueChange = {"ValueChanged"};
342
344 protected:
345
346 FloatRect m_thumb;
347
348 // When the mouse went down, did it go down on top of the thumb? If so, where?
349 bool m_mouseDownOnThumb = false;
350 Vector2f m_mouseDownOnThumbPos;
351
352 float m_minimum = 0;
353 float m_maximum = 10;
354 float m_value = 0;
355 float m_step = 1;
356
357 bool m_invertedDirection = false; // Are min and max swapped?
358 bool m_changeValueOnScroll = true; // Does mouseScroll event change slider value?
359
360 Orientation m_orientation = Orientation::Horizontal; // Is the slider drawn horizontally or vertically?
361 Orientation m_imageOrientation = Orientation::Horizontal; // Does the loaded image lie horizontally or vertically?
362 bool m_orientationLocked = false; // Will setSize change the orientation or not?
363
364 Sprite m_spriteTrack;
365 Sprite m_spriteTrackHover;
366 Sprite m_spriteThumb;
367 Sprite m_spriteThumbHover;
368
369 // Cached renderer properties
370 Borders m_bordersCached;
371 Color m_borderColorCached;
372 Color m_borderColorHoverCached;
373 Color m_thumbColorCached;
374 Color m_thumbColorHoverCached;
375 Color m_trackColorCached;
376 Color m_trackColorHoverCached;
377 bool m_thumbWithinTrackCached = false;
378 };
379
381}
382
384
385#endif // TGUI_SLIDER_HPP
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
Definition Outline.hpp:38
Signal to which the user can subscribe to get callbacks from.
Definition Signal.hpp:61
Definition SliderRenderer.hpp:35
Slider widget.
Definition Slider.hpp:39
Vector2f getWidgetOffset() const override
Returns the distance between the position where the widget is drawn and where the widget is placed.
static Slider::Ptr copy(const Slider::ConstPtr &slider)
Makes a copy of another slider.
SliderRenderer * getSharedRenderer() override
Returns the renderer, which gives access to functions that determine how the widget is displayed.
float getStep() const
Returns the number of positions the thumb advances with each move.
void setMinimum(float minimum)
Sets a minimum value.
Vector2f getFullSize() const override
Returns the full size of the slider.
void setStep(float step)
Changes the number of positions the thumb advances with each move.
std::shared_ptr< Slider > Ptr
Shared widget pointer.
Definition Slider.hpp:42
SliderRenderer * getRenderer() override
Returns the renderer, which gives access to functions that determine how the widget is displayed.
void setSize(const Layout2d &size) override
Changes the size of the slider.
static Slider::Ptr create(float minimum=0, float maximum=10)
Creates a new slider widget.
float getValue() const
Returns the current value.
float getMinimum() const
Returns the minimum value.
float getMaximum() const
Returns the maximum value.
void setValue(float value)
Changes the current value.
std::shared_ptr< const Slider > ConstPtr
Shared constant widget pointer.
Definition Slider.hpp:43
void setMaximum(float maximum)
Sets a maximum value.
Definition Sprite.hpp:47
Wrapper class to store strings.
Definition String.hpp:96
The parent class for every widget.
Definition Widget.hpp:83
Namespace that contains all TGUI functions and classes.
Definition AbsoluteOrRelativeValue.hpp:38
Orientation
Orientation of the object.
Definition Layout.hpp:52
States used for drawing.
Definition RenderStates.hpp:38