From 255872d012b779708b26dfd732ded369d1de28fa Mon Sep 17 00:00:00 2001 From: hyvvs Date: Wed, 4 Nov 2026 04:26:05 +0100 Subject: [PATCH] fix(libcairo): report native subsurface type --- core/libs/prx/libcairo/Surface.cpp | 6 ++++-- core/libs/tests/GuestCairoSurface.cpp | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/core/libs/prx/libcairo/Surface.cpp b/core/libs/prx/libcairo/Surface.cpp index 5700249c1f..2e3dd3e2be 100644 --- a/core/libs/prx/libcairo/Surface.cpp +++ b/core/libs/prx/libcairo/Surface.cpp @@ -19,6 +19,7 @@ constexpr int kColor = 0x1000; constexpr int kAlpha = 0x2000; constexpr int kColorAlpha = 0x3000; constexpr int kImageSurfaceType = 0; +constexpr int kSubsurfaceType = 23; constexpr int kInvalidFormatValue = -1; int BitsPerPixel(int format) { @@ -231,8 +232,9 @@ int APS5_VABI cairo_surface_status(CairoSurface* surface) { return surface ? State(surface)->status : kNullPointer; } -int APS5_VABI cairo_surface_get_type(CairoSurface*) { - return kImageSurfaceType; +int APS5_VABI cairo_surface_get_type(CairoSurface* surface) { + return surface && State(surface)->status == kSuccess && !State(surface)->isImage + ? kSubsurfaceType : kImageSurfaceType; } int APS5_VABI cairo_surface_get_content(CairoSurface* surface) { diff --git a/core/libs/tests/GuestCairoSurface.cpp b/core/libs/tests/GuestCairoSurface.cpp index cae240d087..ec9d1082c7 100644 --- a/core/libs/tests/GuestCairoSurface.cpp +++ b/core/libs/tests/GuestCairoSurface.cpp @@ -185,7 +185,7 @@ void CheckSimilarAndSubsurfaces() { } CairoSurface* subsection = cairo_surface_create_for_rectangle(parent, 1.5, 2.5, 3.5, 4.5); assert(subsection && cairo_surface_status(subsection) == 0); - assert(cairo_surface_get_type(subsection) == 0); + assert(cairo_surface_get_type(subsection) == 23); assert(cairo_surface_get_content(subsection) == 0x3000); assert(cairo_image_surface_get_format(subsection) == -1); assert(cairo_image_surface_get_data(subsection) == nullptr);