summaryrefslogtreecommitdiff
path: root/gfx/cairo/d2d.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/cairo/d2d.patch')
-rw-r--r--gfx/cairo/d2d.patch465
1 files changed, 0 insertions, 465 deletions
diff --git a/gfx/cairo/d2d.patch b/gfx/cairo/d2d.patch
deleted file mode 100644
index b8dd155e75..0000000000
--- a/gfx/cairo/d2d.patch
+++ /dev/null
@@ -1,465 +0,0 @@
-commit 4a412c0b144ed1fdde668e0e91241bac8bedd579
-Author: Jeff Muizelaar <jmuizelaar@mozilla.com>
-Date: Sun Jan 24 14:04:33 2010 -0500
-
- d2d
-
-diff --git a/src/cairo-fixed-private.h b/src/cairo-fixed-private.h
-index c299def..a37ca6a 100644
---- a/src/cairo-fixed-private.h
-+++ b/src/cairo-fixed-private.h
-@@ -50,6 +50,7 @@
-
- #define CAIRO_FIXED_ONE ((cairo_fixed_t)(1 << CAIRO_FIXED_FRAC_BITS))
- #define CAIRO_FIXED_ONE_DOUBLE ((double)(1 << CAIRO_FIXED_FRAC_BITS))
-+#define CAIRO_FIXED_ONE_FLOAT ((float)(1 << CAIRO_FIXED_FRAC_BITS))
- #define CAIRO_FIXED_EPSILON ((cairo_fixed_t)(1))
-
- #define CAIRO_FIXED_FRAC_MASK (((cairo_fixed_unsigned_t)(-1)) >> (CAIRO_FIXED_BITS - CAIRO_FIXED_FRAC_BITS))
-@@ -141,6 +142,12 @@ _cairo_fixed_to_double (cairo_fixed_t f)
- return ((double) f) / CAIRO_FIXED_ONE_DOUBLE;
- }
-
-+static inline float
-+_cairo_fixed_to_float (cairo_fixed_t f)
-+{
-+ return ((float) f) / CAIRO_FIXED_ONE_FLOAT;
-+}
-+
- static inline int
- _cairo_fixed_is_integer (cairo_fixed_t f)
- {
-diff --git a/src/cairo-win32-private.h b/src/cairo-win32-private.h
-index b9926bb..ba57595 100644
---- a/src/cairo-win32-private.h
-+++ b/src/cairo-win32-private.h
-@@ -231,4 +231,19 @@ inline BOOL ModifyWorldTransform(HDC hdc, CONST XFORM * lpxf, DWORD mode) { retu
-
- #endif
-
-+#ifdef CAIRO_HAS_DWRITE_FONT
-+CAIRO_BEGIN_DECLS
-+
-+cairo_public cairo_int_status_t
-+cairo_dwrite_show_glyphs_on_surface(void *surface,
-+ cairo_operator_t op,
-+ const cairo_pattern_t *source,
-+ cairo_glyph_t *glyphs,
-+ int num_glyphs,
-+ cairo_scaled_font_t *scaled_font,
-+ cairo_rectangle_int_t *extents);
-+
-+
-+CAIRO_END_DECLS
-+#endif /* CAIRO_HAS_DWRITE_FONT */
- #endif /* CAIRO_WIN32_PRIVATE_H */
-diff --git a/src/cairo-win32-surface.c b/src/cairo-win32-surface.c
-index 0dc5e76..bee00b1 100644
---- a/src/cairo-win32-surface.c
-+++ b/src/cairo-win32-surface.c
-@@ -1547,152 +1547,158 @@ _cairo_win32_surface_show_glyphs (void *surface,
- int *remaining_glyphs)
- {
- #if defined(CAIRO_HAS_WIN32_FONT) && !defined(WINCE)
-- cairo_win32_surface_t *dst = surface;
--
-- WORD glyph_buf_stack[STACK_GLYPH_SIZE];
-- WORD *glyph_buf = glyph_buf_stack;
-- int dxy_buf_stack[2 * STACK_GLYPH_SIZE];
-- int *dxy_buf = dxy_buf_stack;
--
-- BOOL win_result = 0;
-- int i, j;
-+ if (scaled_font->backend->type == CAIRO_FONT_TYPE_DWRITE) {
-+#ifdef CAIRO_HAS_DWRITE_FONT
-+ return cairo_dwrite_show_glyphs_on_surface(surface, op, source, glyphs, num_glyphs, scaled_font, clip);
-+#endif
-+ } else {
-+ cairo_win32_surface_t *dst = surface;
-+
-+ WORD glyph_buf_stack[STACK_GLYPH_SIZE];
-+ WORD *glyph_buf = glyph_buf_stack;
-+ int dxy_buf_stack[2 * STACK_GLYPH_SIZE];
-+ int *dxy_buf = dxy_buf_stack;
-
-- cairo_solid_pattern_t *solid_pattern;
-- COLORREF color;
-+ BOOL win_result = 0;
-+ int i, j;
-
-- cairo_matrix_t device_to_logical;
-+ cairo_solid_pattern_t *solid_pattern;
-+ COLORREF color;
-
-- int start_x, start_y;
-- double user_x, user_y;
-- int logical_x, logical_y;
-- unsigned int glyph_index_option;
-+ cairo_matrix_t device_to_logical;
-
-- /* We can only handle win32 fonts */
-- if (cairo_scaled_font_get_type (scaled_font) != CAIRO_FONT_TYPE_WIN32)
-- return CAIRO_INT_STATUS_UNSUPPORTED;
-+ int start_x, start_y;
-+ double user_x, user_y;
-+ int logical_x, logical_y;
-+ unsigned int glyph_index_option;
-
-- /* We can only handle opaque solid color sources */
-- if (!_cairo_pattern_is_opaque_solid(source))
-- return CAIRO_INT_STATUS_UNSUPPORTED;
-+ /* We can only handle win32 fonts */
-+ if (cairo_scaled_font_get_type (scaled_font) != CAIRO_FONT_TYPE_WIN32)
-+ return CAIRO_INT_STATUS_UNSUPPORTED;
-
-- /* We can only handle operator SOURCE or OVER with the destination
-- * having no alpha */
-- if ((op != CAIRO_OPERATOR_SOURCE && op != CAIRO_OPERATOR_OVER) ||
-- (dst->format != CAIRO_FORMAT_RGB24))
-- return CAIRO_INT_STATUS_UNSUPPORTED;
-+ /* We can only handle opaque solid color sources */
-+ if (!_cairo_pattern_is_opaque_solid(source))
-+ return CAIRO_INT_STATUS_UNSUPPORTED;
-
-- /* If we have a fallback mask clip set on the dst, we have
-- * to go through the fallback path, but only if we're not
-- * doing this for printing */
-- if (clip != NULL) {
-- if ((dst->flags & CAIRO_WIN32_SURFACE_FOR_PRINTING) == 0) {
-- cairo_region_t *clip_region;
-- cairo_status_t status;
-+ /* We can only handle operator SOURCE or OVER with the destination
-+ * having no alpha */
-+ if ((op != CAIRO_OPERATOR_SOURCE && op != CAIRO_OPERATOR_OVER) ||
-+ (dst->format != CAIRO_FORMAT_RGB24))
-+ return CAIRO_INT_STATUS_UNSUPPORTED;
-
-- status = _cairo_clip_get_region (clip, &clip_region);
-- assert (status != CAIRO_INT_STATUS_NOTHING_TO_DO);
-- if (status)
-- return status;
-+ /* If we have a fallback mask clip set on the dst, we have
-+ * to go through the fallback path, but only if we're not
-+ * doing this for printing */
-+ if (clip != NULL) {
-+ if ((dst->flags & CAIRO_WIN32_SURFACE_FOR_PRINTING) == 0) {
-+ cairo_region_t *clip_region;
-+ cairo_status_t status;
-+
-+ status = _cairo_clip_get_region (clip, &clip_region);
-+ assert (status != CAIRO_INT_STATUS_NOTHING_TO_DO);
-+ if (status)
-+ return status;
-
-- _cairo_win32_surface_set_clip_region (surface, clip_region);
-+ _cairo_win32_surface_set_clip_region (surface, clip_region);
-+ }
- }
-- }
-
-- solid_pattern = (cairo_solid_pattern_t *)source;
-- color = RGB(((int)solid_pattern->color.red_short) >> 8,
-- ((int)solid_pattern->color.green_short) >> 8,
-- ((int)solid_pattern->color.blue_short) >> 8);
-+ solid_pattern = (cairo_solid_pattern_t *)source;
-+ color = RGB(((int)solid_pattern->color.red_short) >> 8,
-+ ((int)solid_pattern->color.green_short) >> 8,
-+ ((int)solid_pattern->color.blue_short) >> 8);
-
-- cairo_win32_scaled_font_get_device_to_logical(scaled_font, &device_to_logical);
-+ cairo_win32_scaled_font_get_device_to_logical(scaled_font, &device_to_logical);
-
-- SaveDC(dst->dc);
-+ SaveDC(dst->dc);
-
-- cairo_win32_scaled_font_select_font(scaled_font, dst->dc);
-- SetTextColor(dst->dc, color);
-- SetTextAlign(dst->dc, TA_BASELINE | TA_LEFT);
-- SetBkMode(dst->dc, TRANSPARENT);
-+ cairo_win32_scaled_font_select_font(scaled_font, dst->dc);
-+ SetTextColor(dst->dc, color);
-+ SetTextAlign(dst->dc, TA_BASELINE | TA_LEFT);
-+ SetBkMode(dst->dc, TRANSPARENT);
-
-- if (num_glyphs > STACK_GLYPH_SIZE) {
-- glyph_buf = (WORD *) _cairo_malloc_ab (num_glyphs, sizeof(WORD));
-- dxy_buf = (int *) _cairo_malloc_abc (num_glyphs, sizeof(int), 2);
-- }
-+ if (num_glyphs > STACK_GLYPH_SIZE) {
-+ glyph_buf = (WORD *) _cairo_malloc_ab (num_glyphs, sizeof(WORD));
-+ dxy_buf = (int *) _cairo_malloc_abc (num_glyphs, sizeof(int), 2);
-+ }
-
-- /* It is vital that dx values for dxy_buf are calculated from the delta of
-- * _logical_ x coordinates (not user x coordinates) or else the sum of all
-- * previous dx values may start to diverge from the current glyph's x
-- * coordinate due to accumulated rounding error. As a result strings could
-- * be painted shorter or longer than expected. */
-+ /* It is vital that dx values for dxy_buf are calculated from the delta of
-+ * _logical_ x coordinates (not user x coordinates) or else the sum of all
-+ * previous dx values may start to diverge from the current glyph's x
-+ * coordinate due to accumulated rounding error. As a result strings could
-+ * be painted shorter or longer than expected. */
-
-- user_x = glyphs[0].x;
-- user_y = glyphs[0].y;
-+ user_x = glyphs[0].x;
-+ user_y = glyphs[0].y;
-
-- cairo_matrix_transform_point(&device_to_logical,
-- &user_x, &user_y);
-+ cairo_matrix_transform_point(&device_to_logical,
-+ &user_x, &user_y);
-
-- logical_x = _cairo_lround (user_x);
-- logical_y = _cairo_lround (user_y);
-+ logical_x = _cairo_lround (user_x);
-+ logical_y = _cairo_lround (user_y);
-
-- start_x = logical_x;
-- start_y = logical_y;
-+ start_x = logical_x;
-+ start_y = logical_y;
-
-- for (i = 0, j = 0; i < num_glyphs; ++i, j = 2 * i) {
-- glyph_buf[i] = (WORD) glyphs[i].index;
-- if (i == num_glyphs - 1) {
-- dxy_buf[j] = 0;
-- dxy_buf[j+1] = 0;
-- } else {
-- double next_user_x = glyphs[i+1].x;
-- double next_user_y = glyphs[i+1].y;
-- int next_logical_x, next_logical_y;
-+ for (i = 0, j = 0; i < num_glyphs; ++i, j = 2 * i) {
-+ glyph_buf[i] = (WORD) glyphs[i].index;
-+ if (i == num_glyphs - 1) {
-+ dxy_buf[j] = 0;
-+ dxy_buf[j+1] = 0;
-+ } else {
-+ double next_user_x = glyphs[i+1].x;
-+ double next_user_y = glyphs[i+1].y;
-+ int next_logical_x, next_logical_y;
-
-- cairo_matrix_transform_point(&device_to_logical,
-- &next_user_x, &next_user_y);
-+ cairo_matrix_transform_point(&device_to_logical,
-+ &next_user_x, &next_user_y);
-
-- next_logical_x = _cairo_lround (next_user_x);
-- next_logical_y = _cairo_lround (next_user_y);
-+ next_logical_x = _cairo_lround (next_user_x);
-+ next_logical_y = _cairo_lround (next_user_y);
-
-- dxy_buf[j] = _cairo_lround (next_logical_x - logical_x);
-- dxy_buf[j+1] = _cairo_lround (logical_y - next_logical_y);
-- /* note that GDI coordinate system is inverted */
-+ dxy_buf[j] = _cairo_lround (next_logical_x - logical_x);
-+ dxy_buf[j+1] = _cairo_lround (logical_y - next_logical_y);
-+ /* note that GDI coordinate system is inverted */
-
-- logical_x = next_logical_x;
-- logical_y = next_logical_y;
-- }
-- }
-+ logical_x = next_logical_x;
-+ logical_y = next_logical_y;
-+ }
-+ }
-
-- /* Using glyph indices for a Type 1 font does not work on a
-- * printer DC. The win32 printing surface will convert the the
-- * glyph indices of Type 1 fonts to the unicode values.
-- */
-- if ((dst->flags & CAIRO_WIN32_SURFACE_FOR_PRINTING) &&
-- _cairo_win32_scaled_font_is_type1 (scaled_font))
-- {
-- glyph_index_option = 0;
-- }
-- else
-- {
-- glyph_index_option = ETO_GLYPH_INDEX;
-- }
-+ /* Using glyph indices for a Type 1 font does not work on a
-+ * printer DC. The win32 printing surface will convert the the
-+ * glyph indices of Type 1 fonts to the unicode values.
-+ */
-+ if ((dst->flags & CAIRO_WIN32_SURFACE_FOR_PRINTING) &&
-+ _cairo_win32_scaled_font_is_type1 (scaled_font))
-+ {
-+ glyph_index_option = 0;
-+ }
-+ else
-+ {
-+ glyph_index_option = ETO_GLYPH_INDEX;
-+ }
-
-- win_result = ExtTextOutW(dst->dc,
-- start_x,
-- start_y,
-- glyph_index_option | ETO_PDY,
-- NULL,
-- glyph_buf,
-- num_glyphs,
-- dxy_buf);
-- if (!win_result) {
-- _cairo_win32_print_gdi_error("_cairo_win32_surface_show_glyphs(ExtTextOutW failed)");
-- }
-+ win_result = ExtTextOutW(dst->dc,
-+ start_x,
-+ start_y,
-+ glyph_index_option | ETO_PDY,
-+ NULL,
-+ glyph_buf,
-+ num_glyphs,
-+ dxy_buf);
-+ if (!win_result) {
-+ _cairo_win32_print_gdi_error("_cairo_win32_surface_show_glyphs(ExtTextOutW failed)");
-+ }
-
-- RestoreDC(dst->dc, -1);
-+ RestoreDC(dst->dc, -1);
-
-- if (glyph_buf != glyph_buf_stack) {
-- free(glyph_buf);
-- free(dxy_buf);
-+ if (glyph_buf != glyph_buf_stack) {
-+ free(glyph_buf);
-+ free(dxy_buf);
-+ }
-+ return (win_result) ? CAIRO_STATUS_SUCCESS : CAIRO_INT_STATUS_UNSUPPORTED;
- }
-- return (win_result) ? CAIRO_STATUS_SUCCESS : CAIRO_INT_STATUS_UNSUPPORTED;
- #else
- return CAIRO_INT_STATUS_UNSUPPORTED;
- #endif
-diff --git a/src/cairo-win32.h b/src/cairo-win32.h
-index 6b86d4e..fcf20b8 100644
---- a/src/cairo-win32.h
-+++ b/src/cairo-win32.h
-@@ -109,6 +109,63 @@ cairo_win32_scaled_font_get_device_to_logical (cairo_scaled_font_t *scaled_font,
-
- #endif /* CAIRO_HAS_WIN32_FONT */
-
-+#if CAIRO_HAS_DWRITE_FONT
-+
-+/*
-+ * Win32 DirectWrite font support
-+ */
-+cairo_public cairo_font_face_t *
-+cairo_dwrite_font_face_create_for_dwrite_fontface(void *dwrite_font, void *dwrite_font_face);
-+
-+#endif /* CAIRO_HAS_DWRITE_FONT */
-+
-+#if CAIRO_HAS_D2D_SURFACE
-+
-+/**
-+ * Create a D2D surface for an HWND
-+ *
-+ * \param wnd Handle for the window
-+ * \return New cairo surface
-+ */
-+cairo_public cairo_surface_t *
-+cairo_d2d_surface_create_for_hwnd(HWND wnd);
-+
-+/**
-+ * Create a D2D surface of a certain size.
-+ *
-+ * \param format Cairo format of the surface
-+ * \param width Width of the surface
-+ * \param height Height of the surface
-+ * \return New cairo surface
-+ */
-+cairo_public cairo_surface_t *
-+cairo_d2d_surface_create(cairo_format_t format,
-+ int width,
-+ int height);
-+
-+/**
-+ * Present the backbuffer for a surface create for an HWND. This needs
-+ * to be called when the owner of the original window surface wants to
-+ * actually present the executed drawing operations to the screen.
-+ *
-+ * \param surface D2D surface.
-+ */
-+void cairo_d2d_present_backbuffer(cairo_surface_t *surface);
-+
-+/**
-+ * Scroll the surface, this only moves the surface graphics, it does not
-+ * actually scroll child windows or anything like that. Nor does it invalidate
-+ * that area of the window.
-+ *
-+ * \param surface The d2d surface this operation should apply to.
-+ * \param x The x delta for the movement
-+ * \param y The y delta for the movement
-+ * \param clip The clip rectangle, the is the 'part' of the surface that needs
-+ * scrolling.
-+ */
-+void cairo_d2d_scroll(cairo_surface_t *surface, int x, int y, cairo_rectangle_t *clip);
-+#endif
-+
- CAIRO_END_DECLS
-
- #else /* CAIRO_HAS_WIN32_SURFACE */
-diff --git a/src/cairo.h b/src/cairo.h
-index 3a8b8a6..21827aa 100644
---- a/src/cairo.h
-+++ b/src/cairo.h
-@@ -1370,7 +1370,8 @@ typedef enum _cairo_font_type {
- CAIRO_FONT_TYPE_FT,
- CAIRO_FONT_TYPE_WIN32,
- CAIRO_FONT_TYPE_QUARTZ,
-- CAIRO_FONT_TYPE_USER
-+ CAIRO_FONT_TYPE_USER,
-+ CAIRO_FONT_TYPE_DWRITE
- } cairo_font_type_t;
-
- cairo_public cairo_font_type_t
-@@ -2009,7 +2010,7 @@ typedef enum _cairo_surface_type {
- CAIRO_SURFACE_TYPE_TEE,
- CAIRO_SURFACE_TYPE_XML,
- CAIRO_SURFACE_TYPE_SKIA,
-- CAIRO_SURFACE_TYPE_DDRAW
-+ CAIRO_SURFACE_TYPE_D2D
- } cairo_surface_type_t;
-
- cairo_public cairo_surface_type_t
-diff --git a/src/cairoint.h b/src/cairoint.h
-index b942b4b..58850ab 100644
---- a/src/cairoint.h
-+++ b/src/cairoint.h
-@@ -587,6 +587,12 @@ extern const cairo_private struct _cairo_font_face_backend _cairo_win32_font_fac
-
- #endif
-
-+#if CAIRO_HAS_DWRITE_FONT
-+
-+extern const cairo_private struct _cairo_font_face_backend _cairo_dwrite_font_face_backend;
-+
-+#endif
-+
- #if CAIRO_HAS_QUARTZ_FONT
-
- extern const cairo_private struct _cairo_font_face_backend _cairo_quartz_font_face_backend;
-@@ -932,7 +938,12 @@ typedef struct _cairo_traps {
- #define CAIRO_FT_FONT_FAMILY_DEFAULT ""
- #define CAIRO_USER_FONT_FAMILY_DEFAULT "@cairo:"
-
--#if CAIRO_HAS_WIN32_FONT
-+#if CAIRO_HAS_DWRITE_FONT
-+
-+#define CAIRO_FONT_FAMILY_DEFAULT CAIRO_WIN32_FONT_FAMILY_DEFAULT
-+#define CAIRO_FONT_FACE_BACKEND_DEFAULT &_cairo_dwrite_font_face_backend
-+
-+#elif CAIRO_HAS_WIN32_FONT
-
- #define CAIRO_FONT_FAMILY_DEFAULT CAIRO_WIN32_FONT_FAMILY_DEFAULT
- #define CAIRO_FONT_FACE_BACKEND_DEFAULT &_cairo_win32_font_face_backend
-@@ -2617,7 +2628,7 @@ cairo_private int
- _cairo_ucs4_to_utf8 (uint32_t unicode,
- char *utf8);
-
--#if CAIRO_HAS_WIN32_FONT || CAIRO_HAS_QUARTZ_FONT || CAIRO_HAS_PDF_OPERATORS
-+#if CAIRO_HAS_WIN32_FONT || CAIRO_HAS_QUARTZ_FONT || CAIRO_HAS_PDF_OPERATORS || CAIRO_HAS_DW_FONT
- # define CAIRO_HAS_UTF8_TO_UTF16 1
- #endif
- #if CAIRO_HAS_UTF8_TO_UTF16