v1.4.4
This commit is contained in:
commit
9c94d113d3
10260 changed files with 1237388 additions and 0 deletions
71
source/windowing/StarProgressWidget.cpp
Normal file
71
source/windowing/StarProgressWidget.cpp
Normal file
|
@ -0,0 +1,71 @@
|
|||
#include "StarProgressWidget.hpp"
|
||||
#include "StarLexicalCast.hpp"
|
||||
#include "StarInterpolation.hpp"
|
||||
|
||||
namespace Star {
|
||||
|
||||
ProgressWidget::ProgressWidget(String const& background,
|
||||
String const& overlay,
|
||||
ImageStretchSet const& progressSet,
|
||||
GuiDirection direction)
|
||||
: m_background(background),
|
||||
m_overlay(overlay),
|
||||
m_bar(progressSet),
|
||||
m_direction(direction) {
|
||||
|
||||
m_progressLevel = 0;
|
||||
m_maxLevel = 1;
|
||||
|
||||
if (!m_background.empty())
|
||||
setSize(Vec2I(context()->textureSize(m_background)));
|
||||
else if (!m_overlay.empty())
|
||||
setSize(Vec2I(context()->textureSize(m_overlay)));
|
||||
|
||||
m_color = Color::White;
|
||||
}
|
||||
|
||||
void ProgressWidget::renderImpl() {
|
||||
float progress = 1;
|
||||
if (m_maxLevel > 0)
|
||||
progress = m_progressLevel / m_maxLevel;
|
||||
|
||||
auto shift = [&](float begin, float end, RectF templ) {
|
||||
RectF result = templ;
|
||||
|
||||
if (m_direction == GuiDirection::Horizontal) {
|
||||
result.min()[0] = lerp(begin, templ.min()[0], templ.max()[0]);
|
||||
result.max()[0] = lerp(end, templ.min()[0], templ.max()[0]);
|
||||
} else {
|
||||
result.min()[1] = lerp(begin, templ.min()[1], templ.max()[1]);
|
||||
result.max()[1] = lerp(end, templ.min()[1], templ.max()[1]);
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
if (!m_background.empty())
|
||||
context()->drawInterfaceQuad(m_background, shift(0, 1, RectF(Vec2F(), Vec2F(size()))), shift(0, 1, RectF(screenBoundRect())));
|
||||
|
||||
context()->drawImageStretchSet(m_bar, shift(0, progress, RectF(screenBoundRect())), m_direction, m_color.toRgba());
|
||||
|
||||
if (!m_overlay.empty())
|
||||
context()->drawInterfaceQuad(m_overlay, shift(0, 1, RectF({}, Vec2F(size()))), shift(0, 1, RectF(screenBoundRect())));
|
||||
}
|
||||
|
||||
void ProgressWidget::setCurrentProgressLevel(float amount) {
|
||||
m_progressLevel = amount;
|
||||
}
|
||||
|
||||
void ProgressWidget::setMaxProgressLevel(float amount) {
|
||||
m_maxLevel = amount;
|
||||
}
|
||||
|
||||
void ProgressWidget::setColor(Color const& color) {
|
||||
m_color = color;
|
||||
}
|
||||
|
||||
void ProgressWidget::setOverlay(String const& overlay) {
|
||||
m_overlay = overlay;
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue