diff options
-rw-r--r-- | include/cru/platform/graphics/cairo/CairoPainter.h | 6 | ||||
-rw-r--r-- | src/platform/graphics/cairo/CairoImage.cpp | 3 | ||||
-rw-r--r-- | src/platform/graphics/cairo/CairoPainter.cpp | 14 |
3 files changed, 17 insertions, 6 deletions
diff --git a/include/cru/platform/graphics/cairo/CairoPainter.h b/include/cru/platform/graphics/cairo/CairoPainter.h index 83f0329b..477bd289 100644 --- a/include/cru/platform/graphics/cairo/CairoPainter.h +++ b/include/cru/platform/graphics/cairo/CairoPainter.h @@ -8,8 +8,8 @@ namespace cru::platform::graphics::cairo { class CRU_PLATFORM_GRAPHICS_CAIRO_API CairoPainter : public CairoResource, public virtual IPainter { public: - CairoPainter(CairoGraphicsFactory* factory, cairo_t* cairo, - bool auto_release); + CairoPainter(CairoGraphicsFactory* factory, cairo_t* cairo, bool auto_release, + cairo_surface_t* cairo_surface = nullptr); ~CairoPainter(); public: @@ -53,6 +53,8 @@ class CRU_PLATFORM_GRAPHICS_CAIRO_API CairoPainter : public CairoResource, cairo_t* cairo_; bool auto_release_; + cairo_surface_t* cairo_surface_; + std::vector<Rect> layer_stack_; }; } // namespace cru::platform::graphics::cairo diff --git a/src/platform/graphics/cairo/CairoImage.cpp b/src/platform/graphics/cairo/CairoImage.cpp index 30e1016f..55b1c4d0 100644 --- a/src/platform/graphics/cairo/CairoImage.cpp +++ b/src/platform/graphics/cairo/CairoImage.cpp @@ -46,7 +46,8 @@ std::unique_ptr<IImage> CairoImage::CreateWithRect(const Rect& rect) { std::unique_ptr<IPainter> CairoImage::CreatePainter() { auto cairo = cairo_create(cairo_surface_); - return std::make_unique<CairoPainter>(GetCairoGraphicsFactory(), cairo, true); + return std::make_unique<CairoPainter>(GetCairoGraphicsFactory(), cairo, true, + cairo_surface_); } } // namespace cru::platform::graphics::cairo diff --git a/src/platform/graphics/cairo/CairoPainter.cpp b/src/platform/graphics/cairo/CairoPainter.cpp index fb5e0046..00c8187c 100644 --- a/src/platform/graphics/cairo/CairoPainter.cpp +++ b/src/platform/graphics/cairo/CairoPainter.cpp @@ -13,8 +13,11 @@ namespace cru::platform::graphics::cairo { CairoPainter::CairoPainter(CairoGraphicsFactory* factory, cairo_t* cairo, - bool auto_release) - : CairoResource(factory), cairo_(cairo), auto_release_(auto_release) {} + bool auto_release, cairo_surface_t* cairo_surface) + : CairoResource(factory), + cairo_(cairo), + auto_release_(auto_release), + cairo_surface_(cairo_surface) {} CairoPainter::~CairoPainter() { if (auto_release_) { @@ -230,7 +233,12 @@ void CairoPainter::PopState() { cairo_restore(cairo_); } -void CairoPainter::EndDraw() { valid_ = false; } +void CairoPainter::EndDraw() { + if (cairo_surface_ != nullptr) { + cairo_surface_flush(cairo_surface_); + } + valid_ = false; +} void CairoPainter::CheckValidation() { if (!valid_) { |