summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibGfx/AntiAliasingPainter.h
diff options
context:
space:
mode:
authorAli Mohammad Pur <ali.mpfard@gmail.com>2021-09-17 12:01:48 +0430
committerAli Mohammad Pur <Ali.mpfard@gmail.com>2021-09-18 02:12:38 +0430
commite2cd5581018601c0efd248e764dfd8546be70d60 (patch)
treef9dcbba2fb9793612db24115776666ae3201d0b2 /Userland/Libraries/LibGfx/AntiAliasingPainter.h
parentf4ea235a3388f0ae71b65aac000da55d0bb5e08b (diff)
downloadserenity-e2cd5581018601c0efd248e764dfd8546be70d60.zip
LibGfx: Start a very basic anti-aliased Painter implementation
This can currently draw AA lines (and by proxy, AA paths), and passes all its output through a 2D affine transform to an underlying Gfx::Painter.
Diffstat (limited to 'Userland/Libraries/LibGfx/AntiAliasingPainter.h')
-rw-r--r--Userland/Libraries/LibGfx/AntiAliasingPainter.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/Userland/Libraries/LibGfx/AntiAliasingPainter.h b/Userland/Libraries/LibGfx/AntiAliasingPainter.h
new file mode 100644
index 0000000000..68b504b507
--- /dev/null
+++ b/Userland/Libraries/LibGfx/AntiAliasingPainter.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2021, Ali Mohammad Pur <mpfard@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <LibGfx/Painter.h>
+
+namespace Gfx {
+
+class AntiAliasingPainter {
+public:
+ explicit AntiAliasingPainter(Painter& painter)
+ : m_underlying_painter(painter)
+ {
+ }
+
+ void draw_line(FloatPoint const&, FloatPoint const&, Color, float thickness = 1, Painter::LineStyle style = Painter::LineStyle::Solid, Color alternate_color = Color::Transparent);
+ void fill_path(Path&, Color, Painter::WindingRule rule = Painter::WindingRule::Nonzero);
+ void stroke_path(Path const&, Color, float thickness);
+ void draw_quadratic_bezier_curve(FloatPoint const& control_point, FloatPoint const&, FloatPoint const&, Color, float thickness = 1, Painter::LineStyle style = Painter::LineStyle::Solid);
+ void draw_elliptical_arc(FloatPoint const& p1, FloatPoint const& p2, FloatPoint const& center, FloatPoint const& radii, float x_axis_rotation, float theta_1, float theta_delta, Color, float thickness = 1, Painter::LineStyle style = Painter::LineStyle::Solid);
+
+ void translate(float dx, float dy) { m_transform.translate(dx, dy); }
+ void translate(FloatPoint const& delta) { m_transform.translate(delta); }
+
+private:
+ Painter& m_underlying_painter;
+ AffineTransform m_transform;
+};
+
+}