TGUI 1.13
Loading...
Searching...
No Matches
ProgressBar.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_PROGRESS_BAR_HPP
26#define TGUI_PROGRESS_BAR_HPP
27
28#include <TGUI/Renderers/ProgressBarRenderer.hpp>
29#include <TGUI/Text.hpp>
30#include <TGUI/Widgets/ClickableWidget.hpp>
31
33
34namespace tgui
35{
39 class TGUI_API ProgressBar : public ClickableWidget
40 {
41 public:
42 using Ptr = std::shared_ptr<ProgressBar>;
43 using ConstPtr = std::shared_ptr<const ProgressBar>;
44
45 static constexpr char StaticWidgetType[] = "ProgressBar";
46
52 enum class FillDirection : std::uint8_t
53 {
54 LeftToRight,
55 RightToLeft,
56 TopToBottom,
57 BottomToTop
58 };
59
67 explicit ProgressBar(const char* typeName = StaticWidgetType, bool initRenderer = true);
68
74 [[nodiscard]] static ProgressBar::Ptr create();
75
83 [[nodiscard]] static ProgressBar::Ptr copy(const ProgressBar::ConstPtr& progressBar);
84
89 [[nodiscard]] ProgressBarRenderer* getSharedRenderer() override;
90 [[nodiscard]] const ProgressBarRenderer* getSharedRenderer() const override;
91
97 [[nodiscard]] ProgressBarRenderer* getRenderer() override;
98
104 void setSize(const Layout2d& size) override;
105 using Widget::setSize;
106
114 void setMinimum(unsigned int minimum);
115
121 [[nodiscard]] unsigned int getMinimum() const;
122
130 void setMaximum(unsigned int maximum);
131
137 [[nodiscard]] unsigned int getMaximum() const;
138
146 void setValue(unsigned int value);
147
153 [[nodiscard]] unsigned int getValue() const;
154
162 unsigned int incrementValue();
163
171 void setText(const String& text);
172
178 [[nodiscard]] const String& getText() const;
179
188
196 [[nodiscard]] FillDirection getFillDirection() const;
197
202 [[nodiscard]] bool isMouseOnWidget(Vector2f pos) const override;
203
210 void draw(BackendRenderTarget& target, RenderStates states) const override;
211
213
214 protected:
224 [[nodiscard]] Signal& getSignal(String signalName) override;
225
231 void rendererChanged(const String& property) override;
232
236 [[nodiscard]] std::unique_ptr<DataIO::Node> save(SavingRenderersMap& renderers) const override;
237
241 void load(const std::unique_ptr<DataIO::Node>& node, const LoadingRenderersMap& renderers) override;
242
246 void updateTextSize() override;
247
249 // Returns the size without the borders
251 [[nodiscard]] Vector2f getInnerSize() const;
252
254 // When the value changes, or when the minimum/maximum limits change then a smaller of bigger piece of the front image
255 // must be drawn. This function is called to calculate the size of the piece to draw.
257 void recalculateFillSize();
258
260 // Returns the size of the front image.
262 [[nodiscard]] Vector2f getFrontImageSize() const;
263
265 // Makes a copy of the widget
267 [[nodiscard]] Widget::Ptr clone() const override;
268
270
271 public:
272 SignalUInt onValueChange = {"ValueChanged"};
273 Signal onFull = {"Full"};
274
276
277 protected:
278 unsigned int m_minimum = 0;
279 unsigned int m_maximum = 100;
280 unsigned int m_value = 0;
281
282 Text m_textBack;
283 Text m_textFront;
284
285 FloatRect m_backRect;
286 FloatRect m_frontRect;
287
288 FillDirection m_fillDirection = FillDirection::LeftToRight;
289
290 Sprite m_spriteBackground;
291 Sprite m_spriteFill;
292
293 // Cached renderer properties
294 Borders m_bordersCached;
295 Color m_borderColorCached;
296 Color m_backgroundColorCached;
297 Color m_fillColorCached;
298 };
299} // namespace tgui
300
301#endif // TGUI_PROGRESS_BAR_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 ProgressBarRenderer.hpp:35
Progress bar widget.
Definition ProgressBar.hpp:40
Widget::Ptr clone() const override
Makes a copy of the widget if you don't know its exact type.
FillDirection getFillDirection() const
Returns the fill direction of the progress bar.
unsigned int getValue() const
Returns the current value.
void setFillDirection(FillDirection direction)
Changes the fill direction of the progress bar.
ProgressBarRenderer * getRenderer() override
Returns the renderer, which gives access to functions that determine how the widget is displayed.
void setMaximum(unsigned int maximum)
Sets a maximum value.
void updateTextSize() override
Called when the text size is changed (either by setTextSize or via the renderer).
bool isMouseOnWidget(Vector2f pos) const override
Returns whether the mouse position (which is relative to the parent widget) lies on top of the widget...
std::shared_ptr< ProgressBar > Ptr
Shared widget pointer.
Definition ProgressBar.hpp:42
SignalUInt onValueChange
Value of the progress bar changed. Optional parameter: new value.
Definition ProgressBar.hpp:272
static ProgressBar::Ptr copy(const ProgressBar::ConstPtr &progressBar)
Makes a copy of another progress bar.
std::shared_ptr< const ProgressBar > ConstPtr
Shared constant widget pointer.
Definition ProgressBar.hpp:43
FillDirection
The fill direction of the progress bar.
Definition ProgressBar.hpp:53
void setValue(unsigned int value)
Changes the current value.
static constexpr char StaticWidgetType[]
Type name of the widget.
Definition ProgressBar.hpp:45
Signal & getSignal(String signalName) override
Retrieves a signal based on its name.
unsigned int incrementValue()
Increments the value.
void setMinimum(unsigned int minimum)
Sets a minimum value.
void setText(const String &text)
Changes the caption of the progress bar.
ProgressBarRenderer * getSharedRenderer() 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 progress bar.
static ProgressBar::Ptr create()
Creates a new progress bar widget.
void draw(BackendRenderTarget &target, RenderStates states) const override
Draw the widget to a render target.
unsigned int getMinimum() const
Returns the minimum value.
Signal onFull
Value of the progress bar changed and the progress bar became full.
Definition ProgressBar.hpp:273
unsigned int getMaximum() const
Returns the maximum value.
void rendererChanged(const String &property) override
Function called when one of the properties of the renderer is changed.
const String & getText() const
Returns the caption of the progress bar.
void load(const std::unique_ptr< DataIO::Node > &node, const LoadingRenderersMap &renderers) override
Loads the widget from a tree of nodes.
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.
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
Backend-independent wrapper around the backend-specific text class.
Definition Text.hpp:53
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
SignalTyped< unsigned int > SignalUInt
Signal with one "unsigned int" as optional unbound parameter.
Definition Signal.hpp:409
States used for drawing.
Definition RenderStates.hpp:38