diff options
Diffstat (limited to 'gfx/cairo/win32-transparent-surface.patch')
-rw-r--r-- | gfx/cairo/win32-transparent-surface.patch | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/gfx/cairo/win32-transparent-surface.patch b/gfx/cairo/win32-transparent-surface.patch new file mode 100644 index 000000000..c8765cf28 --- /dev/null +++ b/gfx/cairo/win32-transparent-surface.patch @@ -0,0 +1,129 @@ +diff --git a/gfx/cairo/cairo/src/cairo-win32-surface.c b/gfx/cairo/cairo/src/cairo-win32-surface.c +--- a/gfx/cairo/cairo/src/cairo-win32-surface.c ++++ b/gfx/cairo/cairo/src/cairo-win32-surface.c +@@ -1709,40 +1709,23 @@ _cairo_win32_surface_show_glyphs (void + } + #else + return CAIRO_INT_STATUS_UNSUPPORTED; + #endif + } + + #undef STACK_GLYPH_SIZE + +-/** +- * cairo_win32_surface_create: +- * @hdc: the DC to create a surface for +- * +- * Creates a cairo surface that targets the given DC. The DC will be +- * queried for its initial clip extents, and this will be used as the +- * size of the cairo surface. The resulting surface will always be of +- * format %CAIRO_FORMAT_RGB24; should you need another surface format, +- * you will need to create one through +- * cairo_win32_surface_create_with_dib(). +- * +- * Return value: the newly created surface +- **/ +-cairo_surface_t * +-cairo_win32_surface_create (HDC hdc) ++static cairo_surface_t * ++cairo_win32_surface_create_internal (HDC hdc, cairo_format_t format) + { + cairo_win32_surface_t *surface; + +- cairo_format_t format; + RECT rect; + +- /* Assume that everything coming in as a HDC is RGB24 */ +- format = CAIRO_FORMAT_RGB24; +- + surface = malloc (sizeof (cairo_win32_surface_t)); + if (surface == NULL) + return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); + + if (_cairo_win32_save_initial_clip (hdc, surface) != CAIRO_STATUS_SUCCESS) { + free (surface); + return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); + } +@@ -1765,17 +1748,58 @@ cairo_win32_surface_create (HDC hdc) + surface->extents.width = rect.right - rect.left; + surface->extents.height = rect.bottom - rect.top; + + surface->flags = _cairo_win32_flags_for_dc (surface->dc); + + _cairo_surface_init (&surface->base, &cairo_win32_surface_backend, + _cairo_content_from_format (format)); + +- return (cairo_surface_t *)surface; ++ return &surface->base; ++} ++ ++/** ++ * cairo_win32_surface_create: ++ * @hdc: the DC to create a surface for ++ * ++ * Creates a cairo surface that targets the given DC. The DC will be ++ * queried for its initial clip extents, and this will be used as the ++ * size of the cairo surface. The resulting surface will always be of ++ * format %CAIRO_FORMAT_RGB24; should you need another surface format, ++ * you will need to create one through ++ * cairo_win32_surface_create_with_dib() or call ++ * cairo_win32_surface_create_with_alpha. ++ * ++ * Return value: the newly created surface ++ **/ ++cairo_surface_t * ++cairo_win32_surface_create (HDC hdc) ++{ ++ /* Assume everything comes in as RGB24 */ ++ return cairo_win32_surface_create_internal(hdc, CAIRO_FORMAT_RGB24); ++} ++ ++/** ++ * cairo_win32_surface_create_with_alpha: ++ * @hdc: the DC to create a surface for ++ * ++ * Creates a cairo surface that targets the given DC. The DC will be ++ * queried for its initial clip extents, and this will be used as the ++ * size of the cairo surface. The resulting surface will always be of ++ * format %CAIRO_FORMAT_ARGB32; this format is used when drawing into ++ * transparent windows. ++ * ++ * Return value: the newly created surface ++ * ++ * Since: 1.10 ++ **/ ++cairo_surface_t * ++cairo_win32_surface_create_with_alpha (HDC hdc) ++{ ++ return cairo_win32_surface_create_internal(hdc, CAIRO_FORMAT_ARGB32); + } + + /** + * cairo_win32_surface_create_with_dib: + * @format: format of pixels in the surface to create + * @width: width of the surface, in pixels + * @height: height of the surface, in pixels + * +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 +@@ -44,16 +44,19 @@ + #include <windows.h> + + CAIRO_BEGIN_DECLS + + cairo_public cairo_surface_t * + cairo_win32_surface_create (HDC hdc); + + cairo_public cairo_surface_t * ++cairo_win32_surface_create_with_alpha (HDC hdc); ++ ++cairo_public cairo_surface_t * + cairo_win32_printing_surface_create (HDC hdc); + + cairo_public cairo_surface_t * + cairo_win32_surface_create_with_ddb (HDC hdc, + cairo_format_t format, + int width, + int height); + |