aboutsummaryrefslogtreecommitdiff
path: root/src/platform/graphics/cairo/CairoPainter.cpp
blob: c899fc2832b879461ac2544d3d79d48e88d6c65f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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