TGUI  1.0-alpha
Knob.hpp
1
2//
3// TGUI - Texus' Graphical User Interface
4// Copyright (C) 2012-2022 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
26#ifndef TGUI_KNOB_HPP
27#define TGUI_KNOB_HPP
28
29
30#include <TGUI/Widget.hpp>
31#include <TGUI/Renderers/KnobRenderer.hpp>
32
34
35namespace tgui
36{
40 class TGUI_API Knob : public Widget
41 {
42 public:
43
44 typedef std::shared_ptr<Knob> Ptr;
45 typedef std::shared_ptr<const Knob> ConstPtr;
46
47
55 Knob(const char* typeName = "Knob", bool initRenderer = true);
56
57
64 static Knob::Ptr create();
65
66
76
77
83 const KnobRenderer* getSharedRenderer() const;
84
91
92
99 void setSize(const Layout2d& size) override;
100 using Widget::setSize;
101
102
111 void setStartRotation(float startRotation);
112
113
120 float getStartRotation() const;
121
122
131 void setEndRotation(float endRotation);
132
133
140 float getEndRotation() const;
141
142
157 void setMinimum(float minimum);
158
159
170 float getMinimum() const;
171
172
187 void setMaximum(float maximum);
188
189
200 float getMaximum() const;
201
202
214 void setValue(float value);
215
216
225 float getValue() const;
226
227
234 void setClockwiseTurning(bool clockwise);
235
236
244
245
252 bool isMouseOnWidget(Vector2f pos) const override;
253
257 void leftMousePressed(Vector2f pos) override;
258
262 void mouseMoved(Vector2f pos) override;
263
264
272 void draw(BackendRenderTarget& target, RenderStates states) const override;
273
274
276 protected:
277
287 Signal& getSignal(String signalName) override;
288
289
296 void rendererChanged(const String& property) override;
297
298
302 std::unique_ptr<DataIO::Node> save(SavingRenderersMap& renderers) const override;
303
304
308 void load(const std::unique_ptr<DataIO::Node>& node, const LoadingRenderersMap& renderers) override;
309
310
312 // Returns the size without the borders
314 Vector2f getInnerSize() const;
315
316
318 // Recalculates the rotation of the knob.
320 void recalculateRotation();
321
322
324 // Makes a copy of the widget
326 Widget::Ptr clone() const override;
327
328
330 public:
331
332 SignalFloat onValueChange = {"ValueChanged"};
333
334
336 protected:
337
338 bool m_clockwiseTurning = true; // Does rotating clockwise increment the value?
339 float m_startRotation = 270;
340 float m_endRotation = 270;
341
342 float m_minimum = 0;
343 float m_value = 0;
344 float m_maximum = 360;
345
346 float m_angle = 270;
347
348 Sprite m_spriteBackground;
349 Sprite m_spriteForeground;
350
351 // Cached renderer properties
352 Borders m_bordersCached;
353 Color m_borderColorCached;
354 Color m_backgroundColorCached;
355 Color m_thumbColorCached;
356 float m_imageRotationCached = 0;
357 };
358
360}
361
363
364#endif // TGUI_KNOB_HPP
365
Base class for render targets.
Definition: BackendRenderTarget.hpp:48
Wrapper for colors.
Definition: Color.hpp:63
Definition: KnobRenderer.hpp:37
Knob widget.
Definition: Knob.hpp:41
static Knob::Ptr create()
Creates a new knob widget.
bool isMouseOnWidget(Vector2f pos) const override
Returns whether the mouse position (which is relative to the parent widget) lies on top of the widget...
float getMinimum() const
Returns the value when the knob would be rotated in the direction of StartRotation.
std::shared_ptr< const Knob > ConstPtr
Shared constant widget pointer.
Definition: Knob.hpp:45
std::shared_ptr< Knob > Ptr
Shared widget pointer.
Definition: Knob.hpp:44
void setValue(float value)
Changes the current value.
void load(const std::unique_ptr< DataIO::Node > &node, const LoadingRenderersMap &renderers) override
Loads the widget from a tree of nodes.
void rendererChanged(const String &property) override
Function called when one of the properties of the renderer is changed.
float getEndRotation() const
Sets the end rotation, which is the place where the value should be maximal.
KnobRenderer * getSharedRenderer()
Returns the renderer, which gives access to functions that determine how the widget is displayed.
float getStartRotation() const
Returns the start rotation, which is the place where the value should be minimal.
void setEndRotation(float endRotation)
Sets the end rotation, which is the place where the value should be maximal.
void draw(BackendRenderTarget &target, RenderStates states) const override
Draw the widget to a render target.
float getMaximum() const
Returns the value when the knob would be rotated in the direction of EndRotation.
KnobRenderer * getRenderer()
Returns the renderer, which gives access to functions that determine how the widget is displayed.
float getValue() const
Returns the current value.
static Knob::Ptr copy(Knob::ConstPtr knob)
Makes a copy of another knob.
void setClockwiseTurning(bool clockwise)
Should the value increase when turning the knob clockwise?
bool getClockwiseTurning() const
Returns whether the value increases when turning the knob clockwise?
Widget::Ptr clone() const override
Makes a copy of the widget if you don't know its exact type.
void setSize(const Layout2d &size) override
Changes the size of the knob.
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.
void setStartRotation(float startRotation)
Sets the start rotation, which is the place where the value should be minimal.
void setMinimum(float minimum)
Sets the value for when the knob would be rotated in the direction of StartRotation.
void setMaximum(float maximum)
Sets the value for when the knob would be rotated in the direction of EndRotation.
Signal & getSignal(String signalName) override
Retrieves a signal based on its name.
Class to store the position or size of a widget.
Definition: Layout.hpp:284
Definition: Outline.hpp:39
Signal to which the user can subscribe to get callbacks from.
Definition: Signal.hpp:58
Definition: Sprite.hpp:45
Wrapper class to store strings.
Definition: String.hpp:79
The parent class for every widget.
Definition: Widget.hpp:70
std::shared_ptr< Widget > Ptr
Shared widget pointer.
Definition: Widget.hpp:73
virtual void setSize(const Layout2d &size)
Changes the size of the widget.
Namespace that contains all TGUI functions and classes.
Definition: AbsoluteOrRelativeValue.hpp:36
States used for drawing.
Definition: RenderStates.hpp:39