diff options
Diffstat (limited to 'src/platform')
-rw-r--r-- | src/platform/graphics/cairo/CairoImage.cpp | 3 | ||||
-rw-r--r-- | src/platform/graphics/cairo/CairoPainter.cpp | 14 |
2 files changed, 13 insertions, 4 deletions
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_) { |