From e7ceaf8a6dd4d84bc4f26e768394ed18e893517c Mon Sep 17 00:00:00 2001 From: Torstennator Date: Sun, 22 Jan 2023 19:15:50 +0100 Subject: [PATCH] LibGfx: Add small convenience functions for Lines and AA Painter This patch adds the following some convenience functions: - Lines do now support rotated(), scaled() and translated() - AntiAliasingPainter has now a draw_line function that takes a FloatLine as argument --- .../Libraries/LibGfx/AntiAliasingPainter.h | 4 +++ Userland/Libraries/LibGfx/Line.h | 27 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/Userland/Libraries/LibGfx/AntiAliasingPainter.h b/Userland/Libraries/LibGfx/AntiAliasingPainter.h index f12988f8b6..ca33f0397c 100644 --- a/Userland/Libraries/LibGfx/AntiAliasingPainter.h +++ b/Userland/Libraries/LibGfx/AntiAliasingPainter.h @@ -28,6 +28,10 @@ public: void draw_line(IntPoint, IntPoint, Color, float thickness = 1, Painter::LineStyle style = Painter::LineStyle::Solid, Color alternate_color = Color::Transparent, LineLengthMode line_length_mode = LineLengthMode::PointToPoint); void draw_line(FloatPoint, FloatPoint, Color, float thickness = 1, Painter::LineStyle style = Painter::LineStyle::Solid, Color alternate_color = Color::Transparent, LineLengthMode line_length_mode = LineLengthMode::PointToPoint); + void draw_line(FloatLine line, Color color, float thickness = 1, Painter::LineStyle style = Painter::LineStyle::Solid, Color alternate_color = Color::Transparent, LineLengthMode line_length_mode = LineLengthMode::PointToPoint) + { + draw_line(line.a(), line.b(), color, thickness, style, alternate_color, line_length_mode); + } void draw_line_for_path(FloatPoint, FloatPoint, Color, float thickness = 1, Painter::LineStyle style = Painter::LineStyle::Solid, Color alternate_color = Color::Transparent, LineLengthMode line_length_mode = LineLengthMode::PointToPoint); void fill_path(Path const&, Color, Painter::WindingRule rule = Painter::WindingRule::Nonzero); diff --git a/Userland/Libraries/LibGfx/Line.h b/Userland/Libraries/LibGfx/Line.h index 867428317f..d660bde19b 100644 --- a/Userland/Libraries/LibGfx/Line.h +++ b/Userland/Libraries/LibGfx/Line.h @@ -129,9 +129,36 @@ public: Point const& a() const { return m_a; } Point const& b() const { return m_b; } + Line rotated(float radians) + { + Gfx::AffineTransform rotation_transform; + rotation_transform.rotate_radians(radians); + + Line line = *this; + line.set_a(line.a().transformed(rotation_transform)); + line.set_b(line.b().transformed(rotation_transform)); + return line; + } + void set_a(Point const& a) { m_a = a; } void set_b(Point const& b) { m_b = b; } + Line scaled(T sx, T sy) const + { + Line line = *this; + line.set_a(line.a().scaled(sx, sy)); + line.set_b(line.b().scaled(sx, sy)); + return line; + } + + Line translated(Point const& delta) const + { + Line line = *this; + line.set_a(line.a().translated(delta)); + line.set_b(line.b().translated(delta)); + return line; + } + template requires(!IsSame) [[nodiscard]] ALWAYS_INLINE constexpr Line to_type() const