1//************************************ bs::framework - Copyright 2018 Marko Pintera **************************************//
2//*********** Licensed under the MIT license. See LICENSE.md for full terms. This notice is not to be removed. ***********//
3#pragma once
4
5#include "BsPrerequisites.h"
6#include "GUI/BsGUIElementContainer.h"
7#include "Utility/BsEvent.h"
8
9namespace bs
10{
11 /** @addtogroup GUI
12 * @{
13 */
14
15 /**
16 * GUI element containing a background image and a fill image that is scaled depending on the percentage set by the
17 * caller.
18 */
19 class BS_EXPORT GUIProgressBar : public GUIElementContainer
20 {
21 public:
22 /** Returns type name of the GUI element used for finding GUI element styles. */
23 static const String& getGUITypeName();
24
25 /** Name of the style for the fill image used by the progress bar. */
26 static const String& getBarStyleType();
27
28 /** Name of the style for the background image used by the progress bar. */
29 static const String& getBackgroundStyleType();
30
31 /**
32 * Creates a new progress bar.
33 *
34 * @param[in] styleName Optional style to use for the element. Style will be retrieved from GUISkin of the
35 * GUIWidget the element is used on. If not specified default style is used.
36 */
37 static GUIProgressBar* create(const String& styleName = StringUtil::BLANK);
38
39 /**
40 * Creates a new progress bar.
41 *
42 * @param[in] options Options that allow you to control how is the element positioned and sized. This will
43 * override any similar options set by style.
44 * @param[in] styleName Optional style to use for the element. Style will be retrieved from GUISkin of the
45 * GUIWidget the element is used on. If not specified default style is used.
46 */
47 static GUIProgressBar* create(const GUIOptions& options, const String& styleName = StringUtil::BLANK);
48
49 /**
50 * Fills up the progress bar up to the specified percentage.
51 *
52 * @param[in] pct How far to extend the fill image, in percent ranging [0.0f, 1.0f]
53 */
54 void setPercent(float pct);
55
56 /** Gets the percentage of how full is the progress bar currently. */
57 float getPercent() const { return mPercent; }
58
59 /** @copydoc GUIElement::setTint */
60 virtual void setTint(const Color& color) override;
61
62 public: // ***** INTERNAL ******
63 /** @name Internal
64 * @{
65 */
66
67 /** @copydoc GUIElementContainer::_getOptimalSize */
68 virtual Vector2I _getOptimalSize() const override;
69
70 /** @} */
71 protected:
72 GUIProgressBar(const String& styleName, const GUIDimensions& dimensions);
73
74 /** @copydoc GUIElementContainer::_updateLayoutInternal */
75 virtual void _updateLayoutInternal(const GUILayoutData& data) override;
76
77 /** @copydoc GUIElementContainer::styleUpdated */
78 void styleUpdated() override;
79
80 private:
81 GUITexture* mBar;
82 GUITexture* mBackground;
83
84 float mPercent;
85 };
86
87 /** @} */
88}