aboutsummaryrefslogtreecommitdiff
path: root/src/platform/graphics
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-06-08 16:43:16 +0800
committercrupest <crupest@outlook.com>2022-06-08 16:43:16 +0800
commit1e5e914f40503d2a936d1b7db56fcff6d1f8514e (patch)
tree8f3b8adbc5c8e47407d0cb17b10cb2f9624b5418 /src/platform/graphics
parent6795641779916e39e999ea28b51e159a9fade685 (diff)
downloadcru-1e5e914f40503d2a936d1b7db56fcff6d1f8514e.tar.gz
cru-1e5e914f40503d2a936d1b7db56fcff6d1f8514e.tar.bz2
cru-1e5e914f40503d2a936d1b7db56fcff6d1f8514e.zip
...
Diffstat (limited to 'src/platform/graphics')
-rw-r--r--src/platform/graphics/cairo/CMakeLists.txt1
-rw-r--r--src/platform/graphics/cairo/CairoPainter.cpp37
2 files changed, 38 insertions, 0 deletions
diff --git a/src/platform/graphics/cairo/CMakeLists.txt b/src/platform/graphics/cairo/CMakeLists.txt
index 606b0075..c1a2a4b5 100644
--- a/src/platform/graphics/cairo/CMakeLists.txt
+++ b/src/platform/graphics/cairo/CMakeLists.txt
@@ -16,6 +16,7 @@ if (UNIX)
CairoBrush.cpp
CairoGeometry.cpp
CairoGraphicsFactory.cpp
+ CairoPainter.cpp
CairoResource.cpp
PangoFont.cpp
PangoTextLayout.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