summaryrefslogtreecommitdiffstats
path: root/gfx/cairo/23-win32-api-additions.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/cairo/23-win32-api-additions.patch')
-rw-r--r--gfx/cairo/23-win32-api-additions.patch101
1 files changed, 101 insertions, 0 deletions
diff --git a/gfx/cairo/23-win32-api-additions.patch b/gfx/cairo/23-win32-api-additions.patch
new file mode 100644
index 0000000000..65b1a90dea
--- /dev/null
+++ b/gfx/cairo/23-win32-api-additions.patch
@@ -0,0 +1,101 @@
+# HG changeset patch
+# User Jonathan Kew <jkew@mozilla.com>
+# Date 1714049062 -3600
+# Thu Apr 25 13:44:22 2024 +0100
+# Node ID cae7821ff41ed99081818f5434a347d224833f70
+# Parent 8f09f0d54c643029b7601dc58f3a8ff125eca699
+Bug 1892913 - patch 21 - Add cairo_win32_surface APIs wanted for gecko.
+
+diff --git a/gfx/cairo/cairo/src/cairo-win32.h b/gfx/cairo/cairo/src/cairo-win32.h
+--- a/gfx/cairo/cairo/src/cairo-win32.h
++++ b/gfx/cairo/cairo/src/cairo-win32.h
+@@ -72,6 +72,14 @@ cairo_win32_surface_get_dc (cairo_surfac
+ cairo_public cairo_surface_t *
+ cairo_win32_surface_get_image (cairo_surface_t *surface);
+
++cairo_public HDC
++cairo_win32_get_dc_with_clip(cairo_t* cr);
++
++cairo_public cairo_status_t
++cairo_win32_surface_get_size(const cairo_surface_t* surface,
++ int* width,
++ int* height);
++
+ #if CAIRO_HAS_WIN32_FONT
+
+ /*
+diff --git a/gfx/cairo/cairo/src/win32/cairo-win32-surface.c b/gfx/cairo/cairo/src/win32/cairo-win32-surface.c
+--- a/gfx/cairo/cairo/src/win32/cairo-win32-surface.c
++++ b/gfx/cairo/cairo/src/win32/cairo-win32-surface.c
+@@ -163,6 +163,52 @@ cairo_win32_surface_get_dc (cairo_surfac
+ }
+
+ /**
++ * cairo_win32_get_dc_with_clip:
++ * (Mozilla addition)
++ */
++HDC
++cairo_win32_get_dc_with_clip(cairo_t* cr)
++{
++ cairo_surface_t* surface = cairo_get_target(cr);
++ if (cr->backend->type == CAIRO_TYPE_DEFAULT) {
++ cairo_default_context_t* c = (cairo_default_context_t*)cr;
++ cairo_clip_t* clip = _cairo_clip_copy(_cairo_gstate_get_clip(c->gstate));
++ if (_cairo_surface_is_win32(surface)) {
++ cairo_win32_display_surface_t* winsurf = (cairo_win32_display_surface_t*)surface;
++
++ _cairo_win32_display_surface_set_clip(winsurf, clip);
++
++ _cairo_clip_destroy(clip);
++ return winsurf->win32.dc;
++ }
++
++ if (_cairo_surface_is_paginated(surface)) {
++ cairo_surface_t* target;
++
++ target = _cairo_paginated_surface_get_target(surface);
++
++#ifndef CAIRO_OMIT_WIN32_PRINTING
++ if (_cairo_surface_is_win32_printing(target)) {
++ cairo_status_t status;
++ cairo_win32_printing_surface_t* psurf = (cairo_win32_printing_surface_t*)target;
++
++ status = _cairo_surface_clipper_set_clip(&psurf->clipper, clip);
++
++ _cairo_clip_destroy(clip);
++
++ if (status)
++ return NULL;
++
++ return psurf->win32.dc;
++ }
++#endif
++ }
++ _cairo_clip_destroy(clip);
++ }
++ return NULL;
++}
++
++/**
+ * _cairo_surface_is_win32:
+ * @surface: a #cairo_surface_t
+ *
+@@ -337,3 +383,17 @@ cairo_int_status_t
+ #endif
+ }
+ #undef STACK_GLYPH_SIZE
++
++cairo_status_t
++cairo_win32_surface_get_size(const cairo_surface_t* surface, int* width, int* height)
++{
++ if (!_cairo_surface_is_win32(surface))
++ return CAIRO_STATUS_SURFACE_TYPE_MISMATCH;
++
++ const cairo_win32_surface_t* winsurface = (const cairo_win32_surface_t*)surface;
++
++ *width = winsurface->extents.width;
++ *height = winsurface->extents.height;
++
++ return CAIRO_STATUS_SUCCESS;
++}
+\ No newline at end of file