diff --git a/resources/gui/widget/ProgressbarFill.png b/resources/gui/widget/ProgressbarFill.png index aa695d0b28..699446ecb5 100644 Binary files a/resources/gui/widget/ProgressbarFill.png and b/resources/gui/widget/ProgressbarFill.png differ diff --git a/src/gui/gui2_progressbar.cpp b/src/gui/gui2_progressbar.cpp index 301f828391..33c566db75 100644 --- a/src/gui/gui2_progressbar.cpp +++ b/src/gui/gui2_progressbar.cpp @@ -15,13 +15,18 @@ void GuiProgressbar::onDraw(sp::RenderTarget& renderer) const auto& front = front_style->get(getState()); float f = (value - min_value) / (max_value - min_value); + sp::Rect fill_rect = rect; if (drawBackground) renderer.drawStretched(rect, back.texture, back.color); - sp::Rect fill_rect = rect; if (rect.size.x >= rect.size.y) { + if (drawBackground) + { + fill_rect.position.y += fill_rect.size.y * 0.125f; + fill_rect.size.y *= 0.75f; + } fill_rect.size.x *= f; if (max_value < min_value) fill_rect.position.x = rect.position.x + rect.size.x - fill_rect.size.x; @@ -29,6 +34,11 @@ void GuiProgressbar::onDraw(sp::RenderTarget& renderer) } else { + if (drawBackground) + { + fill_rect.position.x += fill_rect.size.x * 0.125f; + fill_rect.size.x *= 0.75f; + } fill_rect.size.y *= f; fill_rect.position.y = rect.position.y + rect.size.y - fill_rect.size.y; renderer.drawStretchedHVClipped(rect, fill_rect, front.size, front.texture, color); diff --git a/src/gui/gui2_progressslider.cpp b/src/gui/gui2_progressslider.cpp index fc85155b14..a5b09ee649 100644 --- a/src/gui/gui2_progressslider.cpp +++ b/src/gui/gui2_progressslider.cpp @@ -1,7 +1,6 @@ #include "gui2_progressslider.h" #include "theme.h" - GuiProgressSlider::GuiProgressSlider(GuiContainer* owner, string id, float min_value, float max_value, float start_value, func_t func) : GuiProgressbar(owner, id, min_value, max_value, start_value), callback(func) { @@ -20,19 +19,14 @@ void GuiProgressSlider::onMouseDrag(glm::vec2 position, sp::io::Pointer::ID id) new_value = (position.x - rect.position.x) / (rect.size.x); else new_value = (position.y - rect.position.y) / (rect.size.y); + new_value = min_value + (max_value - min_value) * new_value; + if (min_value < max_value) - { - if (new_value < min_value) - new_value = min_value; - if (new_value > max_value) - new_value = max_value; - }else{ - if (new_value > min_value) - new_value = min_value; - if (new_value < max_value) - new_value = max_value; - } + new_value = std::clamp(new_value, min_value, max_value); + else + new_value = std::clamp(new_value, max_value, min_value); + if (value != new_value) { value = new_value; diff --git a/src/gui/gui2_slider.cpp b/src/gui/gui2_slider.cpp index 2f41247bec..7926eee3b1 100644 --- a/src/gui/gui2_slider.cpp +++ b/src/gui/gui2_slider.cpp @@ -77,17 +77,10 @@ void GuiBasicSlider::onMouseUp(glm::vec2 position, sp::io::Pointer::ID id) GuiBasicSlider* GuiBasicSlider::setValue(float value) { if (min_value < max_value) - { - if (value < min_value) - value = min_value; - if (value > max_value) - value = max_value; - }else{ - if (value > min_value) - value = min_value; - if (value < max_value) - value = max_value; - } + this->value = std::clamp(value, min_value, max_value); + else + this->value = std::clamp(value, max_value, min_value); + this->value = value; return this; }