зеркало из https://github.com/mozilla/pjs.git
Import a bunch of more up to date local cairo patches, notably fixes to win32 clipping.
This commit is contained in:
Родитель
b72c2bda46
Коммит
fb2d6d0f0c
|
@ -23,10 +23,25 @@ if cairo is enabled. Please upgrade to VC7.1/8.
|
||||||
mozilla-misc.patch
|
mozilla-misc.patch
|
||||||
- Misc compilation fixes for pixman (submitted upstream)
|
- Misc compilation fixes for pixman (submitted upstream)
|
||||||
- temporary moz_cairo_set_target API (not for upstream)
|
- temporary moz_cairo_set_target API (not for upstream)
|
||||||
|
- mac compilation fix for cairo-atsui-font.c for 10.2 SDK (maybe should
|
||||||
|
be upstream?)
|
||||||
|
- cairo-features.h.in - add cairo-platform.h include and hard-code the
|
||||||
|
cairo version (not for upstream)
|
||||||
|
- #if 0'ing out DllMain in win32-surface.c -- not needed, since
|
||||||
|
we don't use cairo multithreaded, and DllMain interferes
|
||||||
|
with libxul's DllMain. (not for usptream)
|
||||||
|
- #if 0'ing out bits to get rid of multithreaded stuff in cairoint.h
|
||||||
|
(not for upstream)
|
||||||
|
|
||||||
cairo-debug-helpers.patch
|
cairo-debug-helpers.patch
|
||||||
- some stuff for cairo-debug.[ch]
|
- some stuff for cairo-debug.[ch]
|
||||||
|
|
||||||
|
cairo-win32-clip.patch
|
||||||
|
- Make mark_dirty() reset a surface's clip, so that we can call it
|
||||||
|
when we RestoreDC() after native win32 drawing (submitted upstream)
|
||||||
|
- Rework win32 surface clip and extents handling for correctness
|
||||||
|
(submitted upstream)
|
||||||
|
|
||||||
device-offset-scale.path
|
device-offset-scale.path
|
||||||
- Move device offset/scale handling into surface layer; large rework
|
- Move device offset/scale handling into surface layer; large rework
|
||||||
of device offset/scale. (submitted upstream)
|
of device offset/scale. (submitted upstream)
|
||||||
|
|
|
@ -1,209 +0,0 @@
|
||||||
Index: src/cairo-debug.c
|
|
||||||
===================================================================
|
|
||||||
RCS file: /cvs/cairo/cairo/src/cairo-debug.c,v
|
|
||||||
retrieving revision 1.2
|
|
||||||
diff -u -8 -p -r1.2 cairo-debug.c
|
|
||||||
--- src/cairo-debug.c 31 Aug 2005 22:08:02 -0000 1.2
|
|
||||||
+++ src/cairo-debug.c 10 Jan 2006 21:15:50 -0000
|
|
||||||
@@ -65,8 +65,158 @@ cairo_debug_reset_static_data (void)
|
|
||||||
|
|
||||||
_cairo_font_reset_static_data ();
|
|
||||||
|
|
||||||
#if CAIRO_HAS_FT_FONT
|
|
||||||
_cairo_ft_font_reset_static_data ();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
+/*
|
|
||||||
+ * path dumper
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+typedef struct _cairo_debug_path_dump_closure {
|
|
||||||
+ unsigned int op_count;
|
|
||||||
+ FILE *fp;
|
|
||||||
+} cairo_debug_path_dump_closure_t;
|
|
||||||
+
|
|
||||||
+static cairo_status_t
|
|
||||||
+_cairo_debug_path_move_to (void *closure,
|
|
||||||
+ cairo_point_t *point)
|
|
||||||
+{
|
|
||||||
+ cairo_debug_path_dump_closure_t *fdc =
|
|
||||||
+ (cairo_debug_path_dump_closure_t*) closure;
|
|
||||||
+ fprintf (fdc->fp, "%d: moveto (%f, %f)\n",
|
|
||||||
+ fdc->op_count++,
|
|
||||||
+ _cairo_fixed_to_double(point->x),
|
|
||||||
+ _cairo_fixed_to_double(point->y));
|
|
||||||
+ return CAIRO_STATUS_SUCCESS;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static cairo_status_t
|
|
||||||
+_cairo_debug_path_line_to (void *closure,
|
|
||||||
+ cairo_point_t *point)
|
|
||||||
+{
|
|
||||||
+ cairo_debug_path_dump_closure_t *fdc =
|
|
||||||
+ (cairo_debug_path_dump_closure_t*) closure;
|
|
||||||
+ fprintf (fdc->fp, "%d: lineto (%f, %f)\n",
|
|
||||||
+ fdc->op_count++,
|
|
||||||
+ _cairo_fixed_to_double(point->x),
|
|
||||||
+ _cairo_fixed_to_double(point->y));
|
|
||||||
+ return CAIRO_STATUS_SUCCESS;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static cairo_status_t
|
|
||||||
+_cairo_debug_path_curve_to (void *closure,
|
|
||||||
+ cairo_point_t *p0,
|
|
||||||
+ cairo_point_t *p1,
|
|
||||||
+ cairo_point_t *p2)
|
|
||||||
+{
|
|
||||||
+ cairo_debug_path_dump_closure_t *fdc =
|
|
||||||
+ (cairo_debug_path_dump_closure_t*) closure;
|
|
||||||
+ fprintf (fdc->fp, "%d: curveto (%f, %f) (%f, %f) (%f, %f)\n",
|
|
||||||
+ fdc->op_count++,
|
|
||||||
+ _cairo_fixed_to_double(p0->x),
|
|
||||||
+ _cairo_fixed_to_double(p0->y),
|
|
||||||
+ _cairo_fixed_to_double(p1->x),
|
|
||||||
+ _cairo_fixed_to_double(p1->y),
|
|
||||||
+ _cairo_fixed_to_double(p2->x),
|
|
||||||
+ _cairo_fixed_to_double(p2->y));
|
|
||||||
+ return CAIRO_STATUS_SUCCESS;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static cairo_status_t
|
|
||||||
+_cairo_debug_path_close_path (void *closure)
|
|
||||||
+{
|
|
||||||
+ cairo_debug_path_dump_closure_t *fdc =
|
|
||||||
+ (cairo_debug_path_dump_closure_t*) closure;
|
|
||||||
+ fprintf (fdc->fp, "%d: close\n",
|
|
||||||
+ fdc->op_count++);
|
|
||||||
+ return CAIRO_STATUS_SUCCESS;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
+ * cairo_debug_dump_path
|
|
||||||
+ * @path: a #cairo_path_fixed_t
|
|
||||||
+ * @fp: the file pointer where to dump the given path
|
|
||||||
+ *
|
|
||||||
+ * Dumps @path in human-readable form to @fp.
|
|
||||||
+ */
|
|
||||||
+void
|
|
||||||
+cairo_debug_dump_path (cairo_path_fixed_t *path,
|
|
||||||
+ FILE *fp)
|
|
||||||
+{
|
|
||||||
+ cairo_debug_path_dump_closure_t fdc;
|
|
||||||
+ fdc.fp = fp;
|
|
||||||
+ fdc.op_count = 0;
|
|
||||||
+
|
|
||||||
+ fprintf (fp, "=== path %p ===\n", path);
|
|
||||||
+ _cairo_path_fixed_interpret (path,
|
|
||||||
+ CAIRO_DIRECTION_FORWARD,
|
|
||||||
+ _cairo_debug_path_move_to,
|
|
||||||
+ _cairo_debug_path_line_to,
|
|
||||||
+ _cairo_debug_path_curve_to,
|
|
||||||
+ _cairo_debug_path_close_path,
|
|
||||||
+ &fdc);
|
|
||||||
+ fprintf (fp, "======================\n");
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/*
|
|
||||||
+ * traps dumping
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
+ * cairo_debug_dump_traps
|
|
||||||
+ * @traps: a #cairo_traps_t
|
|
||||||
+ * @fp: the file pointer where to dump the traps
|
|
||||||
+ *
|
|
||||||
+ * Dumps @traps in human-readable form to @fp.
|
|
||||||
+ */
|
|
||||||
+void
|
|
||||||
+cairo_debug_dump_traps (cairo_traps_t *traps,
|
|
||||||
+ FILE *fp)
|
|
||||||
+{
|
|
||||||
+ fprintf (fp, "=== traps %p ===\n", traps);
|
|
||||||
+ fprintf (fp, "extents: (%f, %f) (%f, %f)\n",
|
|
||||||
+ _cairo_fixed_to_double (traps->extents.p1.x),
|
|
||||||
+ _cairo_fixed_to_double (traps->extents.p1.y),
|
|
||||||
+ _cairo_fixed_to_double (traps->extents.p2.x),
|
|
||||||
+ _cairo_fixed_to_double (traps->extents.p2.y));
|
|
||||||
+
|
|
||||||
+ cairo_debug_dump_trapezoid_array (traps->traps,
|
|
||||||
+ traps->num_traps,
|
|
||||||
+ fp);
|
|
||||||
+
|
|
||||||
+ fprintf (fp, "=======================\n");
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
+ * cairo_debug_dump_trapezoid_array
|
|
||||||
+ * @traps: a #cairo_trapezoid_t pointer
|
|
||||||
+ * @num_traps: the number of trapezoids in @traps
|
|
||||||
+ * @fp: the file pointer where to dump the traps
|
|
||||||
+ *
|
|
||||||
+ * Dumps num_traps in the @traps array in human-readable form to @fp.
|
|
||||||
+ */
|
|
||||||
+void
|
|
||||||
+cairo_debug_dump_trapezoid_array (cairo_trapezoid_t *traps,
|
|
||||||
+ int num_traps,
|
|
||||||
+ FILE *fp)
|
|
||||||
+{
|
|
||||||
+ int i;
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < num_traps; i++) {
|
|
||||||
+ fprintf (fp, "% 3d: t: %f b: %f l: (%f,%f)->(%f,%f) r: (%f,%f)->(%f,%f)\n",
|
|
||||||
+ i,
|
|
||||||
+ _cairo_fixed_to_double (traps[i].top),
|
|
||||||
+ _cairo_fixed_to_double (traps[i].bottom),
|
|
||||||
+ _cairo_fixed_to_double (traps[i].left.p1.x),
|
|
||||||
+ _cairo_fixed_to_double (traps[i].left.p1.y),
|
|
||||||
+ _cairo_fixed_to_double (traps[i].left.p2.x),
|
|
||||||
+ _cairo_fixed_to_double (traps[i].left.p2.y),
|
|
||||||
+ _cairo_fixed_to_double (traps[i].right.p1.x),
|
|
||||||
+ _cairo_fixed_to_double (traps[i].right.p1.y),
|
|
||||||
+ _cairo_fixed_to_double (traps[i].right.p2.x),
|
|
||||||
+ _cairo_fixed_to_double (traps[i].right.p2.y));
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
Index: src/cairo-debug.h
|
|
||||||
===================================================================
|
|
||||||
RCS file: /cvs/cairo/cairo/src/cairo-debug.h,v
|
|
||||||
retrieving revision 1.1
|
|
||||||
diff -u -8 -p -r1.1 cairo-debug.h
|
|
||||||
--- src/cairo-debug.h 1 Aug 2005 20:33:47 -0000 1.1
|
|
||||||
+++ src/cairo-debug.h 10 Jan 2006 21:15:50 -0000
|
|
||||||
@@ -32,17 +32,35 @@
|
|
||||||
* Contributor(s):
|
|
||||||
* Carl D. Worth <cworth@cworth.org>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef CAIRO_DEBUG_H
|
|
||||||
#define CAIRO_DEBUG_H
|
|
||||||
|
|
||||||
#include <cairo-features.h>
|
|
||||||
+#include <stdio.h>
|
|
||||||
|
|
||||||
CAIRO_BEGIN_DECLS
|
|
||||||
|
|
||||||
+struct _cairo_path_fixed;
|
|
||||||
+struct _cairo_traps;
|
|
||||||
+struct _cairo_trapezoid;
|
|
||||||
+
|
|
||||||
void
|
|
||||||
cairo_debug_reset_static_data (void);
|
|
||||||
|
|
||||||
+void
|
|
||||||
+cairo_debug_dump_path (struct _cairo_path_fixed *path,
|
|
||||||
+ FILE *fp);
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+cairo_debug_dump_traps (struct _cairo_traps *traps,
|
|
||||||
+ FILE *fp);
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+cairo_debug_dump_trapezoid_array (struct _cairo_trapezoid *traps,
|
|
||||||
+ int num_traps,
|
|
||||||
+ FILE *fp);
|
|
||||||
+
|
|
||||||
CAIRO_END_DECLS
|
|
||||||
|
|
||||||
#endif /* CAIRO_H */
|
|
|
@ -35,6 +35,8 @@
|
||||||
|
|
||||||
#include "cairoint.h"
|
#include "cairoint.h"
|
||||||
|
|
||||||
|
#include "cairo-clip-private.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cairo_debug_reset_static_data:
|
* cairo_debug_reset_static_data:
|
||||||
*
|
*
|
||||||
|
@ -70,6 +72,45 @@ cairo_debug_reset_static_data (void)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* clip dumper
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
cairo_debug_dump_clip (struct _cairo_clip *clip,
|
||||||
|
FILE *fp)
|
||||||
|
{
|
||||||
|
fprintf (fp, "clip %p: %s ", (clip->mode == CAIRO_CLIP_MODE_PATH ? "PATH" :
|
||||||
|
clip->mode == CAIRO_CLIP_MODE_REGION ? "REGION" :
|
||||||
|
clip->mode == CAIRO_CLIP_MODE_MASK ? "MASK" :
|
||||||
|
"INVALID?!"));
|
||||||
|
if (clip->mode == CAIRO_CLIP_MODE_PATH) {
|
||||||
|
fprintf (fp, "\n=== clip path ===\n");
|
||||||
|
} else if (clip->mode == CAIRO_CLIP_MODE_REGION) {
|
||||||
|
if (!clip->region) {
|
||||||
|
fprintf (fp, "region = NULL");
|
||||||
|
} else if (pixman_region_num_rects (clip->region) == 1) {
|
||||||
|
pixman_box16_t *rects = pixman_region_rects (clip->region);
|
||||||
|
fprintf (fp, "region [%d %d %d %d]",
|
||||||
|
rects[0].x1, rects[0].y1,
|
||||||
|
rects[0].x2, rects[0].y2);
|
||||||
|
} else {
|
||||||
|
pixman_box16_t *rects = pixman_region_rects (clip->region);
|
||||||
|
int i, nr = pixman_region_num_rects(clip->region);
|
||||||
|
fprintf (fp, "region (%d rects)\n", nr);
|
||||||
|
for (i = 0; i < nr; i++) {
|
||||||
|
fprintf (fp, "rect %d: [%d %d %d %d]", i,
|
||||||
|
rects[nr].x1, rects[nr].y1,
|
||||||
|
rects[nr].x2, rects[nr].y2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (clip->mode == CAIRO_CLIP_MODE_MASK) {
|
||||||
|
fprintf (fp, "mask, surface: %p rect: [%d %d %d %d]", clip->surface,
|
||||||
|
clip->surface_rect.x, clip->surface_rect.y, clip->surface_rect.width, clip->surface_rect.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf (fp, "\n");
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* path dumper
|
* path dumper
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -44,10 +44,14 @@ CAIRO_BEGIN_DECLS
|
||||||
struct _cairo_path_fixed;
|
struct _cairo_path_fixed;
|
||||||
struct _cairo_traps;
|
struct _cairo_traps;
|
||||||
struct _cairo_trapezoid;
|
struct _cairo_trapezoid;
|
||||||
|
struct _cairo_clip;
|
||||||
|
|
||||||
void
|
void
|
||||||
cairo_debug_reset_static_data (void);
|
cairo_debug_reset_static_data (void);
|
||||||
|
|
||||||
|
void
|
||||||
|
cairo_debug_dump_clip (struct _cairo_clip *clip,
|
||||||
|
FILE *fp);
|
||||||
void
|
void
|
||||||
cairo_debug_dump_path (struct _cairo_path_fixed *path,
|
cairo_debug_dump_path (struct _cairo_path_fixed *path,
|
||||||
FILE *fp);
|
FILE *fp);
|
||||||
|
|
|
@ -518,6 +518,10 @@ cairo_surface_mark_dirty (cairo_surface_t *surface)
|
||||||
* Like cairo_surface_mark_dirty(), but drawing has been done only to
|
* Like cairo_surface_mark_dirty(), but drawing has been done only to
|
||||||
* the specified rectangle, so that cairo can retain cached contents
|
* the specified rectangle, so that cairo can retain cached contents
|
||||||
* for other parts of the surface.
|
* for other parts of the surface.
|
||||||
|
*
|
||||||
|
* Any cached clip set on the surface will be reset by this function,
|
||||||
|
* to make sure that future cairo calls have the clip set that they
|
||||||
|
* expect.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
cairo_surface_mark_dirty_rectangle (cairo_surface_t *surface,
|
cairo_surface_mark_dirty_rectangle (cairo_surface_t *surface,
|
||||||
|
@ -536,6 +540,12 @@ cairo_surface_mark_dirty_rectangle (cairo_surface_t *surface,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Always reset the clip here, to avoid having a SaveDC/RestoreDC around
|
||||||
|
* cairo calls that update the surface clip resulting in a desync between
|
||||||
|
* the cairo clip and the backend clip.
|
||||||
|
*/
|
||||||
|
surface->current_clip_serial = -1;
|
||||||
|
|
||||||
if (surface->backend->mark_dirty_rectangle) {
|
if (surface->backend->mark_dirty_rectangle) {
|
||||||
cairo_status_t status;
|
cairo_status_t status;
|
||||||
|
|
||||||
|
@ -1542,6 +1552,12 @@ _cairo_surface_set_clip (cairo_surface_t *surface, cairo_clip_t *clip)
|
||||||
if (!surface)
|
if (!surface)
|
||||||
return CAIRO_STATUS_NULL_POINTER;
|
return CAIRO_STATUS_NULL_POINTER;
|
||||||
|
|
||||||
|
if (surface->status)
|
||||||
|
return surface->status;
|
||||||
|
|
||||||
|
if (surface->finished)
|
||||||
|
return CAIRO_STATUS_SURFACE_FINISHED;
|
||||||
|
|
||||||
if (clip) {
|
if (clip) {
|
||||||
serial = clip->serial;
|
serial = clip->serial;
|
||||||
if (serial == 0)
|
if (serial == 0)
|
||||||
|
@ -1549,7 +1565,7 @@ _cairo_surface_set_clip (cairo_surface_t *surface, cairo_clip_t *clip)
|
||||||
}
|
}
|
||||||
|
|
||||||
surface->clip = clip;
|
surface->clip = clip;
|
||||||
|
|
||||||
if (serial == _cairo_surface_get_current_clip_serial (surface))
|
if (serial == _cairo_surface_get_current_clip_serial (surface))
|
||||||
return CAIRO_STATUS_SUCCESS;
|
return CAIRO_STATUS_SUCCESS;
|
||||||
|
|
||||||
|
|
|
@ -62,9 +62,9 @@ typedef struct _cairo_win32_surface {
|
||||||
|
|
||||||
cairo_rectangle_t clip_rect;
|
cairo_rectangle_t clip_rect;
|
||||||
|
|
||||||
int set_clip;
|
|
||||||
HRGN saved_clip;
|
HRGN saved_clip;
|
||||||
|
|
||||||
|
cairo_rectangle_t extents;
|
||||||
} cairo_win32_surface_t;
|
} cairo_win32_surface_t;
|
||||||
|
|
||||||
cairo_status_t
|
cairo_status_t
|
||||||
|
|
|
@ -274,9 +274,14 @@ _cairo_win32_surface_create_for_dc (HDC original_dc,
|
||||||
surface->clip_rect.width = width;
|
surface->clip_rect.width = width;
|
||||||
surface->clip_rect.height = height;
|
surface->clip_rect.height = height;
|
||||||
|
|
||||||
surface->set_clip = 0;
|
surface->saved_clip = CreateRectRgn (0, 0, 0, 0);
|
||||||
surface->saved_clip = NULL;
|
if (GetClipRgn (surface->dc, surface->saved_clip) == 0) {
|
||||||
|
DeleteObject(surface->saved_clip);
|
||||||
|
surface->saved_clip = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
surface->extents = surface->clip_rect;
|
||||||
|
|
||||||
_cairo_surface_init (&surface->base, &cairo_win32_surface_backend);
|
_cairo_surface_init (&surface->base, &cairo_win32_surface_backend);
|
||||||
|
|
||||||
return (cairo_surface_t *)surface;
|
return (cairo_surface_t *)surface;
|
||||||
|
@ -340,9 +345,8 @@ _cairo_win32_surface_finish (void *abstract_surface)
|
||||||
if (surface->image)
|
if (surface->image)
|
||||||
cairo_surface_destroy (surface->image);
|
cairo_surface_destroy (surface->image);
|
||||||
|
|
||||||
if (surface->saved_clip) {
|
if (surface->saved_clip)
|
||||||
DeleteObject (surface->saved_clip);
|
DeleteObject (surface->saved_clip);
|
||||||
}
|
|
||||||
|
|
||||||
/* If we created the Bitmap and DC, destroy them */
|
/* If we created the Bitmap and DC, destroy them */
|
||||||
if (surface->bitmap) {
|
if (surface->bitmap) {
|
||||||
|
@ -403,7 +407,7 @@ _cairo_win32_surface_acquire_source_image (void *abstract_sur
|
||||||
cairo_win32_surface_t *surface = abstract_surface;
|
cairo_win32_surface_t *surface = abstract_surface;
|
||||||
cairo_win32_surface_t *local = NULL;
|
cairo_win32_surface_t *local = NULL;
|
||||||
cairo_status_t status;
|
cairo_status_t status;
|
||||||
|
|
||||||
if (surface->image) {
|
if (surface->image) {
|
||||||
*image_out = (cairo_image_surface_t *)surface->image;
|
*image_out = (cairo_image_surface_t *)surface->image;
|
||||||
*image_extra = NULL;
|
*image_extra = NULL;
|
||||||
|
@ -446,7 +450,7 @@ _cairo_win32_surface_acquire_dest_image (void *abstract_surfa
|
||||||
cairo_status_t status;
|
cairo_status_t status;
|
||||||
RECT clip_box;
|
RECT clip_box;
|
||||||
int x1, y1, x2, y2;
|
int x1, y1, x2, y2;
|
||||||
|
|
||||||
if (surface->image) {
|
if (surface->image) {
|
||||||
image_rect->x = 0;
|
image_rect->x = 0;
|
||||||
image_rect->y = 0;
|
image_rect->y = 0;
|
||||||
|
@ -461,12 +465,12 @@ _cairo_win32_surface_acquire_dest_image (void *abstract_surfa
|
||||||
|
|
||||||
if (GetClipBox (surface->dc, &clip_box) == ERROR)
|
if (GetClipBox (surface->dc, &clip_box) == ERROR)
|
||||||
return _cairo_win32_print_gdi_error ("_cairo_win3_surface_acquire_dest_image");
|
return _cairo_win32_print_gdi_error ("_cairo_win3_surface_acquire_dest_image");
|
||||||
|
|
||||||
x1 = clip_box.left;
|
x1 = clip_box.left;
|
||||||
x2 = clip_box.right;
|
x2 = clip_box.right;
|
||||||
y1 = clip_box.top;
|
y1 = clip_box.top;
|
||||||
y2 = clip_box.bottom;
|
y2 = clip_box.bottom;
|
||||||
|
|
||||||
if (interest_rect->x > x1)
|
if (interest_rect->x > x1)
|
||||||
x1 = interest_rect->x;
|
x1 = interest_rect->x;
|
||||||
if (interest_rect->y > y1)
|
if (interest_rect->y > y1)
|
||||||
|
@ -855,19 +859,9 @@ _cairo_win32_surface_set_clip_region (void *abstract_surface,
|
||||||
|
|
||||||
if (region == NULL) {
|
if (region == NULL) {
|
||||||
/* Clear any clip set by cairo, return to the original */
|
/* Clear any clip set by cairo, return to the original */
|
||||||
|
if (SelectClipRgn (surface->dc, surface->saved_clip) == ERROR)
|
||||||
if (surface->set_clip) {
|
return _cairo_win32_print_gdi_error ("_cairo_win32_surface_set_clip_region (reset)");
|
||||||
if (SelectClipRgn (surface->dc, surface->saved_clip) == ERROR)
|
|
||||||
return _cairo_win32_print_gdi_error ("_cairo_win32_surface_set_clip_region");
|
|
||||||
|
|
||||||
if (surface->saved_clip) {
|
|
||||||
DeleteObject (surface->saved_clip);
|
|
||||||
surface->saved_clip = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
surface->set_clip = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return CAIRO_STATUS_SUCCESS;
|
return CAIRO_STATUS_SUCCESS;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
@ -910,36 +904,16 @@ _cairo_win32_surface_set_clip_region (void *abstract_surface,
|
||||||
if (!gdi_region)
|
if (!gdi_region)
|
||||||
return CAIRO_STATUS_NO_MEMORY;
|
return CAIRO_STATUS_NO_MEMORY;
|
||||||
|
|
||||||
if (surface->set_clip) {
|
/* Combine the new region with the original clip */
|
||||||
/* Combine the new region with the original clip */
|
|
||||||
|
|
||||||
if (surface->saved_clip) {
|
if (surface->saved_clip) {
|
||||||
if (CombineRgn (gdi_region, gdi_region, surface->saved_clip, RGN_AND) == ERROR)
|
if (CombineRgn (gdi_region, gdi_region, surface->saved_clip, RGN_AND) == ERROR)
|
||||||
goto FAIL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (SelectClipRgn (surface->dc, gdi_region) == ERROR)
|
|
||||||
goto FAIL;
|
goto FAIL;
|
||||||
|
|
||||||
} else {
|
|
||||||
/* Save the the current region */
|
|
||||||
|
|
||||||
surface->saved_clip = CreateRectRgn (0, 0, 0, 0);
|
|
||||||
if (!surface->saved_clip) {
|
|
||||||
goto FAIL; }
|
|
||||||
|
|
||||||
/* This function has no error return! */
|
|
||||||
if (GetClipRgn (surface->dc, surface->saved_clip) == 0) { /* No clip */
|
|
||||||
DeleteObject (surface->saved_clip);
|
|
||||||
surface->saved_clip = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ExtSelectClipRgn (surface->dc, gdi_region, RGN_AND) == ERROR)
|
|
||||||
goto FAIL;
|
|
||||||
|
|
||||||
surface->set_clip = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (SelectClipRgn (surface->dc, gdi_region) == ERROR)
|
||||||
|
goto FAIL;
|
||||||
|
|
||||||
DeleteObject (gdi_region);
|
DeleteObject (gdi_region);
|
||||||
return CAIRO_STATUS_SUCCESS;
|
return CAIRO_STATUS_SUCCESS;
|
||||||
|
|
||||||
|
@ -955,15 +929,8 @@ _cairo_win32_surface_get_extents (void *abstract_surface,
|
||||||
cairo_rectangle_t *rectangle)
|
cairo_rectangle_t *rectangle)
|
||||||
{
|
{
|
||||||
cairo_win32_surface_t *surface = abstract_surface;
|
cairo_win32_surface_t *surface = abstract_surface;
|
||||||
RECT clip_box;
|
|
||||||
|
|
||||||
if (GetClipBox (surface->dc, &clip_box) == ERROR)
|
*rectangle = surface->extents;
|
||||||
return _cairo_win32_print_gdi_error ("_cairo_win3_surface_acquire_dest_image");
|
|
||||||
|
|
||||||
rectangle->x = clip_box.left;
|
|
||||||
rectangle->y = clip_box.top;
|
|
||||||
rectangle->width = clip_box.right - clip_box.left;
|
|
||||||
rectangle->height = clip_box.bottom - clip_box.top;
|
|
||||||
|
|
||||||
return CAIRO_STATUS_SUCCESS;
|
return CAIRO_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -1007,8 +974,19 @@ cairo_win32_surface_create (HDC hdc)
|
||||||
surface->clip_rect.width = rect.right - rect.left;
|
surface->clip_rect.width = rect.right - rect.left;
|
||||||
surface->clip_rect.height = rect.bottom - rect.top;
|
surface->clip_rect.height = rect.bottom - rect.top;
|
||||||
|
|
||||||
surface->set_clip = 0;
|
if (surface->clip_rect.width == 0 ||
|
||||||
surface->saved_clip = NULL;
|
surface->clip_rect.height == 0)
|
||||||
|
{
|
||||||
|
surface->saved_clip = NULL;
|
||||||
|
} else {
|
||||||
|
surface->saved_clip = CreateRectRgn (0, 0, 0, 0);
|
||||||
|
if (GetClipRgn (hdc, surface->saved_clip) == 0) {
|
||||||
|
DeleteObject(surface->saved_clip);
|
||||||
|
surface->saved_clip = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
surface->extents = surface->clip_rect;
|
||||||
|
|
||||||
_cairo_surface_init (&surface->base, &cairo_win32_surface_backend);
|
_cairo_surface_init (&surface->base, &cairo_win32_surface_backend);
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ Index: src/cairo-gstate.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- src/cairo-gstate.c.orig
|
--- src/cairo-gstate.c.orig
|
||||||
+++ src/cairo-gstate.c
|
+++ src/cairo-gstate.c
|
||||||
@@ -501,37 +501,10 @@ _cairo_gstate_get_miter_limit (cairo_gst
|
@@ -508,37 +508,10 @@ _cairo_gstate_get_miter_limit (cairo_gst
|
||||||
return gstate->stroke_style.miter_limit;
|
return gstate->stroke_style.miter_limit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ Index: src/cairo-gstate.c
|
||||||
}
|
}
|
||||||
|
|
||||||
cairo_status_t
|
cairo_status_t
|
||||||
@@ -617,9 +590,6 @@ _cairo_gstate_set_matrix (cairo_gstate_t
|
@@ -624,9 +597,6 @@ _cairo_gstate_set_matrix (cairo_gstate_t
|
||||||
if (status)
|
if (status)
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ Index: src/cairo-gstate.c
|
||||||
return CAIRO_STATUS_SUCCESS;
|
return CAIRO_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -631,9 +601,6 @@ _cairo_gstate_identity_matrix (cairo_gst
|
@@ -638,9 +608,6 @@ _cairo_gstate_identity_matrix (cairo_gst
|
||||||
cairo_matrix_init_identity (&gstate->ctm);
|
cairo_matrix_init_identity (&gstate->ctm);
|
||||||
cairo_matrix_init_identity (&gstate->ctm_inverse);
|
cairo_matrix_init_identity (&gstate->ctm_inverse);
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ Index: src/cairo-gstate.c
|
||||||
return CAIRO_STATUS_SUCCESS;
|
return CAIRO_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -675,15 +642,11 @@ void
|
@@ -682,15 +649,11 @@ void
|
||||||
_cairo_gstate_user_to_backend (cairo_gstate_t *gstate, double *x, double *y)
|
_cairo_gstate_user_to_backend (cairo_gstate_t *gstate, double *x, double *y)
|
||||||
{
|
{
|
||||||
cairo_matrix_transform_point (&gstate->ctm, x, y);
|
cairo_matrix_transform_point (&gstate->ctm, x, y);
|
||||||
|
@ -76,7 +76,7 @@ Index: src/cairo-gstate.c
|
||||||
cairo_matrix_transform_point (&gstate->ctm_inverse, x, y);
|
cairo_matrix_transform_point (&gstate->ctm_inverse, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -704,16 +667,8 @@ _cairo_gstate_copy_transformed_pattern (
|
@@ -711,16 +674,8 @@ _cairo_gstate_copy_transformed_pattern (
|
||||||
cairo_pattern_t *original,
|
cairo_pattern_t *original,
|
||||||
cairo_matrix_t *ctm_inverse)
|
cairo_matrix_t *ctm_inverse)
|
||||||
{
|
{
|
||||||
|
@ -237,7 +237,7 @@ Index: src/cairo-surface.c
|
||||||
/**
|
/**
|
||||||
* _cairo_surface_set_error:
|
* _cairo_surface_set_error:
|
||||||
* @surface: a surface
|
* @surface: a surface
|
||||||
@@ -523,7 +539,10 @@ cairo_surface_mark_dirty_rectangle (cair
|
@@ -533,7 +549,10 @@ cairo_surface_mark_dirty_rectangle (cair
|
||||||
if (surface->backend->mark_dirty_rectangle) {
|
if (surface->backend->mark_dirty_rectangle) {
|
||||||
cairo_status_t status;
|
cairo_status_t status;
|
||||||
|
|
||||||
|
@ -249,7 +249,7 @@ Index: src/cairo-surface.c
|
||||||
|
|
||||||
if (status)
|
if (status)
|
||||||
_cairo_surface_set_error (surface, status);
|
_cairo_surface_set_error (surface, status);
|
||||||
@@ -618,6 +637,7 @@ _cairo_surface_release_source_image (cai
|
@@ -628,6 +647,7 @@ _cairo_surface_release_source_image (cai
|
||||||
* @surface: a #cairo_surface_t
|
* @surface: a #cairo_surface_t
|
||||||
* @interest_rect: area of @surface for which fallback drawing is being done.
|
* @interest_rect: area of @surface for which fallback drawing is being done.
|
||||||
* A value of %NULL indicates that the entire surface is desired.
|
* A value of %NULL indicates that the entire surface is desired.
|
||||||
|
@ -257,7 +257,7 @@ Index: src/cairo-surface.c
|
||||||
* @image_out: location to store a pointer to an image surface that includes at least
|
* @image_out: location to store a pointer to an image surface that includes at least
|
||||||
* the intersection of @interest_rect with the visible area of @surface.
|
* the intersection of @interest_rect with the visible area of @surface.
|
||||||
* This surface could be @surface itself, a surface held internal to @surface,
|
* This surface could be @surface itself, a surface held internal to @surface,
|
||||||
@@ -650,10 +670,26 @@ _cairo_surface_acquire_dest_image (cairo
|
@@ -660,10 +680,26 @@ _cairo_surface_acquire_dest_image (cairo
|
||||||
cairo_rectangle_t *image_rect,
|
cairo_rectangle_t *image_rect,
|
||||||
void **image_extra)
|
void **image_extra)
|
||||||
{
|
{
|
||||||
|
@ -286,7 +286,7 @@ Index: src/cairo-surface.c
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -675,10 +711,22 @@ _cairo_surface_release_dest_image (cairo
|
@@ -685,10 +721,22 @@ _cairo_surface_release_dest_image (cairo
|
||||||
cairo_rectangle_t *image_rect,
|
cairo_rectangle_t *image_rect,
|
||||||
void *image_extra)
|
void *image_extra)
|
||||||
{
|
{
|
||||||
|
@ -310,7 +310,7 @@ Index: src/cairo-surface.c
|
||||||
image, image_rect, image_extra);
|
image, image_rect, image_extra);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -714,6 +762,13 @@ _cairo_surface_clone_similar (cairo_surf
|
@@ -724,6 +772,13 @@ _cairo_surface_clone_similar (cairo_surf
|
||||||
return CAIRO_INT_STATUS_UNSUPPORTED;
|
return CAIRO_INT_STATUS_UNSUPPORTED;
|
||||||
|
|
||||||
status = surface->backend->clone_similar (surface, src, clone_out);
|
status = surface->backend->clone_similar (surface, src, clone_out);
|
||||||
|
@ -324,7 +324,7 @@ Index: src/cairo-surface.c
|
||||||
if (status != CAIRO_INT_STATUS_UNSUPPORTED)
|
if (status != CAIRO_INT_STATUS_UNSUPPORTED)
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
@@ -722,6 +777,12 @@ _cairo_surface_clone_similar (cairo_surf
|
@@ -732,6 +787,12 @@ _cairo_surface_clone_similar (cairo_surf
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
status = surface->backend->clone_similar (surface, &image->base, clone_out);
|
status = surface->backend->clone_similar (surface, &image->base, clone_out);
|
||||||
|
@ -337,7 +337,7 @@ Index: src/cairo-surface.c
|
||||||
|
|
||||||
/* If the above failed point, we could implement a full fallback
|
/* If the above failed point, we could implement a full fallback
|
||||||
* using acquire_dest_image, but that's going to be very
|
* using acquire_dest_image, but that's going to be very
|
||||||
@@ -798,7 +859,8 @@ _cairo_surface_composite (cairo_operator
|
@@ -808,7 +869,8 @@ _cairo_surface_composite (cairo_operator
|
||||||
src, mask, dst,
|
src, mask, dst,
|
||||||
src_x, src_y,
|
src_x, src_y,
|
||||||
mask_x, mask_y,
|
mask_x, mask_y,
|
||||||
|
@ -347,7 +347,7 @@ Index: src/cairo-surface.c
|
||||||
width, height);
|
width, height);
|
||||||
if (status != CAIRO_INT_STATUS_UNSUPPORTED)
|
if (status != CAIRO_INT_STATUS_UNSUPPORTED)
|
||||||
return status;
|
return status;
|
||||||
@@ -927,6 +989,8 @@ _cairo_surface_fill_rectangles (cairo_su
|
@@ -937,6 +999,8 @@ _cairo_surface_fill_rectangles (cairo_su
|
||||||
int num_rects)
|
int num_rects)
|
||||||
{
|
{
|
||||||
cairo_int_status_t status;
|
cairo_int_status_t status;
|
||||||
|
@ -356,7 +356,7 @@ Index: src/cairo-surface.c
|
||||||
|
|
||||||
assert (! surface->is_snapshot);
|
assert (! surface->is_snapshot);
|
||||||
|
|
||||||
@@ -940,8 +1004,26 @@ _cairo_surface_fill_rectangles (cairo_su
|
@@ -950,8 +1014,26 @@ _cairo_surface_fill_rectangles (cairo_su
|
||||||
return CAIRO_STATUS_SUCCESS;
|
return CAIRO_STATUS_SUCCESS;
|
||||||
|
|
||||||
if (surface->backend->fill_rectangles) {
|
if (surface->backend->fill_rectangles) {
|
||||||
|
@ -385,7 +385,7 @@ Index: src/cairo-surface.c
|
||||||
if (status != CAIRO_INT_STATUS_UNSUPPORTED)
|
if (status != CAIRO_INT_STATUS_UNSUPPORTED)
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
@@ -1002,10 +1084,31 @@ _cairo_surface_stroke (cairo_surface_t
|
@@ -1012,10 +1094,31 @@ _cairo_surface_stroke (cairo_surface_t
|
||||||
|
|
||||||
if (surface->backend->stroke) {
|
if (surface->backend->stroke) {
|
||||||
cairo_status_t status;
|
cairo_status_t status;
|
||||||
|
@ -418,7 +418,7 @@ Index: src/cairo-surface.c
|
||||||
if (status != CAIRO_INT_STATUS_UNSUPPORTED)
|
if (status != CAIRO_INT_STATUS_UNSUPPORTED)
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
@@ -1026,13 +1129,33 @@ _cairo_surface_fill (cairo_surface_t *su
|
@@ -1036,13 +1139,33 @@ _cairo_surface_fill (cairo_surface_t *su
|
||||||
cairo_antialias_t antialias)
|
cairo_antialias_t antialias)
|
||||||
{
|
{
|
||||||
cairo_status_t status;
|
cairo_status_t status;
|
||||||
|
@ -453,7 +453,7 @@ Index: src/cairo-surface.c
|
||||||
if (status != CAIRO_INT_STATUS_UNSUPPORTED)
|
if (status != CAIRO_INT_STATUS_UNSUPPORTED)
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
@@ -1057,6 +1180,7 @@ _cairo_surface_composite_trapezoids (cai
|
@@ -1067,6 +1190,7 @@ _cairo_surface_composite_trapezoids (cai
|
||||||
int num_traps)
|
int num_traps)
|
||||||
{
|
{
|
||||||
cairo_int_status_t status;
|
cairo_int_status_t status;
|
||||||
|
@ -461,7 +461,7 @@ Index: src/cairo-surface.c
|
||||||
|
|
||||||
assert (! dst->is_snapshot);
|
assert (! dst->is_snapshot);
|
||||||
|
|
||||||
@@ -1072,13 +1196,36 @@ _cairo_surface_composite_trapezoids (cai
|
@@ -1082,13 +1206,36 @@ _cairo_surface_composite_trapezoids (cai
|
||||||
return CAIRO_STATUS_SURFACE_FINISHED;
|
return CAIRO_STATUS_SURFACE_FINISHED;
|
||||||
|
|
||||||
if (dst->backend->composite_trapezoids) {
|
if (dst->backend->composite_trapezoids) {
|
||||||
|
@ -500,7 +500,7 @@ Index: src/cairo-surface.c
|
||||||
if (status != CAIRO_INT_STATUS_UNSUPPORTED)
|
if (status != CAIRO_INT_STATUS_UNSUPPORTED)
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
@@ -1225,6 +1372,9 @@ _cairo_surface_set_clip_region (cairo_su
|
@@ -1235,6 +1382,9 @@ _cairo_surface_set_clip_region (cairo_su
|
||||||
pixman_region16_t *region,
|
pixman_region16_t *region,
|
||||||
unsigned int serial)
|
unsigned int serial)
|
||||||
{
|
{
|
||||||
|
@ -510,7 +510,7 @@ Index: src/cairo-surface.c
|
||||||
if (surface->status)
|
if (surface->status)
|
||||||
return surface->status;
|
return surface->status;
|
||||||
|
|
||||||
@@ -1232,10 +1382,48 @@ _cairo_surface_set_clip_region (cairo_su
|
@@ -1242,10 +1392,50 @@ _cairo_surface_set_clip_region (cairo_su
|
||||||
return CAIRO_STATUS_SURFACE_FINISHED;
|
return CAIRO_STATUS_SURFACE_FINISHED;
|
||||||
|
|
||||||
assert (surface->backend->set_clip_region != NULL);
|
assert (surface->backend->set_clip_region != NULL);
|
||||||
|
@ -532,12 +532,14 @@ Index: src/cairo-surface.c
|
||||||
+ pixman_box16_t *rects = pixman_region_rects (region);
|
+ pixman_box16_t *rects = pixman_region_rects (region);
|
||||||
+ for (i = 0; i < nr; i++) {
|
+ for (i = 0; i < nr; i++) {
|
||||||
+ pixman_box16_t tmpb;
|
+ pixman_box16_t tmpb;
|
||||||
|
+ pixman_region16_t *tmpr;
|
||||||
|
+
|
||||||
+ tmpb.x1 = BACKEND_X(surface, rects[i].x1);
|
+ tmpb.x1 = BACKEND_X(surface, rects[i].x1);
|
||||||
+ tmpb.y1 = BACKEND_Y(surface, rects[i].y1);
|
+ tmpb.y1 = BACKEND_Y(surface, rects[i].y1);
|
||||||
+ tmpb.x2 = BACKEND_X(surface, rects[i].x2);
|
+ tmpb.x2 = BACKEND_X(surface, rects[i].x2);
|
||||||
+ tmpb.y2 = BACKEND_Y(surface, rects[i].y2);
|
+ tmpb.y2 = BACKEND_Y(surface, rects[i].y2);
|
||||||
+
|
+
|
||||||
+ pixman_region16_t *tmpr = pixman_region_create_simple (&tmpb);
|
+ tmpr = pixman_region_create_simple (&tmpb);
|
||||||
+
|
+
|
||||||
+ pixman_region_append (dev_region, tmpr);
|
+ pixman_region_append (dev_region, tmpr);
|
||||||
+ pixman_region_destroy (tmpr);
|
+ pixman_region_destroy (tmpr);
|
||||||
|
@ -561,7 +563,7 @@ Index: src/cairo-surface.c
|
||||||
}
|
}
|
||||||
|
|
||||||
cairo_int_status_t
|
cairo_int_status_t
|
||||||
@@ -1245,6 +1433,10 @@ _cairo_surface_intersect_clip_path (cair
|
@@ -1255,6 +1445,10 @@ _cairo_surface_intersect_clip_path (cair
|
||||||
double tolerance,
|
double tolerance,
|
||||||
cairo_antialias_t antialias)
|
cairo_antialias_t antialias)
|
||||||
{
|
{
|
||||||
|
@ -572,7 +574,7 @@ Index: src/cairo-surface.c
|
||||||
if (surface->status)
|
if (surface->status)
|
||||||
return surface->status;
|
return surface->status;
|
||||||
|
|
||||||
@@ -1253,11 +1445,30 @@ _cairo_surface_intersect_clip_path (cair
|
@@ -1263,11 +1457,30 @@ _cairo_surface_intersect_clip_path (cair
|
||||||
|
|
||||||
assert (surface->backend->intersect_clip_path != NULL);
|
assert (surface->backend->intersect_clip_path != NULL);
|
||||||
|
|
||||||
|
@ -608,7 +610,7 @@ Index: src/cairo-surface.c
|
||||||
}
|
}
|
||||||
|
|
||||||
static cairo_status_t
|
static cairo_status_t
|
||||||
@@ -1273,11 +1484,11 @@ _cairo_surface_set_clip_path_recursive (
|
@@ -1283,11 +1496,11 @@ _cairo_surface_set_clip_path_recursive (
|
||||||
if (status)
|
if (status)
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
|
@ -625,7 +627,7 @@ Index: src/cairo-surface.c
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1374,13 +1585,20 @@ cairo_status_t
|
@@ -1390,13 +1603,20 @@ cairo_status_t
|
||||||
_cairo_surface_get_extents (cairo_surface_t *surface,
|
_cairo_surface_get_extents (cairo_surface_t *surface,
|
||||||
cairo_rectangle_t *rectangle)
|
cairo_rectangle_t *rectangle)
|
||||||
{
|
{
|
||||||
|
@ -647,7 +649,7 @@ Index: src/cairo-surface.c
|
||||||
}
|
}
|
||||||
|
|
||||||
cairo_status_t
|
cairo_status_t
|
||||||
@@ -1392,13 +1610,34 @@ _cairo_surface_show_glyphs (cairo_surfac
|
@@ -1408,13 +1628,34 @@ _cairo_surface_show_glyphs (cairo_surfac
|
||||||
cairo_scaled_font_t *scaled_font)
|
cairo_scaled_font_t *scaled_font)
|
||||||
{
|
{
|
||||||
cairo_status_t status;
|
cairo_status_t status;
|
||||||
|
@ -684,7 +686,7 @@ Index: src/cairo-surface.c
|
||||||
if (status != CAIRO_INT_STATUS_UNSUPPORTED)
|
if (status != CAIRO_INT_STATUS_UNSUPPORTED)
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
@@ -1428,6 +1667,7 @@ _cairo_surface_old_show_glyphs (cairo_sc
|
@@ -1444,6 +1685,7 @@ _cairo_surface_old_show_glyphs (cairo_sc
|
||||||
int num_glyphs)
|
int num_glyphs)
|
||||||
{
|
{
|
||||||
cairo_status_t status;
|
cairo_status_t status;
|
||||||
|
@ -692,7 +694,7 @@ Index: src/cairo-surface.c
|
||||||
|
|
||||||
assert (! dst->is_snapshot);
|
assert (! dst->is_snapshot);
|
||||||
|
|
||||||
@@ -1437,14 +1677,35 @@ _cairo_surface_old_show_glyphs (cairo_sc
|
@@ -1453,14 +1695,35 @@ _cairo_surface_old_show_glyphs (cairo_sc
|
||||||
if (dst->finished)
|
if (dst->finished)
|
||||||
return CAIRO_STATUS_SURFACE_FINISHED;
|
return CAIRO_STATUS_SURFACE_FINISHED;
|
||||||
|
|
||||||
|
@ -731,7 +733,7 @@ Index: src/cairo-surface.c
|
||||||
status = CAIRO_INT_STATUS_UNSUPPORTED;
|
status = CAIRO_INT_STATUS_UNSUPPORTED;
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
@@ -1554,7 +1815,15 @@ _cairo_surface_composite_fixup_unbounded
|
@@ -1570,7 +1833,15 @@ _cairo_surface_composite_fixup_unbounded
|
||||||
cairo_rectangle_t *mask_rectangle = NULL;
|
cairo_rectangle_t *mask_rectangle = NULL;
|
||||||
|
|
||||||
assert (! dst->is_snapshot);
|
assert (! dst->is_snapshot);
|
||||||
|
@ -748,7 +750,7 @@ Index: src/cairo-surface.c
|
||||||
/* The RENDER/libpixman operators are clipped to the bounds of the untransformed,
|
/* The RENDER/libpixman operators are clipped to the bounds of the untransformed,
|
||||||
* non-repeating sources and masks. Other sources and masks can be ignored.
|
* non-repeating sources and masks. Other sources and masks can be ignored.
|
||||||
*/
|
*/
|
||||||
@@ -1629,6 +1898,10 @@ _cairo_surface_composite_shape_fixup_unb
|
@@ -1645,6 +1916,10 @@ _cairo_surface_composite_shape_fixup_unb
|
||||||
cairo_rectangle_t *mask_rectangle = NULL;
|
cairo_rectangle_t *mask_rectangle = NULL;
|
||||||
|
|
||||||
assert (! dst->is_snapshot);
|
assert (! dst->is_snapshot);
|
||||||
|
@ -827,7 +829,7 @@ Index: src/cairoint.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- src/cairoint.h.orig
|
--- src/cairoint.h.orig
|
||||||
+++ src/cairoint.h
|
+++ src/cairoint.h
|
||||||
@@ -1460,6 +1460,13 @@ _cairo_path_fixed_bounds (cairo_path_fix
|
@@ -1466,6 +1466,13 @@ _cairo_path_fixed_bounds (cairo_path_fix
|
||||||
double *x1, double *y1,
|
double *x1, double *y1,
|
||||||
double *x2, double *y2);
|
double *x2, double *y2);
|
||||||
|
|
||||||
|
@ -841,7 +843,7 @@ Index: src/cairoint.h
|
||||||
/* cairo_path_fill.c */
|
/* cairo_path_fill.c */
|
||||||
cairo_private cairo_status_t
|
cairo_private cairo_status_t
|
||||||
_cairo_path_fixed_fill_to_traps (cairo_path_fixed_t *path,
|
_cairo_path_fixed_fill_to_traps (cairo_path_fixed_t *path,
|
||||||
@@ -1978,6 +1985,13 @@ cairo_private cairo_status_t
|
@@ -1984,6 +1991,13 @@ cairo_private cairo_status_t
|
||||||
_cairo_traps_extract_region (cairo_traps_t *tr,
|
_cairo_traps_extract_region (cairo_traps_t *tr,
|
||||||
pixman_region16_t **region);
|
pixman_region16_t **region);
|
||||||
|
|
||||||
|
|
|
@ -167,13 +167,14 @@ Index: pixman/src/fbcompose.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- pixman/src/fbcompose.c.orig
|
--- pixman/src/fbcompose.c.orig
|
||||||
+++ pixman/src/fbcompose.c
|
+++ pixman/src/fbcompose.c
|
||||||
@@ -33,8 +33,15 @@
|
@@ -33,8 +33,16 @@
|
||||||
|
|
||||||
#include "pixregionint.h"
|
#include "pixregionint.h"
|
||||||
|
|
||||||
+#ifdef _MSC_VER
|
+#ifdef _MSC_VER
|
||||||
+#define _USE_MATH_DEFINES
|
+#define _USE_MATH_DEFINES
|
||||||
+#endif
|
+#endif
|
||||||
|
+
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
+#ifndef M_PI
|
+#ifndef M_PI
|
||||||
|
@ -204,3 +205,53 @@ Index: src/cairo-atsui-font.c
|
||||||
typedef struct _cairo_atsui_font_face cairo_atsui_font_face_t;
|
typedef struct _cairo_atsui_font_face cairo_atsui_font_face_t;
|
||||||
typedef struct _cairo_atsui_font cairo_atsui_font_t;
|
typedef struct _cairo_atsui_font cairo_atsui_font_t;
|
||||||
|
|
||||||
|
Index: src/cairo-features.h.in
|
||||||
|
===================================================================
|
||||||
|
--- src/cairo-features.h.in.orig
|
||||||
|
+++ src/cairo-features.h.in
|
||||||
|
@@ -37,6 +37,8 @@
|
||||||
|
#ifndef CAIRO_FEATURES_H
|
||||||
|
#define CAIRO_FEATURES_H
|
||||||
|
|
||||||
|
+#include "cairo-platform.h"
|
||||||
|
+
|
||||||
|
#ifdef __cplusplus
|
||||||
|
# define CAIRO_BEGIN_DECLS extern "C" {
|
||||||
|
# define CAIRO_END_DECLS }
|
||||||
|
@@ -49,11 +51,11 @@
|
||||||
|
# define cairo_public
|
||||||
|
#endif
|
||||||
|
|
||||||
|
-#define CAIRO_VERSION_MAJOR @CAIRO_VERSION_MAJOR@
|
||||||
|
-#define CAIRO_VERSION_MINOR @CAIRO_VERSION_MINOR@
|
||||||
|
-#define CAIRO_VERSION_MICRO @CAIRO_VERSION_MICRO@
|
||||||
|
+#define CAIRO_VERSION_MAJOR 1
|
||||||
|
+#define CAIRO_VERSION_MINOR 1
|
||||||
|
+#define CAIRO_VERSION_MICRO 1
|
||||||
|
|
||||||
|
-#define CAIRO_VERSION_STRING "@CAIRO_VERSION_MAJOR@.@CAIRO_VERSION_MINOR@.@CAIRO_VERSION_MICRO@"
|
||||||
|
+#define CAIRO_VERSION_STRING "1.1.1"
|
||||||
|
|
||||||
|
@PS_SURFACE_FEATURE@
|
||||||
|
|
||||||
|
Index: src/cairo-win32-surface.c
|
||||||
|
===================================================================
|
||||||
|
--- src/cairo-win32-surface.c.orig
|
||||||
|
+++ src/cairo-win32-surface.c
|
||||||
|
@@ -1062,6 +1062,9 @@ CRITICAL_SECTION cairo_toy_font_face_has
|
||||||
|
CRITICAL_SECTION cairo_scaled_font_map_mutex;
|
||||||
|
CRITICAL_SECTION cairo_ft_unscaled_font_map_mutex;
|
||||||
|
|
||||||
|
+#if 0
|
||||||
|
+// Mozilla doesn't use the mutexes, and this definition of DllMain
|
||||||
|
+// conflicts with libxul.
|
||||||
|
BOOL WINAPI
|
||||||
|
DllMain (HINSTANCE hinstDLL,
|
||||||
|
DWORD fdwReason,
|
||||||
|
@@ -1083,4 +1086,6 @@ DllMain (HINSTANCE hinstDLL,
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
+#endif // 0
|
||||||
|
+
|
||||||
|
#endif
|
||||||
|
|
|
@ -151,25 +151,23 @@ Index: src/cairo-gstate.c
|
||||||
- 0, 0,
|
- 0, 0,
|
||||||
- _cairo_surface_get_width (gstate->target),
|
- _cairo_surface_get_width (gstate->target),
|
||||||
- _cairo_surface_get_height (gstate->target));
|
- _cairo_surface_get_height (gstate->target));
|
||||||
-
|
+ /* If this gstate is already redirected, this is an error; we need a
|
||||||
|
+ * new gstate to be able to redirect */
|
||||||
|
+ assert (gstate->parent_target == NULL);
|
||||||
|
|
||||||
- _cairo_surface_fini (&mask);
|
- _cairo_surface_fini (&mask);
|
||||||
-
|
-
|
||||||
- pix = _cairo_surface_get_drawable (gstate->target);
|
- pix = _cairo_surface_get_drawable (gstate->target);
|
||||||
- XFreePixmap (gstate->dpy, pix);
|
- XFreePixmap (gstate->dpy, pix);
|
||||||
-
|
|
||||||
- cairo_surface_destroy (gstate->target);
|
|
||||||
- gstate->target = gstate->parent_surface;
|
|
||||||
- gstate->parent_surface = NULL;
|
|
||||||
+ /* If this gstate is already redirected, this is an error; we need a
|
|
||||||
+ * new gstate to be able to redirect */
|
|
||||||
+ assert (gstate->parent_target == NULL);
|
|
||||||
+
|
|
||||||
+ /* Set up our new parent_target based on our current target;
|
+ /* Set up our new parent_target based on our current target;
|
||||||
+ * gstate->parent_target will take the ref that is held by gstate->target
|
+ * gstate->parent_target will take the ref that is held by gstate->target
|
||||||
+ */
|
+ */
|
||||||
+ cairo_surface_destroy (gstate->parent_target);
|
+ cairo_surface_destroy (gstate->parent_target);
|
||||||
+ gstate->parent_target = gstate->target;
|
+ gstate->parent_target = gstate->target;
|
||||||
+
|
|
||||||
|
- cairo_surface_destroy (gstate->target);
|
||||||
|
- gstate->target = gstate->parent_surface;
|
||||||
|
- gstate->parent_surface = NULL;
|
||||||
+ /* Now set up our new target; we overwrite gstate->target directly,
|
+ /* Now set up our new target; we overwrite gstate->target directly,
|
||||||
+ * since its ref is now owned by gstate->parent_target */
|
+ * since its ref is now owned by gstate->parent_target */
|
||||||
+ gstate->target = cairo_surface_reference (child);
|
+ gstate->target = cairo_surface_reference (child);
|
||||||
|
@ -449,7 +447,7 @@ Index: src/cairoint.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- src/cairoint.h.orig
|
--- src/cairoint.h.orig
|
||||||
+++ src/cairoint.h
|
+++ src/cairoint.h
|
||||||
@@ -1073,9 +1073,24 @@ _cairo_gstate_clone (cairo_gstate_t *gst
|
@@ -1077,9 +1077,24 @@ _cairo_gstate_clone (cairo_gstate_t *gst
|
||||||
cairo_private void
|
cairo_private void
|
||||||
_moz_cairo_gstate_set_target (cairo_gstate_t *gstate, cairo_surface_t *target);
|
_moz_cairo_gstate_set_target (cairo_gstate_t *gstate, cairo_surface_t *target);
|
||||||
|
|
||||||
|
@ -474,7 +472,7 @@ Index: src/cairoint.h
|
||||||
cairo_private cairo_status_t
|
cairo_private cairo_status_t
|
||||||
_cairo_gstate_set_source (cairo_gstate_t *gstate, cairo_pattern_t *source);
|
_cairo_gstate_set_source (cairo_gstate_t *gstate, cairo_pattern_t *source);
|
||||||
|
|
||||||
@@ -2173,6 +2188,9 @@ slim_hidden_proto(cairo_restore)
|
@@ -2177,6 +2192,9 @@ slim_hidden_proto(cairo_restore)
|
||||||
slim_hidden_proto(cairo_save)
|
slim_hidden_proto(cairo_save)
|
||||||
slim_hidden_proto(cairo_stroke_preserve)
|
slim_hidden_proto(cairo_stroke_preserve)
|
||||||
slim_hidden_proto(cairo_surface_destroy)
|
slim_hidden_proto(cairo_surface_destroy)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче