diff options
author | Ali Mohammad Pur <ali.mpfard@gmail.com> | 2021-09-17 12:01:48 +0430 |
---|---|---|
committer | Ali Mohammad Pur <Ali.mpfard@gmail.com> | 2021-09-18 02:12:38 +0430 |
commit | e2cd5581018601c0efd248e764dfd8546be70d60 (patch) | |
tree | f9dcbba2fb9793612db24115776666ae3201d0b2 /Userland/Libraries/LibGfx/AntiAliasingPainter.h | |
parent | f4ea235a3388f0ae71b65aac000da55d0bb5e08b (diff) | |
download | serenity-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.h | 34 |
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; +}; + +} |