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
This commit is contained in:
Torstennator 2023-01-22 19:15:50 +01:00 committed by Sam Atkins
parent 95c469ca4c
commit e7ceaf8a6d
Notes: sideshowbarker 2024-07-17 04:09:56 +09:00
2 changed files with 31 additions and 0 deletions

View file

@ -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);

View file

@ -129,9 +129,36 @@ public:
Point<T> const& a() const { return m_a; }
Point<T> const& b() const { return m_b; }
Line<T> rotated(float radians)
{
Gfx::AffineTransform rotation_transform;
rotation_transform.rotate_radians(radians);
Line<T> line = *this;
line.set_a(line.a().transformed(rotation_transform));
line.set_b(line.b().transformed(rotation_transform));
return line;
}
void set_a(Point<T> const& a) { m_a = a; }
void set_b(Point<T> const& b) { m_b = b; }
Line<T> scaled(T sx, T sy) const
{
Line<T> line = *this;
line.set_a(line.a().scaled(sx, sy));
line.set_b(line.b().scaled(sx, sy));
return line;
}
Line<T> translated(Point<T> const& delta) const
{
Line<T> line = *this;
line.set_a(line.a().translated(delta));
line.set_b(line.b().translated(delta));
return line;
}
template<typename U>
requires(!IsSame<T, U>)
[[nodiscard]] ALWAYS_INLINE constexpr Line<U> to_type() const