From 1e5e914f40503d2a936d1b7db56fcff6d1f8514e Mon Sep 17 00:00:00 2001 From: crupest Date: Wed, 8 Jun 2022 16:43:16 +0800 Subject: ... --- src/platform/graphics/cairo/CairoPainter.cpp | 37 ++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/platform/graphics/cairo/CairoPainter.cpp (limited to 'src/platform/graphics/cairo/CairoPainter.cpp') diff --git a/src/platform/graphics/cairo/CairoPainter.cpp b/src/platform/graphics/cairo/CairoPainter.cpp new file mode 100644 index 00000000..c899fc28 --- /dev/null +++ b/src/platform/graphics/cairo/CairoPainter.cpp @@ -0,0 +1,37 @@ +#include "cru/platform/graphics/cairo/CairoPainter.h" +#include "cru/platform/graphics/cairo/Base.h" +#include "cru/platform/graphics/cairo/CairoResource.h" + +namespace cru::platform::graphics::cairo { +CairoPainter::CairoPainter(CairoGraphicsFactory* factory, cairo_t* cairo, + bool auto_release) + : CairoResource(factory), cairo_(cairo), auto_release_(auto_release) {} + +CairoPainter::~CairoPainter() { + if (auto_release_) { + cairo_destroy(cairo_); + } +} + +Matrix CairoPainter::GetTransform() { + cairo_matrix_t matrix; + cairo_get_matrix(cairo_, &matrix); + return Convert(matrix); +} + +void CairoPainter::SetTransform(const Matrix& matrix) { + auto m = Convert(matrix); + cairo_set_matrix(cairo_, &m); +} + +void CairoPainter::ConcatTransform(const Matrix& matrix) { + auto m = Convert(matrix); + cairo_transform(cairo_, &m); +} + +void CairoPainter::Clear(const Color& color) { + cairo_set_source_rgba(cairo_, color.GetFloatRed(), color.GetFloatGreen(), + color.GetFloatBlue(), color.GetFloatAlpha()); + cairo_paint(cairo_); +} +} // namespace cru::platform::graphics::cairo -- cgit v1.2.3