mirror of
https://github.com/orange-cpp/omath.git
synced 2026-08-08 05:52:07 +00:00
improved bars
This commit is contained in:
@@ -41,19 +41,19 @@ namespace omath::hud
|
||||
float thickness = 1.f);
|
||||
|
||||
// ── Bars ─────────────────────────────────────────────────────────
|
||||
EntityOverlay& add_right_bar(const widget::Paint& color, const Color& outline_color, const Color& bg_color,
|
||||
EntityOverlay& add_right_bar(const widget::BarPaint& color, const Color& outline_color, const Color& bg_color,
|
||||
float width, float ratio, float offset = 5.f,
|
||||
const std::optional<widget::Glow>& glow = std::nullopt);
|
||||
|
||||
EntityOverlay& add_left_bar(const widget::Paint& color, const Color& outline_color, const Color& bg_color,
|
||||
EntityOverlay& add_left_bar(const widget::BarPaint& color, const Color& outline_color, const Color& bg_color,
|
||||
float width, float ratio, float offset = 5.f,
|
||||
const std::optional<widget::Glow>& glow = std::nullopt);
|
||||
|
||||
EntityOverlay& add_top_bar(const widget::Paint& color, const Color& outline_color, const Color& bg_color,
|
||||
EntityOverlay& add_top_bar(const widget::BarPaint& color, const Color& outline_color, const Color& bg_color,
|
||||
float height, float ratio, float offset = 5.f,
|
||||
const std::optional<widget::Glow>& glow = std::nullopt);
|
||||
|
||||
EntityOverlay& add_bottom_bar(const widget::Paint& color, const Color& outline_color, const Color& bg_color,
|
||||
EntityOverlay& add_bottom_bar(const widget::BarPaint& color, const Color& outline_color, const Color& bg_color,
|
||||
float height, float ratio, float offset = 5.f,
|
||||
const std::optional<widget::Glow>& glow = std::nullopt);
|
||||
|
||||
@@ -272,6 +272,8 @@ namespace omath::hud
|
||||
void draw_canvas_glow(const widget::CanvasGlow& canvas_glow) const;
|
||||
void draw_filled_rectangle(const Vector2<float>& min, const Vector2<float>& max,
|
||||
const widget::Paint& paint) const;
|
||||
[[nodiscard]]
|
||||
static widget::Paint resolve_bar_paint(const widget::BarPaint& paint, float ratio, bool vertical);
|
||||
void draw_dashed_line(const Vector2<float>& from, const Vector2<float>& to, const Color& color, float dash_len,
|
||||
float gap_len, float thickness) const;
|
||||
void draw_dashed_fill(const Vector2<float>& origin, const Vector2<float>& step_dir,
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <initializer_list>
|
||||
#include <optional>
|
||||
#include <string_view>
|
||||
#include <type_traits>
|
||||
#include <variant>
|
||||
|
||||
namespace omath::hud::widget
|
||||
@@ -23,6 +24,32 @@ namespace omath::hud::widget
|
||||
}
|
||||
};
|
||||
|
||||
struct BarGradient
|
||||
{
|
||||
Color empty_color;
|
||||
Color full_color;
|
||||
};
|
||||
|
||||
struct BarPaint : std::variant<Color, Gradient, BarGradient>
|
||||
{
|
||||
using std::variant<Color, Gradient, BarGradient>::variant;
|
||||
|
||||
constexpr BarPaint(const float red, const float green, const float blue, const float alpha)
|
||||
: std::variant<Color, Gradient, BarGradient>(Color{red, green, blue, alpha})
|
||||
{
|
||||
}
|
||||
|
||||
BarPaint(const Paint& paint)
|
||||
{
|
||||
std::visit(
|
||||
[this](const auto& value)
|
||||
{
|
||||
this->template emplace<std::decay_t<decltype(value)>>(value);
|
||||
},
|
||||
paint);
|
||||
}
|
||||
};
|
||||
|
||||
// ── Overloaded helper for std::visit ──────────────────────────────────────
|
||||
template<typename... Ts>
|
||||
struct Overloaded : Ts...
|
||||
@@ -124,7 +151,7 @@ namespace omath::hud::widget
|
||||
/// A filled bar. `size` is width for left/right sides, height for top/bottom.
|
||||
struct Bar
|
||||
{
|
||||
Paint color;
|
||||
BarPaint color;
|
||||
Color outline;
|
||||
Color bg;
|
||||
float size;
|
||||
|
||||
Reference in New Issue
Block a user