зеркало из https://github.com/mozilla/gecko-dev.git
130 строки
4.2 KiB
Diff
130 строки
4.2 KiB
Diff
|
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);
|
||
|
|