mirror of
https://github.com/orange-cpp/omath.git
synced 2026-04-19 03:03:27 +00:00
added progress ring
This commit is contained in:
@@ -118,6 +118,22 @@ namespace omath::hud
|
||||
std::string_view{std::vformat(fmt.get(), std::make_format_args(args...))});
|
||||
}
|
||||
|
||||
// ── Spacers ─────────────────────────────────────────────────────
|
||||
EntityOverlay& add_right_spacer(float size);
|
||||
EntityOverlay& add_left_spacer(float size);
|
||||
EntityOverlay& add_top_spacer(float size);
|
||||
EntityOverlay& add_bottom_spacer(float size);
|
||||
|
||||
// ── Progress rings ──────────────────────────────────────────────
|
||||
EntityOverlay& add_right_progress_ring(const Color& color, const Color& bg, float radius, float ratio,
|
||||
float thickness = 2.f, float offset = 5.f, int segments = 0);
|
||||
EntityOverlay& add_left_progress_ring(const Color& color, const Color& bg, float radius, float ratio,
|
||||
float thickness = 2.f, float offset = 5.f, int segments = 0);
|
||||
EntityOverlay& add_top_progress_ring(const Color& color, const Color& bg, float radius, float ratio,
|
||||
float thickness = 2.f, float offset = 5.f, int segments = 0);
|
||||
EntityOverlay& add_bottom_progress_ring(const Color& color, const Color& bg, float radius, float ratio,
|
||||
float thickness = 2.f, float offset = 5.f, int segments = 0);
|
||||
|
||||
// ── Misc ─────────────────────────────────────────────────────────
|
||||
EntityOverlay& add_snap_line(const Vector2<float>& start_pos, const Color& color, float width);
|
||||
|
||||
@@ -151,6 +167,7 @@ namespace omath::hud
|
||||
void dispatch(const widget::BottomSide& bottom_side);
|
||||
void dispatch(const widget::Skeleton& skeleton);
|
||||
void dispatch(const widget::SnapLine& snap_line);
|
||||
void draw_progress_ring(const Vector2<float>& center, const widget::ProgressRing& ring);
|
||||
void draw_outlined_text(const Vector2<float>& position, const Color& color, const std::string_view& text);
|
||||
void draw_dashed_line(const Vector2<float>& from, const Vector2<float>& to, const Color& color, float dash_len,
|
||||
float gap_len, float thickness) const;
|
||||
|
||||
@@ -105,11 +105,22 @@ namespace omath::hud::widget
|
||||
float size;
|
||||
};
|
||||
|
||||
struct ProgressRing
|
||||
{
|
||||
Color color;
|
||||
Color bg{0.3f, 0.3f, 0.3f, 0.5f};
|
||||
float radius = 12.f;
|
||||
float ratio;
|
||||
float thickness = 2.f;
|
||||
float offset = 5.f;
|
||||
int segments = 32;
|
||||
};
|
||||
|
||||
// ── Side widget variant ───────────────────────────────────────────────────
|
||||
struct None
|
||||
{
|
||||
}; ///< No-op placeholder — used by widget::when for disabled elements.
|
||||
using SideWidget = std::variant<None, Bar, DashedBar, Label, Centered<Label>, Spacer>;
|
||||
using SideWidget = std::variant<None, Bar, DashedBar, Label, Centered<Label>, Spacer, ProgressRing>;
|
||||
|
||||
// ── Side containers ───────────────────────────────────────────────────────
|
||||
// Storing std::initializer_list<SideWidget> is safe here: the backing array
|
||||
|
||||
@@ -24,6 +24,16 @@ namespace omath::hud
|
||||
|
||||
virtual void add_filled_rectangle(const Vector2<float>& min, const Vector2<float>& max, const Color& color) = 0;
|
||||
|
||||
virtual void add_circle(const Vector2<float>& center, float radius, const Color& color, float thickness,
|
||||
int segments = 0) = 0;
|
||||
|
||||
virtual void add_filled_circle(const Vector2<float>& center, float radius, const Color& color,
|
||||
int segments = 0) = 0;
|
||||
|
||||
/// Draw an arc (partial circle outline). Angles in radians, 0 = right (+X), counter-clockwise.
|
||||
virtual void add_arc(const Vector2<float>& center, float radius, float a_min, float a_max, const Color& color,
|
||||
float thickness, int segments = 0) = 0;
|
||||
|
||||
virtual void add_text(const Vector2<float>& position, const Color& color, const std::string_view& text) = 0;
|
||||
|
||||
[[nodiscard]]
|
||||
|
||||
@@ -17,6 +17,12 @@ namespace omath::hud
|
||||
void add_filled_polyline(const std::span<const Vector2<float>>& vertexes, const Color& color) override;
|
||||
void add_rectangle(const Vector2<float>& min, const Vector2<float>& max, const Color& color) override;
|
||||
void add_filled_rectangle(const Vector2<float>& min, const Vector2<float>& max, const Color& color) override;
|
||||
void add_circle(const Vector2<float>& center, float radius, const Color& color, float thickness,
|
||||
int segments = 0) override;
|
||||
void add_filled_circle(const Vector2<float>& center, float radius, const Color& color,
|
||||
int segments = 0) override;
|
||||
void add_arc(const Vector2<float>& center, float radius, float a_min, float a_max, const Color& color,
|
||||
float thickness, int segments = 0) override;
|
||||
void add_text(const Vector2<float>& position, const Color& color, const std::string_view& text) override;
|
||||
[[nodiscard]]
|
||||
virtual Vector2<float> calc_text_size(const std::string_view& text) override;
|
||||
|
||||
Reference in New Issue
Block a user