зеркало из https://github.com/mozilla/gecko-dev.git
57 строки
1.7 KiB
Diff
Executable File
57 строки
1.7 KiB
Diff
Executable File
Index: gfx/cairo/cairo/src/cairo-win32-surface.c
|
|
===================================================================
|
|
--- gfx/cairo/cairo/src/cairo-win32-surface.c.orig 2006-02-11 16:02:20.937500000 -0800
|
|
+++ gfx/cairo/cairo/src/cairo-win32-surface.c 2006-02-12 01:10:16.358500000 -0800
|
|
@@ -677,6 +677,33 @@
|
|
if (!integer_transform)
|
|
return CAIRO_INT_STATUS_UNSUPPORTED;
|
|
|
|
+ /* Fix up src coordinates; the src coords and size must be within the
|
|
+ * bounds of the source surface.
|
|
+ * XXX the region not covered should be appropriately rendered!
|
|
+ * - for OVER/SOURCE with RGB24 source -> opaque black
|
|
+ * - for SOURCE with ARGB32 source -> 100% transparent black
|
|
+ */
|
|
+ src_x += itx;
|
|
+ src_y += ity;
|
|
+
|
|
+ if (src_x < 0) {
|
|
+ width += src_x;
|
|
+ dst_x -= src_x;
|
|
+ src_x = 0;
|
|
+ }
|
|
+
|
|
+ if (src_y < 0) {
|
|
+ height += src_y;
|
|
+ dst_y -= src_y;
|
|
+ src_y = 0;
|
|
+ }
|
|
+
|
|
+ if (src_x + width > src->extents.width)
|
|
+ width = src->extents.width - src_x;
|
|
+
|
|
+ if (src_y + height > src->extents.height)
|
|
+ height = src->extents.height - src_y;
|
|
+
|
|
if (alpha == 255 &&
|
|
(op == CAIRO_OPERATOR_SOURCE ||
|
|
(src->format == CAIRO_FORMAT_RGB24 && op == CAIRO_OPERATOR_OVER))) {
|
|
@@ -685,7 +712,7 @@
|
|
dst_x, dst_y,
|
|
width, height,
|
|
src->dc,
|
|
- src_x + itx, src_y + ity,
|
|
+ src_x, src_y,
|
|
SRCCOPY))
|
|
return _cairo_win32_print_gdi_error ("_cairo_win32_surface_composite(BitBlt)");
|
|
|
|
@@ -696,7 +723,7 @@
|
|
op == CAIRO_OPERATOR_OVER) {
|
|
|
|
return _composite_alpha_blend (dst, src, alpha,
|
|
- src_x + itx, src_y + ity,
|
|
+ src_x, src_y,
|
|
dst_x, dst_y, width, height);
|
|
}
|
|
|