From ab29396ef9f68f5534f927b2b5bb0a7ffac86509 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 28 Dec 2006 19:51:20 -0500 Subject: [PATCH 01/53] [test] Add new test text-zero-len (#5177) The test passes an empty string to cairo_show_text, cairo_text_path, and cairo_text_extents, and NULL and an invalid pointer, with zero num_glyphs to cairo_show_glyphs, cairo_glyph_path, and cairo_glyph_extents. --- test/.gitignore | 1 + test/Makefile.am | 2 + test/text-zero-len-ref.png | Bin 0 -> 130 bytes test/text-zero-len.c | 88 +++++++++++++++++++++++++++++++++++++ 4 files changed, 91 insertions(+) create mode 100644 test/text-zero-len-ref.png create mode 100644 test/text-zero-len.c diff --git a/test/.gitignore b/test/.gitignore index c6e2c407b..75fa10c35 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -126,6 +126,7 @@ text-antialias-subpixel text-cache-crash text-pattern text-rotate +text-zero-len transforms translate-show-surface trap-clip diff --git a/test/Makefile.am b/test/Makefile.am index 16237dc03..efdb16234 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -90,6 +90,7 @@ text-antialias-subpixel \ text-cache-crash \ text-pattern \ text-rotate \ +text-zero-len \ transforms \ translate-show-surface \ trap-clip \ @@ -320,6 +321,7 @@ text-pattern-svg-argb32-ref.png \ text-pattern-svg-rgb24-ref.png \ text-rotate-ref.png \ text-rotate-rgb24-ref.png \ +text-zero-len-ref.png \ transforms-ref.png \ translate-show-surface-ref.png \ trap-clip-ref.png \ diff --git a/test/text-zero-len-ref.png b/test/text-zero-len-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..4bd2d04ffbd8d00d54e40c292753ab5db96ee899 GIT binary patch literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8Y)RhkE)4%caKYZ?lYt`aC7!;n z?ALf?8RWDQP93}f6jJeYaSX|5e0$K45y(5V;H&@JOwI*BCKAZAs9|8tt&U9wiFvyE KxvX + */ + +/* Related bug 5177 + * + * In short: + * + * _cairo_atsui_font_text_to_glyph with a zero-sized string crashes. + * + * Moreover, the fallback path in cairo_scaled_font_text_to_glyphs() + * when handling a zero-sized string, allocates a zero-sized glyph array + * and when NULL is returned by malloc, recognizes that as an out-of-memory + * error. The glibc implementation of malloc() does not return NULL from + * malloc(0), but I don't think it's a safe assumption. + * + * By just bailing out on zero-sized text, we fix both issues. + */ + +#include "cairo-test.h" + +#define WIDTH 60 +#define HEIGHT 60 +#define NUM_TEXT 20 +#define TEXT_SIZE 12 + +static cairo_test_draw_function_t draw; + +cairo_test_t test = { + "text-zero-len", + "Tests show_text and text_path with a zero-sized string", + WIDTH, HEIGHT, + draw +}; + +/* Draw the word cairo at NUM_TEXT different angles */ +static cairo_test_status_t +draw (cairo_t *cr, int width, int height) +{ + cairo_text_extents_t extents; + + cairo_select_font_face (cr, "Bitstream Vera Sans", + CAIRO_FONT_SLANT_NORMAL, + CAIRO_FONT_WEIGHT_NORMAL); + cairo_set_font_size (cr, 16); + + cairo_move_to (cr, 10, 25); + cairo_show_text (cr, ""); + cairo_show_glyphs (cr, NULL, 0); + cairo_show_glyphs (cr, (void*)8, 0); + + cairo_move_to (cr, 10, 55); + cairo_text_path (cr, ""); + cairo_glyph_path (cr, (void*)8, 0); + cairo_fill (cr); + + cairo_text_extents (cr, "", &extents); + cairo_glyph_extents (cr, (void*)8, 0, &extents); + + return CAIRO_TEST_SUCCESS; +} + +int +main (void) +{ + return cairo_test (&test); +} From eafd6e454a85c807f2addf7768046fea58aea3f9 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 28 Dec 2006 20:01:18 -0500 Subject: [PATCH 02/53] In _cairo_scaled_font_text_to_glyphs, bail if text is zero-length (#5177) --- src/cairo-scaled-font.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/cairo-scaled-font.c b/src/cairo-scaled-font.c index 73afb5ff0..c63f774f9 100755 --- a/src/cairo-scaled-font.c +++ b/src/cairo-scaled-font.c @@ -790,6 +790,12 @@ _cairo_scaled_font_text_to_glyphs (cairo_scaled_font_t *scaled_font, cairo_status_t status = CAIRO_STATUS_SUCCESS; cairo_scaled_glyph_t *scaled_glyph; + if (utf8[0] == '\0') { + *num_glyphs = 0; + *glyphs = NULL; + return CAIRO_STATUS_SUCCESS; + } + if (scaled_font->backend->text_to_glyphs) { status = scaled_font->backend->text_to_glyphs (scaled_font, x, y, utf8, From 26b06516a77fbbe88f2eb081e2763c1434959137 Mon Sep 17 00:00:00 2001 From: Dan Amelang Date: Sat, 30 Dec 2006 21:14:14 -0800 Subject: [PATCH 03/53] Use the "-" option (instead of "-a") when calling "strings" This is needed to fix the AX_C_FLOAT_WORDS_BIGENDIAN macro on Mac OS X 10.2, which was brought up here: https://bugs.freedesktop.org/show_bug.cgi?id=9124 --- acinclude.m4 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index a8c4743b8..3cfe41093 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -84,10 +84,10 @@ double d = 909042349670368103374704789055050114762116927356156320147971208440534 ]])], [ -if strings -a conftest.$ac_objext | grep noonsees >/dev/null ; then +if strings - conftest.$ac_objext | grep noonsees >/dev/null ; then ax_cv_c_float_words_bigendian=yes fi -if strings -a conftest.$ac_objext | grep seesnoon >/dev/null ; then +if strings - conftest.$ac_objext | grep seesnoon >/dev/null ; then if test "$ax_cv_c_float_words_bigendian" = unknown; then ax_cv_c_float_words_bigendian=no else From e6369f9478e84e32ca19d5f204dbe3eee828c429 Mon Sep 17 00:00:00 2001 From: Peter Weilbacher Date: Thu, 4 Jan 2007 00:11:44 +0100 Subject: [PATCH 04/53] Fix for OS/2 display drivers that cannot handle 32bit output (feed them a 24bit buffer instead). --- src/cairo-os2-surface.c | 70 +++++++++++++++++++++++++++++++++++------ 1 file changed, 60 insertions(+), 10 deletions(-) diff --git a/src/cairo-os2-surface.c b/src/cairo-os2-surface.c index 59718bb38..92bd711c6 100644 --- a/src/cairo-os2-surface.c +++ b/src/cairo-os2-surface.c @@ -251,7 +251,7 @@ _cairo_os2_surface_blit_pixels (cairo_os2_surface_t *surface, PRECTL prcl_begin_paint_rect) { POINTL aptlPoints[4]; - LONG lOldYInversion; + LONG lOldYInversion, rc = GPI_OK; /* Enable Y Inversion for the HPS, so the * GpiDrawBits will work with upside-top image, not with upside-down image! @@ -312,13 +312,63 @@ _cairo_os2_surface_blit_pixels (cairo_os2_surface_t *surface, } } #endif - GpiDrawBits (hps_begin_paint, - surface->pixels, - &(surface->bitmap_info), - 4, - aptlPoints, - ROP_SRCCOPY, - BBO_IGNORE); + rc = GpiDrawBits (hps_begin_paint, + surface->pixels, + &(surface->bitmap_info), + 4, + aptlPoints, + ROP_SRCCOPY, + BBO_IGNORE); + + if (rc != GPI_OK) { + /* if GpiDrawBits () failed then this is most likely because the + * display driver could not handle a 32bit bitmap. So we need to + * - create a buffer that only contains 3 bytes per pixel + * - change the bitmap info header to contain 24bit + * - pass the new buffer to GpiDrawBits () again + * - clean up the new buffer + */ + BITMAPINFOHEADER2 bmpheader; + unsigned char *pchPixBuf, *pchPixSource; + void *pBufStart; + ULONG ulPixels; + + /* allocate temporary pixel buffer */ + pchPixBuf = (unsigned char *) malloc (3 * surface->bitmap_info.cx * + surface->bitmap_info.cy); + pchPixSource = surface->pixels; /* start at beginning of pixel buffer */ + pBufStart = pchPixBuf; /* remember beginning of the new pixel buffer */ + + /* copy the first three bytes for each pixel but skip over the fourth */ + for (ulPixels = 0; ulPixels < surface->bitmap_info.cx * surface->bitmap_info.cy; ulPixels++) + { + /* copy BGR from source buffer */ + *pchPixBuf++ = *pchPixSource++; + *pchPixBuf++ = *pchPixSource++; + *pchPixBuf++ = *pchPixSource++; + pchPixSource++; /* jump over alpha channel in source buffer */ + } + + /* jump back to start of the buffer for display and cleanup */ + pchPixBuf = pBufStart; + + /* set up the bitmap header, but this time with 24bit depth only */ + memset (&bmpheader, 0, sizeof (bmpheader)); + bmpheader.cbFix = sizeof (BITMAPINFOHEADER2); + bmpheader.cx = surface->bitmap_info.cx; + bmpheader.cy = surface->bitmap_info.cy; + bmpheader.cPlanes = surface->bitmap_info.cPlanes; + bmpheader.cBitCount = 24; + rc = GpiDrawBits (hps_begin_paint, + pchPixBuf, + (PBITMAPINFO2)&bmpheader, + 4, + aptlPoints, + ROP_SRCCOPY, + BBO_IGNORE); + + free (pchPixBuf); + } /* Restore Y inversion */ GpiEnableYInversion (hps_begin_paint, lOldYInversion); @@ -372,7 +422,7 @@ _cairo_os2_surface_get_pixels_from_screen (cairo_os2_surface_t *surface, hps = GpiCreatePS (hab, hdc, &sizlTemp, - PU_PELS | GPIT_NORMAL | GPIA_ASSOC ); + PU_PELS | GPIT_NORMAL | GPIA_ASSOC); if (!hps) { DevCloseDC (hdc); return; @@ -405,7 +455,7 @@ _cairo_os2_surface_get_pixels_from_screen (cairo_os2_surface_t *surface, /* Target coordinates (Noninclusive) */ aptlPoints[0].x = 0; aptlPoints[0].y = 0; - + aptlPoints[1].x = sizlTemp.cx; aptlPoints[1].y = sizlTemp.cy; From d4a58b2437a21794562d874f3d390e0e59688bc0 Mon Sep 17 00:00:00 2001 From: Jonathan Watt Date: Thu, 4 Jan 2007 16:46:22 +0100 Subject: [PATCH 05/53] Remove WINVER from public header file --- src/cairo-win32-surface.c | 10 ++++++++++ src/cairo-win32.h | 10 ---------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/cairo-win32-surface.c b/src/cairo-win32-surface.c index 4fb09df14..120849d47 100644 --- a/src/cairo-win32-surface.c +++ b/src/cairo-win32-surface.c @@ -36,6 +36,16 @@ * Vladimir Vukicevic */ +#define WIN32_LEAN_AND_MEAN +/* We require Windows 2000 features such as ETO_PDY */ +#if !defined(WINVER) || (WINVER < 0x0500) +# define WINVER 0x0500 +#endif +#if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0500) +# define _WIN32_WINNT 0x0500 +#endif +#include + #include #include "cairoint.h" #include "cairo-clip-private.h" diff --git a/src/cairo-win32.h b/src/cairo-win32.h index 17d02c547..8719d338b 100644 --- a/src/cairo-win32.h +++ b/src/cairo-win32.h @@ -40,16 +40,6 @@ #if CAIRO_HAS_WIN32_SURFACE -#define WIN32_LEAN_AND_MEAN -/* We require Windows 2000 features. Although we don't use them here, things - * should still work if this header file ends up being the one to include - * windows.h into a source file, so: */ -#if !defined(WINVER) || (WINVER < 0x0500) -# define WINVER 0x0500 -#endif -#if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0500) -# define _WIN32_WINNT 0x0500 -#endif #include CAIRO_BEGIN_DECLS From 11dd9eab693297961b988a73e22bf4d5850eb485 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 4 Jan 2007 23:35:51 -0500 Subject: [PATCH 06/53] [src/Makefile.am] Don't remove cairo-features.h in "make clean" That's generated by configure, so it should be removed by "make distclean". --- src/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 907658a37..5206d3f65 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -261,9 +261,11 @@ $(backend_pkgconfigs): $(top_srcdir)/configure $(top_builddir)/config.h: $(top_srcdir)/config.h.in cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) config.h +DISTCLEANFILES += cairo-features.h cairo-features.h: cd $(top_builddir) && ./config.status src/cairo-features.h +CLEANFILES = cairo.def cairo.def: $(cairoinclude_HEADERS) @echo Generating $@ @(echo EXPORTS; \ @@ -290,5 +292,3 @@ install-data-local: TESTS_ENVIRONMENT = srcdir="$(srcdir)" TESTS = check-def.sh check-plt.sh check-headers.sh EXTRA_DIST += $(TESTS) - -CLEANFILES = cairo.def cairo-features.h From cc11c264ec0c7d6586c9349bcdbe3f4156e7ab6e Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Wed, 3 Jan 2007 16:27:52 -0800 Subject: [PATCH 07/53] Add long-lines perf case This shows some very bad slowness for lines that are mostly offscreen (like 100x slower than just drawing the visible portion). --- perf/Makefile.am | 1 + perf/cairo-perf.c | 1 + perf/cairo-perf.h | 1 + perf/long-lines.c | 117 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 120 insertions(+) create mode 100644 perf/long-lines.c diff --git a/perf/Makefile.am b/perf/Makefile.am index 7e53420df..0d5f2446a 100644 --- a/perf/Makefile.am +++ b/perf/Makefile.am @@ -21,6 +21,7 @@ cairo_perf_SOURCES = \ cairo-stats.h \ box-outline.c \ fill.c \ + long-lines.c \ paint.c \ stroke.c \ subimage_copy.c \ diff --git a/perf/cairo-perf.c b/perf/cairo-perf.c index 1b6363550..0708ed952 100644 --- a/perf/cairo-perf.c +++ b/perf/cairo-perf.c @@ -327,5 +327,6 @@ cairo_perf_case_t perf_cases[] = { { world_map, 800, 800}, { box_outline, 100, 100}, { mosaic, 800, 800 }, + { long_lines, 100, 100}, { NULL } }; diff --git a/perf/cairo-perf.h b/perf/cairo-perf.h index bf56e8b4d..2bfd66519 100644 --- a/perf/cairo-perf.h +++ b/perf/cairo-perf.h @@ -103,5 +103,6 @@ CAIRO_PERF_DECL (zrusin); CAIRO_PERF_DECL (world_map); CAIRO_PERF_DECL (box_outline); CAIRO_PERF_DECL (mosaic); +CAIRO_PERF_DECL (long_lines); #endif diff --git a/perf/long-lines.c b/perf/long-lines.c new file mode 100644 index 000000000..62e8e16f9 --- /dev/null +++ b/perf/long-lines.c @@ -0,0 +1,117 @@ +/* + * Copyright © 2006 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: Carl D. Worth + */ + +#include "cairo-perf.h" + +/* This test case is designed to illustrate a performance bug in + * drawing very long lines, where most of the line is out of bounds of + * the destination surface, (but some portion of the line is + * visibile). These results are in the "long-lines-uncropped" report. + * + * For comparison, this test also renders the visible portions of the + * same lines, (this is the "long-lines-cropped" report). + */ + +typedef enum { LONG_LINES_UNCROPPED, LONG_LINES_CROPPED } long_lines_crop_t; +#define NUM_LINES 20 +#define LONG_FACTOR 50.0 + +static cairo_perf_ticks_t +do_long_lines (cairo_t *cr, int width, int height, long_lines_crop_t crop) +{ + int i; + double x, y, dx, dy, min_x, min_y, max_x, max_y; + double outer_width, outer_height; + + cairo_save (cr); + + cairo_translate (cr, width / 2, height / 2); + + if (crop == LONG_LINES_UNCROPPED) { + outer_width = LONG_FACTOR * width; + outer_height = LONG_FACTOR * height; + cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); /* red */ + } else { + outer_width = width; + outer_height = height; + cairo_set_source_rgb (cr, 0.0, 1.0, 0.0); /* green */ + } + + min_x = x = - outer_width / 2.0; + min_y = y = - outer_height / 2.0; + max_x = outer_width / 2.0; + max_y = outer_width / 2.0; + dx = outer_width / NUM_LINES; + dy = outer_height / NUM_LINES; + + cairo_perf_timer_start (); + + for (i = 0; i < NUM_LINES; i++) { + cairo_move_to (cr, 0, 0); + cairo_line_to (cr, x, min_y); + cairo_stroke (cr); + + cairo_move_to (cr, 0, 0); + cairo_line_to (cr, x, max_y); + cairo_stroke (cr); + + cairo_move_to (cr, 0, 0); + cairo_line_to (cr, min_x, y); + cairo_stroke (cr); + + cairo_move_to (cr, 0, 0); + cairo_line_to (cr, max_x, y); + cairo_stroke (cr); + + x += dx; + y += dy; + } + + cairo_perf_timer_stop (); + + cairo_restore (cr); + + return cairo_perf_timer_elapsed (); +} + +static cairo_perf_ticks_t +long_lines_uncropped (cairo_t *cr, int width, int height) +{ + return do_long_lines (cr, width, height, LONG_LINES_UNCROPPED); +} + +static cairo_perf_ticks_t +long_lines_cropped (cairo_t *cr, int width, int height) +{ + return do_long_lines (cr, width, height, LONG_LINES_CROPPED); +} + +void +long_lines (cairo_perf_t *perf, cairo_t *cr, int width, int height) +{ + cairo_perf_run (perf, "long-lines-uncropped", long_lines_uncropped); + cairo_perf_run (perf, "long-lines-cropped", long_lines_cropped); +} From c96a71e709e537f690da6d4a184aa4c64fe11028 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Fri, 5 Jan 2007 15:56:06 -0800 Subject: [PATCH 08/53] Restrict _clip_and_composite_trapezoids to destination extents MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is a fix for a huge performance bug (as measured by perf/long-lines). Previously, if no explicit clip was set, _clip_and_composite_trapezoids would allocate a mask as large as the trapezoids and rasterize into it. With this fix, it restricts the mask by the extents of the destination surface. This doesn't address the identical performance problem with the xlib backend, which is due to a very similar bug in the X server. image-rgb long-lines-uncropped-100 465.42 -> 5.03: 92.66x speedup █████████████████████████████████████████████▉ image-rgba long-lines-uncropped-100 460.80 -> 5.02: 91.87x speedup █████████████████████████████████████████████▍ --- src/cairo-surface-fallback.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/cairo-surface-fallback.c b/src/cairo-surface-fallback.c index 02033c8c1..1a7d6663c 100644 --- a/src/cairo-surface-fallback.c +++ b/src/cairo-surface-fallback.c @@ -511,7 +511,7 @@ _clip_and_composite_trapezoids (cairo_pattern_t *src, cairo_antialias_t antialias) { cairo_status_t status; - pixman_region16_t *trap_region; + pixman_region16_t *trap_region = NULL; pixman_region16_t *clear_region = NULL; cairo_rectangle_int16_t extents; cairo_composite_traps_info_t traps_info; @@ -519,30 +519,38 @@ _clip_and_composite_trapezoids (cairo_pattern_t *src, if (traps->num_traps == 0) return CAIRO_STATUS_SUCCESS; + status = _cairo_surface_get_extents (dst, &extents); + if (status) + return status; + status = _cairo_traps_extract_region (traps, &trap_region); if (status) return status; if (_cairo_operator_bounded_by_mask (op)) { + cairo_rectangle_int16_t trap_extents; if (trap_region) { status = _cairo_clip_intersect_to_region (clip, trap_region); - _cairo_region_extents_rectangle (trap_region, &extents); + if (status) + goto out; + + _cairo_region_extents_rectangle (trap_region, &trap_extents); } else { - cairo_box_t trap_extents; - _cairo_traps_extents (traps, &trap_extents); - _cairo_box_round_to_rectangle (&trap_extents, &extents); - status = _cairo_clip_intersect_to_rectangle (clip, &extents); + cairo_box_t trap_box; + _cairo_traps_extents (traps, &trap_box); + _cairo_box_round_to_rectangle (&trap_box, &trap_extents); } + + _cairo_rectangle_intersect (&extents, &trap_extents); + status = _cairo_clip_intersect_to_rectangle (clip, &extents); + if (status) + goto out; } else { cairo_surface_t *clip_surface = clip ? clip->surface : NULL; - status = _cairo_surface_get_extents (dst, &extents); - if (status) - return status; - if (trap_region && !clip_surface) { /* If we optimize drawing with an unbounded operator to * _cairo_surface_fill_rectangles() or to drawing with a From caa3c2e1e7901031488f5dae243a755a4e4daec9 Mon Sep 17 00:00:00 2001 From: Alp Toker Date: Sun, 7 Jan 2007 02:03:30 +0000 Subject: [PATCH 09/53] Fix various code/comment typos --- pixman/src/pixregion.c | 2 +- src/cairo-matrix.c | 2 +- src/cairo-pdf-surface.c | 20 ++++++++++---------- src/cairo-win32-surface.c | 2 +- src/cairo-xcb-surface.c | 4 ++-- src/cairo-xlib-surface.c | 10 +++++----- 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/pixman/src/pixregion.c b/pixman/src/pixregion.c index 5112157ca..0404dff44 100644 --- a/pixman/src/pixregion.c +++ b/pixman/src/pixregion.c @@ -1421,7 +1421,7 @@ QuickSortRects( * Step 2. Split the rectangles into the minimum number of proper y-x * banded regions. This may require horizontally merging * rectangles, and vertically coalescing bands. With any luck, - * this step in an identity tranformation (ala the Box widget), + * this step in an identity transformation (ala the Box widget), * or a coalescing into 1 box (ala Menus). * * Step 3. Merge the separate regions down to a single region by calling diff --git a/src/cairo-matrix.c b/src/cairo-matrix.c index d4f4bf776..b689f2aaf 100644 --- a/src/cairo-matrix.c +++ b/src/cairo-matrix.c @@ -102,7 +102,7 @@ slim_hidden_def(cairo_matrix_init); * @x0: location to store x0 (X-translation component) of matrix, or %NULL * @y0: location to store y0 (Y-translation component) of matrix, or %NULL * - * Gets the matrix values for the affine tranformation that @matrix represents. + * Gets the matrix values for the affine transformation that @matrix represents. * See cairo_matrix_init(). * * diff --git a/src/cairo-pdf-surface.c b/src/cairo-pdf-surface.c index a59cd99c6..2778d345a 100644 --- a/src/cairo-pdf-surface.c +++ b/src/cairo-pdf-surface.c @@ -626,7 +626,7 @@ compress_dup (const void *data, unsigned long data_size, } /* Emit alpha channel from the image into the given data, providing - * and id that can be used to reference the resulting SMask object. + * an id that can be used to reference the resulting SMask object. * * In the case that the alpha channel happens to be all opaque, then * no SMask object will be emitted and *id_ret will be set to 0. @@ -1006,7 +1006,7 @@ emit_linear_colorgradient (cairo_pdf_surface_t *surface, } static cairo_pdf_resource_t -emit_stiched_colorgradient (cairo_pdf_surface_t *surface, +emit_stitched_colorgradient (cairo_pdf_surface_t *surface, unsigned int n_stops, cairo_pdf_color_stop_t stops[]) { @@ -1020,7 +1020,7 @@ emit_stiched_colorgradient (cairo_pdf_surface_t *surface, &stops[i+1]); } - /* ... and stich them together */ + /* ... and stitch them together */ function = _cairo_pdf_surface_new_object (surface); _cairo_output_stream_printf (surface->output, "%d 0 obj\r\n" @@ -1065,7 +1065,7 @@ emit_stiched_colorgradient (cairo_pdf_surface_t *surface, return function; } -#define COLOR_STOP_EPSILLON 1e-6 +#define COLOR_STOP_EPSILON 1e-6 static cairo_pdf_resource_t emit_pattern_stops (cairo_pdf_surface_t *surface, cairo_gradient_pattern_t *pattern) @@ -1095,13 +1095,13 @@ emit_pattern_stops (cairo_pdf_surface_t *surface, cairo_gradient_pattern_t *patt /* make sure first offset is 0.0 and last offset is 1.0. (Otherwise Acrobat * Reader chokes.) */ - if (stops[0].offset > COLOR_STOP_EPSILLON) { + if (stops[0].offset > COLOR_STOP_EPSILON) { memcpy (allstops, stops, sizeof (cairo_pdf_color_stop_t)); stops = allstops; stops[0].offset = 0.0; n_stops++; } - if (stops[n_stops-1].offset < 1.0 - COLOR_STOP_EPSILLON) { + if (stops[n_stops-1].offset < 1.0 - COLOR_STOP_EPSILON) { memcpy (&stops[n_stops], &stops[n_stops - 1], sizeof (cairo_pdf_color_stop_t)); @@ -1110,12 +1110,12 @@ emit_pattern_stops (cairo_pdf_surface_t *surface, cairo_gradient_pattern_t *patt } if (n_stops == 2) { - /* no need for stiched function */ + /* no need for stitched function */ function = emit_linear_colorgradient (surface, &stops[0], &stops[1]); } else { - /* multiple stops: stich. XXX possible optimization: regulary spaced - * stops do not require stiching. XXX */ - function = emit_stiched_colorgradient (surface, + /* multiple stops: stitch. XXX possible optimization: regulary spaced + * stops do not require stitching. XXX */ + function = emit_stitched_colorgradient (surface, n_stops, stops); } diff --git a/src/cairo-win32-surface.c b/src/cairo-win32-surface.c index 120849d47..2c2a5fdf2 100644 --- a/src/cairo-win32-surface.c +++ b/src/cairo-win32-surface.c @@ -1828,7 +1828,7 @@ cairo_win32_surface_get_dc (cairo_surface_t *surface) } /** - * cario_win32_surface_get_image + * cairo_win32_surface_get_image * @surface: a #cairo_surface_t * * Returns a #cairo_surface_t image surface that refers to the same bits diff --git a/src/cairo-xcb-surface.c b/src/cairo-xcb-surface.c index 8b8ba1d5b..2fdf8a1d5 100644 --- a/src/cairo-xcb-surface.c +++ b/src/cairo-xcb-surface.c @@ -926,7 +926,7 @@ _operator_needs_alpha_composite (cairo_operator_t op, /* There is a bug in most older X servers with compositing using a * untransformed repeating source pattern when the source is in off-screen * video memory, and another with repeated transformed images using a - * general tranform matrix. When these bugs could be triggered, we need a + * general transform matrix. When these bugs could be triggered, we need a * fallback: in the common case where we have no transformation and the * source and destination have the same format/visual, we can do the * operation using the core protocol for the first bug, otherwise, we need @@ -2020,7 +2020,7 @@ _cairo_xcb_surface_add_glyph (xcb_connection_t *dpy, * * This is a postscript-y model, where each glyph has its own * coordinate space, so it's what we expose in terms of metrics. It's - * apparantly what everyone's expecting. Everyone except the Render + * apparently what everyone's expecting. Everyone except the Render * extension. Render wants to see a glyph tile starting at (0,0), with * an origin offset inside, like this: * diff --git a/src/cairo-xlib-surface.c b/src/cairo-xlib-surface.c index fbfae75de..6a0d3e441 100644 --- a/src/cairo-xlib-surface.c +++ b/src/cairo-xlib-surface.c @@ -1106,7 +1106,7 @@ _operator_needs_alpha_composite (cairo_operator_t op, /* There is a bug in most older X servers with compositing using a * untransformed repeating source pattern when the source is in off-screen * video memory, and another with repeated transformed images using a - * general tranform matrix. When these bugs could be triggered, we need a + * general transform matrix. When these bugs could be triggered, we need a * fallback: in the common case where we have no transformation and the * source and destination have the same format/visual, we can do the * operation using the core protocol for the first bug, otherwise, we need @@ -1166,7 +1166,7 @@ _categorize_composite_operation (cairo_xlib_surface_t *dst, /* If these are on the same screen but otherwise incompatible, * make a copy as core drawing can't cross depths and doesn't - * work rightacross visuals of the same depth + * work right across visuals of the same depth */ if (_cairo_xlib_surface_same_screen (dst, src) && !_surfaces_compatible (dst, src)) @@ -2390,7 +2390,7 @@ _cairo_xlib_surface_add_glyph (Display *dpy, * * This is a postscript-y model, where each glyph has its own * coordinate space, so it's what we expose in terms of metrics. It's - * apparantly what everyone's expecting. Everyone except the Render + * apparently what everyone's expecting. Everyone except the Render * extension. Render wants to see a glyph tile starting at (0,0), with * an origin offset inside, like this: * @@ -2694,9 +2694,9 @@ _cairo_xlib_surface_emit_glyphs (cairo_xlib_surface_t *dst, * the first zero-size glyph. However, we don't skip all size-zero * glyphs, since that will force a new element at every space. We * skip initial size-zero glyphs and hope that it's enough. Since - * Xft never exposed that bug, this assumptation should be correct. + * Xft never exposed that bug, this assumption should be correct. * - * We also skip any glyph that hav troublesome coordinates. We want + * We also skip any glyphs that have troublesome coordinates. We want * to make sure that (glyph2.x - (glyph1.x + glyph1.width)) fits in * a signed 16bit integer, otherwise it will overflow in the render * protocol. From ded08256ef7fdc9e9468342cf5635c5e99d4d64d Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Sun, 7 Jan 2007 02:08:15 -0500 Subject: [PATCH 10/53] Spell check the docs --- doc/public/tmpl/cairo-version.sgml | 10 +++++----- src/cairo-array.c | 2 +- src/cairo-cache.c | 12 ++++++------ src/cairo-font-options.c | 6 +++--- src/cairo-ft-font.c | 6 +++--- src/cairo-gstate.c | 4 ++-- src/cairo-image-surface.c | 4 ++-- src/cairo-lzw.c | 2 +- src/cairo-meta-surface.c | 2 +- src/cairo-path-stroke.c | 4 ++-- src/cairo-pattern.c | 10 +++++----- src/cairo-pdf-surface.c | 2 +- src/cairo-ps-surface.c | 4 ++-- src/cairo-scaled-font.c | 4 ++-- src/cairo-surface.c | 2 +- src/cairo-type1-fallback.c | 4 ++-- src/cairo-unicode.c | 4 ++-- src/cairo-wideint.c | 2 +- src/cairo-win32-surface.c | 4 ++-- 19 files changed, 44 insertions(+), 44 deletions(-) diff --git a/doc/public/tmpl/cairo-version.sgml b/doc/public/tmpl/cairo-version.sgml index e79ee3fc6..012b5fafd 100644 --- a/doc/public/tmpl/cairo-version.sgml +++ b/doc/public/tmpl/cairo-version.sgml @@ -8,14 +8,14 @@ Compile-time and run-time version checks. Cairo has a three-part version number scheme. In this scheme, we use even vs. odd numbers to distinguish fixed points in the software -vs. in-progress development, (such as from CVS instead of a tar file, +vs. in-progress development, (such as from git instead of a tar file, or as a "snapshot" tar file as opposed to a "release" tar file). _____ Major. Always 1, until we invent a new scheme. -/ ___ Minor. Even/Odd = Release/Snapshot (tar files) or Branch/Head (CVS) -| / _ Micro. Even/Odd = Tar-file/CVS +/ ___ Minor. Even/Odd = Release/Snapshot (tar files) or Branch/Head (git) +| / _ Micro. Even/Odd = Tar-file/git | | / 1.0.0 @@ -33,7 +33,7 @@ Snapshots --------- 1.1.2 - A snapshot (working toward the 1.2.0 release) -In-progress development (eg. from CVS) +In-progress development (eg. from git) -------------------------------------- 1.0.1 - Development on a maintenance branch (toward 1.0.2 release) 1.1.1 - Development on head (toward 1.1.2 snapshot and 1.2.0 release) @@ -157,7 +157,7 @@ at compile-time, in the form of "X.Y.Z". This macro encodes the given cairo version into an integer. The numbers -returned by %CAIRO_VERSION and pango_version() are encoded using this macro. +returned by %CAIRO_VERSION and cairo_version() are encoded using this macro. Two encoded version numbers can be compared as integers. The encoding ensures that later versions compare greater than earlier versions. diff --git a/src/cairo-array.c b/src/cairo-array.c index 1d9354a89..ff8cce409 100644 --- a/src/cairo-array.c +++ b/src/cairo-array.c @@ -44,7 +44,7 @@ * @element_size. * * The #cairo_array_t object provides grow-by-doubling storage. It - * never intereprets the data passed to it, nor does it provide any + * never interprets the data passed to it, nor does it provide any * sort of callback mechanism for freeing resources held onto by * stored objects. * diff --git a/src/cairo-cache.c b/src/cairo-cache.c index feac8c775..fa1f003a6 100644 --- a/src/cairo-cache.c +++ b/src/cairo-cache.c @@ -54,7 +54,7 @@ _cairo_cache_remove (cairo_cache_t *cache, cairo_cache_entry_t *entry); static void -_cairo_cache_shrink_to_accomodate (cairo_cache_t *cache, +_cairo_cache_shrink_to_accommodate (cairo_cache_t *cache, unsigned long additional); static cairo_status_t @@ -215,7 +215,7 @@ _cairo_cache_thaw (cairo_cache_t *cache) cache->freeze_count--; if (cache->freeze_count == 0) - _cairo_cache_shrink_to_accomodate (cache, 0); + _cairo_cache_shrink_to_accommodate (cache, 0); } /** @@ -267,17 +267,17 @@ _cairo_cache_remove_random (cairo_cache_t *cache) } /** - * _cairo_cache_shrink_to_accomodate: + * _cairo_cache_shrink_to_accommodate: * @cache: a cache * @additional: additional size requested in bytes * * If cache is not frozen, eject entries randomly until the size of * the cache is at least @additional bytes less than - * cache->max_size. That is, make enough room to accomodate a new + * cache->max_size. That is, make enough room to accommodate a new * entry of size @additional. **/ static void -_cairo_cache_shrink_to_accomodate (cairo_cache_t *cache, +_cairo_cache_shrink_to_accommodate (cairo_cache_t *cache, unsigned long additional) { cairo_int_status_t status; @@ -313,7 +313,7 @@ _cairo_cache_insert (cairo_cache_t *cache, { cairo_status_t status; - _cairo_cache_shrink_to_accomodate (cache, entry->size); + _cairo_cache_shrink_to_accommodate (cache, entry->size); status = _cairo_hash_table_insert (cache->hash_table, (cairo_hash_entry_t *) entry); diff --git a/src/cairo-font-options.c b/src/cairo-font-options.c index 2b0cd988b..316299b05 100644 --- a/src/cairo-font-options.c +++ b/src/cairo-font-options.c @@ -47,7 +47,7 @@ static const cairo_font_options_t cairo_font_options_nil = { * _cairo_font_options_init_default: * @options: a #cairo_font_options_t * - * Initializes all fileds of the font options object to default values. + * Initializes all fields of the font options object to default values. **/ void _cairo_font_options_init_default (cairo_font_options_t *options) @@ -233,7 +233,7 @@ slim_hidden_def (cairo_font_options_hash); * @options: a #cairo_font_options_t * @antialias: the new antialiasing mode * - * Sets the antiliasing mode for the font options object. This + * Sets the antialiasing mode for the font options object. This * specifies the type of antialiasing to do when rendering text. **/ void @@ -251,7 +251,7 @@ slim_hidden_def (cairo_font_options_set_antialias); * cairo_font_options_get_antialias: * @options: a #cairo_font_options_t * - * Gets the antialising mode for the font options object. + * Gets the antialiasing mode for the font options object. * * Return value: the antialiasing mode **/ diff --git a/src/cairo-ft-font.c b/src/cairo-ft-font.c index bea639e97..57e3853b0 100644 --- a/src/cairo-ft-font.c +++ b/src/cairo-ft-font.c @@ -135,7 +135,7 @@ static const cairo_unscaled_font_backend_t cairo_ft_unscaled_font_backend; /* * We maintain a hash table to map file/id => cairo_ft_unscaled_font_t. * The hash table itself isn't limited in size. However, we limit the - * number of FT_Face objects we keep around; when we've exceeeded that + * number of FT_Face objects we keep around; when we've exceeded that * limit and need to create a new FT_Face, we dump the FT_Face from a * random cairo_ft_unscaled_font_t which has an unlocked FT_Face, (if * there are any). @@ -2165,7 +2165,7 @@ _cairo_ft_font_face_create (cairo_ft_unscaled_font_t *unscaled, * @pattern: an existing #FcPattern * * Add options to a #FcPattern based on a #cairo_font_options_t font - * options object. Options that are already in the pattern, are not overriden, + * options object. Options that are already in the pattern, are not overridden, * so you should call this function after calling FcConfigSubstitute() (the * user's settings should override options based on the surface type), but * before calling FcDefaultSubstitute(). @@ -2272,7 +2272,7 @@ slim_hidden_def (cairo_ft_font_options_substitute); * also for the FreeType backend and can be used with functions such * as cairo_ft_font_lock_face(). * - * Font rendering options are representated both here and when you + * Font rendering options are represented both here and when you * call cairo_scaled_font_create(). Font options that have a representation * in a #FcPattern must be passed in here; to modify #FcPattern * appropriately to reflect the options in a #cairo_font_options_t, call diff --git a/src/cairo-gstate.c b/src/cairo-gstate.c index f3621dd7f..946e17088 100644 --- a/src/cairo-gstate.c +++ b/src/cairo-gstate.c @@ -323,7 +323,7 @@ _cairo_gstate_redirect_target (cairo_gstate_t *gstate, cairo_surface_t *child) * _cairo_gstate_is_redirected * @gstate: a #cairo_gstate_t * - * Return value: TRUE if the gstate is redirected to a traget + * Return value: TRUE if the gstate is redirected to a target * different than the original, FALSE otherwise. **/ cairo_bool_t @@ -1327,7 +1327,7 @@ _cairo_gstate_get_font_face (cairo_gstate_t *gstate, * * We pass this to the font when making requests of it, which causes it to * reply for a particular [user request, device] combination, under the CTM - * (to accomodate the "zoom in" == "bigger fonts" issue above). + * (to accommodate the "zoom in" == "bigger fonts" issue above). * * The other terms in our communication with the font are therefore in * device space. When we ask it to perform text->glyph conversion, it will diff --git a/src/cairo-image-surface.c b/src/cairo-image-surface.c index 0021ae936..1b5215f9b 100644 --- a/src/cairo-image-surface.c +++ b/src/cairo-image-surface.c @@ -347,8 +347,8 @@ _cairo_image_surface_create_with_content (cairo_content_t content, * Creates an image surface for the provided pixel data. The output * buffer must be kept around until the #cairo_surface_t is destroyed * or cairo_surface_finish() is called on the surface. The initial - * contents of @buffer will be used as the inital image contents; you - * must explicitely clear the buffer, using, for example, + * contents of @buffer will be used as the initial image contents; you + * must explicitly clear the buffer, using, for example, * cairo_rectangle() and cairo_fill() if you want it cleared. * * Return value: a pointer to the newly created surface. The caller diff --git a/src/cairo-lzw.c b/src/cairo-lzw.c index ac9ef41bd..370d258b5 100644 --- a/src/cairo-lzw.c +++ b/src/cairo-lzw.c @@ -230,7 +230,7 @@ _lzw_symbol_table_init (lzw_symbol_table_t *table) /* Lookup a symbol in the symbol table. The PREV and NEXT fields of * symbol form the key for the lookup. * - * If succesful, then this function returns TRUE and slot_ret will be + * If successful, then this function returns TRUE and slot_ret will be * left pointing at the result that will have the CODE field of * interest. * diff --git a/src/cairo-meta-surface.c b/src/cairo-meta-surface.c index a82ab8fa8..e196df29c 100644 --- a/src/cairo-meta-surface.c +++ b/src/cairo-meta-surface.c @@ -46,7 +46,7 @@ * the meta surface had instead been applied to the target surface. * * The recording phase of the meta surface is careful to snapshot all - * necessary objects (paths, patterns, etc.), in order to acheive + * necessary objects (paths, patterns, etc.), in order to achieve * accurate replay. The efficiency of the meta surface could be * improved by improving the implementation of snapshot for the * various objects. For example, it would be nice to have a diff --git a/src/cairo-path-stroke.c b/src/cairo-path-stroke.c index 63f0f4df3..519434c40 100644 --- a/src/cairo-path-stroke.c +++ b/src/cairo-path-stroke.c @@ -848,7 +848,7 @@ _cairo_stroker_curve_to (void *closure, } /* We're using two different algorithms here for dashed and un-dashed - * splines. The dashed alogorithm uses the existing line dashing + * splines. The dashed algorithm uses the existing line dashing * code. It's linear in path length, but gets subtly wrong results for * self-intersecting paths (an outstanding but for self-intersecting * non-curved paths as well). The non-dashed algorithm tessellates a @@ -856,7 +856,7 @@ _cairo_stroker_curve_to (void *closure, * self-intersecting problem, but it's (unsurprisingly) not O(n) and * more significantly, it doesn't yet handle dashes. * - * The only reason we're doing split algortihms here is to + * The only reason we're doing split algorithms here is to * minimize the impact of fixing the splines-aren't-dashed bug for * 1.0.2. Long-term the right answer is to rewrite the whole pile * of stroking code so that the entire result is computed as a diff --git a/src/cairo-pattern.c b/src/cairo-pattern.c index 3c7f483af..b488d1fd5 100644 --- a/src/cairo-pattern.c +++ b/src/cairo-pattern.c @@ -285,7 +285,7 @@ _cairo_pattern_create_in_error (cairo_status_t status) * If the values passed in are outside that range, they will be * clamped. * - * Return value: the newly created #cairo_pattern_t if succesful, or + * Return value: the newly created #cairo_pattern_t if successful, or * an error pattern in case of no memory. The caller owns the * returned object and should call cairo_pattern_destroy() when * finished with it. @@ -326,7 +326,7 @@ slim_hidden_def (cairo_pattern_create_rgb); * 1. If the values passed in are outside that range, they will be * clamped. * - * Return value: the newly created #cairo_pattern_t if succesful, or + * Return value: the newly created #cairo_pattern_t if successful, or * an error pattern in case of no memory. The caller owns the * returned object and should call cairo_pattern_destroy() when * finished with it. @@ -363,7 +363,7 @@ slim_hidden_def (cairo_pattern_create_rgba); * * Create a new cairo_pattern_t for the given surface. * - * Return value: the newly created #cairo_pattern_t if succesful, or + * Return value: the newly created #cairo_pattern_t if successful, or * an error pattern in case of no memory. The caller owns the * returned object and should call cairo_pattern_destroy() when * finished with it. @@ -412,7 +412,7 @@ slim_hidden_def (cairo_pattern_create_for_surface); * pattern space is identical to user space, but the relationship * between the spaces can be changed with cairo_pattern_set_matrix(). * - * Return value: the newly created #cairo_pattern_t if succesful, or + * Return value: the newly created #cairo_pattern_t if successful, or * an error pattern in case of no memory. The caller owns the * returned object and should call cairo_pattern_destroy() when * finished with it. @@ -456,7 +456,7 @@ cairo_pattern_create_linear (double x0, double y0, double x1, double y1) * pattern space is identical to user space, but the relationship * between the spaces can be changed with cairo_pattern_set_matrix(). * - * Return value: the newly created #cairo_pattern_t if succesful, or + * Return value: the newly created #cairo_pattern_t if successful, or * an error pattern in case of no memory. The caller owns the * returned object and should call cairo_pattern_destroy() when * finished with it. diff --git a/src/cairo-pdf-surface.c b/src/cairo-pdf-surface.c index 2778d345a..640b67e74 100644 --- a/src/cairo-pdf-surface.c +++ b/src/cairo-pdf-surface.c @@ -71,7 +71,7 @@ * using a tiling pattern (4.6.2). How do you create such a scratch * surface? cairo_surface_create_similar() ? * - * - What if you create a similiar surface and does show_page and then + * - What if you create a similar surface and does show_page and then * does show_surface on another surface? * * - Output TM so page scales to the right size - PDF default user diff --git a/src/cairo-ps-surface.c b/src/cairo-ps-surface.c index 9315c83bc..efdc3c486 100644 --- a/src/cairo-ps-surface.c +++ b/src/cairo-ps-surface.c @@ -89,7 +89,7 @@ typedef struct cairo_ps_surface { /* A word wrap stream can be used as a filter to do word wrapping on * top of an existing output stream. The word wrapping is quite * simple, using isspace to determine characters that separate - * words. Any word that will cause the column count exceeed the given + * words. Any word that will cause the column count exceed the given * max_column will have a '\n' character emitted before it. * * The stream is careful to maintain integrity for words that cross @@ -282,7 +282,7 @@ _cairo_ps_surface_path_close_path (void *closure) } /* The line cap value is needed to workaround the fact that PostScript - * semnatics for stroking degenerate sub-paths do not match cairo + * semantics for stroking degenerate sub-paths do not match cairo * semantics. (PostScript draws something for any line cap value, * while cairo draws something only for round caps). * diff --git a/src/cairo-scaled-font.c b/src/cairo-scaled-font.c index c63f774f9..92d1d4f2e 100755 --- a/src/cairo-scaled-font.c +++ b/src/cairo-scaled-font.c @@ -326,7 +326,7 @@ _cairo_scaled_font_keys_equal (const void *abstract_key_a, const void *abstract_ /* XXX: This 256 number is arbitary---we've never done any measurement * of this. In fact, having a per-font glyph caches each managed - * separately is probably not waht we want anyway. Would probably be + * separately is probably not what we want anyway. Would probably be * much better to have a single cache for glyphs with random * replacement across all glyphs of all fonts. */ static int max_glyphs_cached_per_font = 256; @@ -1097,7 +1097,7 @@ _scaled_glyph_path_close_path (void *abstract_closure) * operates only on an A1 surface, (converting an A8 surface to A1 if * necessary), and performs the tracing by drawing a little square * around each pixel that is on in the mask. We do not pretend that - * this is a high-quality result. But we are leaving it up to somone + * this is a high-quality result. But we are leaving it up to someone * who cares enough about getting a better result to implement * something more sophisticated. **/ diff --git a/src/cairo-surface.c b/src/cairo-surface.c index ee9a28992..2bff0da23 100644 --- a/src/cairo-surface.c +++ b/src/cairo-surface.c @@ -1760,7 +1760,7 @@ _cairo_surface_set_clip (cairo_surface_t *surface, cairo_clip_t *clip) * * This function returns a bounding box for the surface. The surface * bounds are defined as a region beyond which no rendering will - * possibly be recorded, in otherwords, it is the maximum extent of + * possibly be recorded, in other words, it is the maximum extent of * potentially usable coordinates. * * For vector surfaces, (PDF, PS, SVG and meta-surfaces), the surface diff --git a/src/cairo-type1-fallback.c b/src/cairo-type1-fallback.c index 4bfe44ab2..4776faf6d 100644 --- a/src/cairo-type1-fallback.c +++ b/src/cairo-type1-fallback.c @@ -131,7 +131,7 @@ static const unsigned short charstring_key = 4330; #define CHARSTRING_endchar 0x000e /* Before calling this function, the caller must allocate sufficient - * space in data (see _cairo_array_grow_by). The maxium number of + * space in data (see _cairo_array_grow_by). The maximum number of * bytes that will be used is 2. */ static void @@ -156,7 +156,7 @@ charstring_encode_command (cairo_array_t *data, int command) } /* Before calling this function, the caller must allocate sufficient - * space in data (see _cairo_array_grow_by). The maxium number of + * space in data (see _cairo_array_grow_by). The maximum number of * bytes that will be used is 5. */ static void diff --git a/src/cairo-unicode.c b/src/cairo-unicode.c index 8f99e82e2..5ca51e1e2 100644 --- a/src/cairo-unicode.c +++ b/src/cairo-unicode.c @@ -214,7 +214,7 @@ _utf8_get_char_extended (const unsigned char *p, * consist entirely of valid Unicode characters. * * Return value: %CAIRO_STATUS_SUCCESS if the entire string was - * succesfully converted. %CAIRO_STATUS_INVALID_STRING if an + * successfully converted. %CAIRO_STATUS_INVALID_STRING if an * an invalid sequence was found. **/ cairo_status_t @@ -278,7 +278,7 @@ _cairo_utf8_to_ucs4 (const unsigned char *str, * consist entirely of valid Unicode characters. * * Return value: %CAIRO_STATUS_SUCCESS if the entire string was - * succesfully converted. %CAIRO_STATUS_INVALID_STRING if an + * successfully converted. %CAIRO_STATUS_INVALID_STRING if an * an invalid sequence was found. **/ cairo_status_t diff --git a/src/cairo-wideint.c b/src/cairo-wideint.c index 62944ed83..1e64ae476 100644 --- a/src/cairo-wideint.c +++ b/src/cairo-wideint.c @@ -663,7 +663,7 @@ _cairo_int128_divrem (cairo_int128_t num, cairo_int128_t den) * Compute a 32 bit quotient and 64 bit remainder of a 96 bit unsigned * dividend and 64 bit divisor. If the quotient doesn't fit into 32 * bits then the returned remainder is equal to the divisor, and the - * qoutient is the largest representable 64 bit integer. It is an + * quotient is the largest representable 64 bit integer. It is an * error to call this function with the high 32 bits of @num being * non-zero. */ cairo_uquorem64_t diff --git a/src/cairo-win32-surface.c b/src/cairo-win32-surface.c index 2c2a5fdf2..be7e70621 100644 --- a/src/cairo-win32-surface.c +++ b/src/cairo-win32-surface.c @@ -1712,7 +1712,7 @@ cairo_win32_surface_create (HDC hdc) * * Creates a device-independent-bitmap surface not associated with * any particular existing surface or device context. The created - * bitmap will be unititialized. + * bitmap will be uninitialized. * * Return value: the newly created surface * @@ -1734,7 +1734,7 @@ cairo_win32_surface_create_with_dib (cairo_format_t format, * * Creates a device-independent-bitmap surface not associated with * any particular existing surface or device context. The created - * bitmap will be unititialized. + * bitmap will be uninitialized. * * Return value: the newly created surface * From d30b1bf157126668c4309731022b2ded2ad09571 Mon Sep 17 00:00:00 2001 From: Brian Ewins Date: Thu, 4 Jan 2007 01:36:32 +0000 Subject: [PATCH 11/53] [ATSUI] Scale glyphs using _cairo_matrix_compute_scale_factor (#9350) This bug shows up in the text-rotate test. --- src/cairo-atsui-font.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/cairo-atsui-font.c b/src/cairo-atsui-font.c index 75530d33f..c5e2d367f 100644 --- a/src/cairo-atsui-font.c +++ b/src/cairo-atsui-font.c @@ -145,6 +145,17 @@ CGAffineTransformMakeWithCairoFontScale(const cairo_matrix_t *scale) 0, 0); } +static CGAffineTransform +CGAffineTransformMakeWithCairoScaleFactors(const cairo_matrix_t *scale) +{ + double xscale = 1.0; + double yscale = 1.0; + _cairo_matrix_compute_scale_factors(scale, &xscale, &yscale, 1); + return CGAffineTransformMake(xscale, 0, + 0, yscale, + 0, 0); +} + static ATSUStyle CreateSizedCopyOfStyle(ATSUStyle inStyle, const cairo_matrix_t *scale) { @@ -152,14 +163,11 @@ CreateSizedCopyOfStyle(ATSUStyle inStyle, const cairo_matrix_t *scale) OSStatus err; /* Set the style's size */ - CGAffineTransform theTransform = - CGAffineTransformMakeWithCairoFontScale(scale); - Fixed theSize = - FloatToFixed(CGSizeApplyAffineTransform - (CGSizeMake(1.0, 1.0), theTransform).height); - const ATSUAttributeTag theFontStyleTags[] = { kATSUSizeTag }; - const ByteCount theFontStyleSizes[] = { sizeof(Fixed) }; - ATSUAttributeValuePtr theFontStyleValues[] = { &theSize }; + Fixed theSize = FloatToFixed(1.0); + CGAffineTransform theTransform = CGAffineTransformMakeWithCairoScaleFactors(scale); + const ATSUAttributeTag theFontStyleTags[] = { kATSUSizeTag, kATSUFontMatrixTag }; + const ByteCount theFontStyleSizes[] = { sizeof(Fixed), sizeof(CGAffineTransform) }; + ATSUAttributeValuePtr theFontStyleValues[] = { &theSize, &theTransform }; err = ATSUCreateAndCopyStyle(inStyle, &style); From 22e271d687ad871a4e8a069ee2945c42062c1cb4 Mon Sep 17 00:00:00 2001 From: Brian Ewins Date: Thu, 4 Jan 2007 15:06:48 +0000 Subject: [PATCH 12/53] [perf/cairo-perf-diff] Pass CAIRO_AUTOGEN_OPTIONS to autogen. Makes it was possible to run cairo-perf-diff with different configurations, eg with quartz enabled. --- perf/cairo-perf-diff | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/perf/cairo-perf-diff b/perf/cairo-perf-diff index 47ac456b0..f87391732 100755 --- a/perf/cairo-perf-diff +++ b/perf/cairo-perf-diff @@ -31,6 +31,9 @@ usage() { echo " $argv0 HEAD -- stroke" >&2 echo "" >&2 echo "The performance results are cached in .perf next to the .git directory." >&2 + echo "" >&2 + echo "Set CAIRO_AUTOGEN_OPTIONS to pass options to autogen for both" >&2 + echo "builds." >&2 exit 1 } @@ -131,7 +134,7 @@ run_cairo_perf_if_not_cached() { git checkout tmp-cairo-perf-diff git reset --hard $sha if [ ! -e Makefile ]; then - CFLAGS="-O2" ./autogen.sh + CFLAGS="-O2" ./autogen.sh $CAIRO_AUTOGEN_OPTIONS fi make CFLAGS="-O2" || (rm config.cache && make CFLAGS="-O2") for file in $boilerplate_files; do From 58265f3508959298eabab55ec28dc6d9516eedc3 Mon Sep 17 00:00:00 2001 From: Brian Ewins Date: Thu, 4 Jan 2007 05:54:52 +0000 Subject: [PATCH 13/53] [ATSUI] Select Bitstream Vera and CSS font families reliably. Previously the code selected using the family name; this intermittently selected a bold or italic face instead of the regular one. The new approach is to select the desired font instance directly if possible, and only use the family lookup if that fails. This isn't 100% correct but should always provide the correct font instance for CSS generic font families. The bug was sometimes reproducible with the select-font-face test. --- src/cairo-atsui-font.c | 56 ++++++++++++++++++++++++++++++------------ 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/src/cairo-atsui-font.c b/src/cairo-atsui-font.c index c5e2d367f..43d4e5098 100644 --- a/src/cairo-atsui-font.c +++ b/src/cairo-atsui-font.c @@ -277,6 +277,7 @@ _cairo_atsui_font_create_toy(cairo_toy_font_face_t *toy_face, OSStatus err; Boolean isItalic, isBold; const char *family = toy_face->family; + const char *full_name; err = ATSUCreateStyle(&style); @@ -303,33 +304,56 @@ _cairo_atsui_font_create_toy(cairo_toy_font_face_t *toy_face, break; } + /* The APIs for resolving a font family to a regular + * font face are all broken or deprecated in 10.4, so + * just try our best to find a sensible font. + * + * First we try to map the CSS generic font families + * to fonts that should always be available. + * If the family isn't a CSS family, guess that the + * font family name is the same as the full name of the + * regular font instance, which works in many cases. + * 'Times' is one common exception to this rule, so it's + * handled specially. + */ + if (!strcmp(family, "serif") || !strcmp(family, "Times")) + full_name = "Times Roman"; + else if (!strcmp(family, "sans-serif") || !strcmp(family, "sans")) + full_name = "Helvetica"; + else if (!strcmp(family, "cursive")) + full_name = "Apple Chancery"; + else if (!strcmp(family, "fantasy")) + full_name = "American Typewriter"; + else if (!strcmp(family, "monospace") || !strcmp(family, "mono")) + full_name = "Courier"; + else + full_name = family; + err = ATSUFindFontFromName(family, strlen(family), - kFontFamilyName, + kFontFullName, kFontNoPlatformCode, kFontRomanScript, kFontNoLanguageCode, &fontID); if (err != noErr) { - /* couldn't get the font - remap css names and try again */ - - if (!strcmp(family, "serif")) - family = "Times"; - else if (!strcmp(family, "sans-serif")) - family = "Helvetica"; - else if (!strcmp(family, "cursive")) - family = "Apple Chancery"; - else if (!strcmp(family, "fantasy")) - family = "Gadget"; - else if (!strcmp(family, "monospace")) - family = "Courier"; - else /* anything else - return error instead? */ - family = "Courier"; - + /* Look for any font instance in the family. This may + * succeed, but select the bold or italic face. It only + * selects the first loaded font instance in the family. + */ err = ATSUFindFontFromName(family, strlen(family), kFontFamilyName, kFontNoPlatformCode, kFontRomanScript, kFontNoLanguageCode, &fontID); + if (err != noErr) { + /* Last chance - try Courier. */ + full_name = "Courier"; + err = ATSUFindFontFromName(full_name, strlen(full_name), + kFontFullName, + kFontNoPlatformCode, + kFontRomanScript, + kFontNoLanguageCode, &fontID); + } } { From 9a005c6221cc279e65d94956c74028a84baf1716 Mon Sep 17 00:00:00 2001 From: Brian Ewins Date: Thu, 4 Jan 2007 02:09:16 +0000 Subject: [PATCH 14/53] [ATSUI] correct the rotation of glyph paths. (#9378) This fixes a bug visible in the text-rotate test when CAIRO_TEST_GENERATE_REFERENCE_IMAGE is defined. --- src/cairo-atsui-font.c | 88 ++++++++++++++++++++++++++++++------------ 1 file changed, 63 insertions(+), 25 deletions(-) diff --git a/src/cairo-atsui-font.c b/src/cairo-atsui-font.c index 43d4e5098..087f4bfef 100644 --- a/src/cairo-atsui-font.c +++ b/src/cairo-atsui-font.c @@ -63,6 +63,7 @@ typedef struct _cairo_atsui_font_face cairo_atsui_font_face_t; typedef struct _cairo_atsui_font cairo_atsui_font_t; +typedef struct _cairo_atsui_scaled_path cairo_atsui_scaled_path_t; static cairo_status_t _cairo_atsui_font_create_scaled (cairo_font_face_t *font_face, ATSUFontID font_id, @@ -85,6 +86,11 @@ struct _cairo_atsui_font_face { ATSUFontID font_id; }; +struct _cairo_atsui_scaled_path { + cairo_path_fixed_t *path; + cairo_matrix_t *scale; +}; + static void _cairo_atsui_font_face_destroy (void *abstract_face) { @@ -508,12 +514,15 @@ static OSStatus _move_to (const Float32Point *point, void *callback_data) { - cairo_path_fixed_t *path = callback_data; - - _cairo_path_fixed_close_path (path); - _cairo_path_fixed_move_to (path, - _cairo_fixed_from_double(point->x), - _cairo_fixed_from_double(point->y)); + cairo_atsui_scaled_path_t *scaled_path = callback_data; + double x = point->x; + double y = point->y; + + cairo_matrix_transform_point (scaled_path->scale, &x, &y); + _cairo_path_fixed_close_path (scaled_path->path); + _cairo_path_fixed_move_to (scaled_path->path, + _cairo_fixed_from_double (x), + _cairo_fixed_from_double (y)); return noErr; } @@ -522,11 +531,15 @@ static OSStatus _line_to (const Float32Point *point, void *callback_data) { - cairo_path_fixed_t *path = callback_data; + cairo_atsui_scaled_path_t *scaled_path = callback_data; + double x = point->x; + double y = point->y; + + cairo_matrix_transform_point (scaled_path->scale, &x, &y); - _cairo_path_fixed_line_to (path, - _cairo_fixed_from_double(point->x), - _cairo_fixed_from_double(point->y)); + _cairo_path_fixed_line_to (scaled_path->path, + _cairo_fixed_from_double (x), + _cairo_fixed_from_double (y)); return noErr; } @@ -537,15 +550,25 @@ _curve_to (const Float32Point *point1, const Float32Point *point3, void *callback_data) { - cairo_path_fixed_t *path = callback_data; + cairo_atsui_scaled_path_t *scaled_path = callback_data; + double x1 = point1->x; + double y1 = point1->y; + double x2 = point2->x; + double y2 = point2->y; + double x3 = point3->x; + double y3 = point3->y; + + cairo_matrix_transform_point (scaled_path->scale, &x1, &y1); + cairo_matrix_transform_point (scaled_path->scale, &x2, &y2); + cairo_matrix_transform_point (scaled_path->scale, &x3, &y3); - _cairo_path_fixed_curve_to (path, - _cairo_fixed_from_double(point1->x), - _cairo_fixed_from_double(point1->y), - _cairo_fixed_from_double(point2->x), - _cairo_fixed_from_double(point2->y), - _cairo_fixed_from_double(point3->x), - _cairo_fixed_from_double(point3->y)); + _cairo_path_fixed_curve_to (scaled_path->path, + _cairo_fixed_from_double (x1), + _cairo_fixed_from_double (y1), + _cairo_fixed_from_double (x2), + _cairo_fixed_from_double (y2), + _cairo_fixed_from_double (x3), + _cairo_fixed_from_double (y3)); return noErr; } @@ -554,9 +577,9 @@ static OSStatus _close_path (void *callback_data) { - cairo_path_fixed_t *path = callback_data; + cairo_atsui_scaled_path_t *scaled_path = callback_data; - _cairo_path_fixed_close_path (path); + _cairo_path_fixed_close_path (scaled_path->path); return noErr; } @@ -570,10 +593,24 @@ _cairo_atsui_scaled_font_init_glyph_path (cairo_atsui_font_t *scaled_font, static ATSCubicCurveToUPP curveProc = NULL; static ATSCubicClosePathUPP closePathProc = NULL; OSStatus err; - cairo_path_fixed_t *path; + cairo_atsui_scaled_path_t scaled_path; + cairo_matrix_t *font_to_device = &scaled_font->base.scale; + cairo_matrix_t unscaled_font_to_device; + double xscale; + double yscale; + + /* extract the rotation/shear component of the scale matrix. */ + _cairo_matrix_compute_scale_factors (font_to_device, &xscale, &yscale, 1); + cairo_matrix_init (&unscaled_font_to_device, + font_to_device->xx, + font_to_device->yx, + font_to_device->xy, + font_to_device->yy, 0., 0.); + cairo_matrix_scale (&unscaled_font_to_device, 1.0/xscale, 1.0/yscale); - path = _cairo_path_fixed_create (); - if (!path) + scaled_path.scale = &unscaled_font_to_device; + scaled_path.path = _cairo_path_fixed_create (); + if (!scaled_path.path) return CAIRO_STATUS_NO_MEMORY; if (moveProc == NULL) { @@ -588,9 +625,10 @@ _cairo_atsui_scaled_font_init_glyph_path (cairo_atsui_font_t *scaled_font, moveProc, lineProc, curveProc, - closePathProc, (void *)path, &err); + closePathProc, (void *)&scaled_path, &err); - _cairo_scaled_glyph_set_path (scaled_glyph, &scaled_font->base, path); + _cairo_scaled_glyph_set_path (scaled_glyph, &scaled_font->base, + scaled_path.path); return CAIRO_STATUS_SUCCESS; } From aed4029a104d22cbd363ab9e365320980d22bc86 Mon Sep 17 00:00:00 2001 From: Brian Ewins Date: Thu, 4 Jan 2007 02:13:05 +0000 Subject: [PATCH 15/53] [ATSUI] Refactor code for creating CGBitmapContexts from cairo surfaces. No changes to test output. This just prepares code for reuse when implementing support for CAIRO_SCALED_GLYPH_INFO_SURFACE. --- src/cairo-atsui-font.c | 85 ++++++++++++++++++++++++------------------ 1 file changed, 48 insertions(+), 37 deletions(-) diff --git a/src/cairo-atsui-font.c b/src/cairo-atsui-font.c index 087f4bfef..4144ce643 100644 --- a/src/cairo-atsui-font.c +++ b/src/cairo-atsui-font.c @@ -143,6 +143,47 @@ cairo_atsui_font_face_create_for_atsu_font_id (ATSUFontID font_id) return &font_face->base; } +static CGContextRef +CGBitmapContextCreateWithCairoImageSurface (const cairo_image_surface_t * surface) +{ + CGContextRef contextRef; + CGColorSpaceRef colorSpace; + int bits_per_comp, alpha; + + /* Create a CGBitmapContext for the dest surface for drawing into */ + if (surface->depth == 1) { + colorSpace = CGColorSpaceCreateDeviceGray (); + bits_per_comp = 1; + alpha = kCGImageAlphaNone; + } else if (surface->depth == 8) { + colorSpace = CGColorSpaceCreateDeviceGray (); + bits_per_comp = 8; + alpha = kCGImageAlphaNone; + } else if (surface->depth == 24) { + colorSpace = CGColorSpaceCreateDeviceRGB (); + bits_per_comp = 8; + alpha = kCGImageAlphaNoneSkipFirst | CG_BITMAP_BYTE_ORDER_FLAG; + } else if (surface->depth == 32) { + colorSpace = CGColorSpaceCreateDeviceRGB (); + bits_per_comp = 8; + alpha = kCGImageAlphaPremultipliedFirst | CG_BITMAP_BYTE_ORDER_FLAG; + } else { + /* not reached */ + return NULL; + } + + contextRef = CGBitmapContextCreate (surface->data, + surface->width, + surface->height, + bits_per_comp, + surface->stride, + colorSpace, + alpha); + CGColorSpaceRelease (colorSpace); + + return contextRef; +} + static CGAffineTransform CGAffineTransformMakeWithCairoFontScale(const cairo_matrix_t *scale) { @@ -730,10 +771,9 @@ _cairo_atsui_font_old_show_glyphs (void *abstract_font, int num_glyphs) { cairo_atsui_font_t *font = abstract_font; - CGContextRef myBitmapContext = 0, drawingContext; - CGColorSpaceRef colorSpace = 0; + CGContextRef drawingContext; cairo_image_surface_t *destImageSurface; - int i, bits_per_comp, alpha; + int i; void *extra = NULL; cairo_bool_t can_draw_directly; cairo_rectangle_int16_t rect; @@ -759,41 +799,12 @@ _cairo_atsui_font_old_show_glyphs (void *abstract_font, &rect, &extra); - /* Create a CGBitmapContext for the dest surface for drawing into */ - if (destImageSurface->depth == 1) { - colorSpace = CGColorSpaceCreateDeviceGray(); - bits_per_comp = 1; - alpha = kCGImageAlphaNone; - } else if (destImageSurface->depth == 8) { - colorSpace = CGColorSpaceCreateDeviceGray(); - bits_per_comp = 8; - alpha = kCGImageAlphaNone; - } else if (destImageSurface->depth == 24) { - colorSpace = CGColorSpaceCreateDeviceRGB(); - bits_per_comp = 8; - alpha = kCGImageAlphaNoneSkipFirst | CG_BITMAP_BYTE_ORDER_FLAG; - } else if (destImageSurface->depth == 32) { - colorSpace = CGColorSpaceCreateDeviceRGB(); - bits_per_comp = 8; - alpha = kCGImageAlphaPremultipliedFirst | CG_BITMAP_BYTE_ORDER_FLAG; - } else { - // not reached + drawingContext = CGBitmapContextCreateWithCairoImageSurface (destImageSurface); + if (!drawingContext) return CAIRO_INT_STATUS_UNSUPPORTED; - } - myBitmapContext = CGBitmapContextCreate(destImageSurface->data, - destImageSurface->width, - destImageSurface->height, - bits_per_comp, - destImageSurface->stride, - colorSpace, - alpha); - CGColorSpaceRelease(colorSpace); - - CGContextTranslateCTM(myBitmapContext, 0, destImageSurface->height); - CGContextScaleCTM(myBitmapContext, 1.0f, -1.0f); - - drawingContext = myBitmapContext; + CGContextTranslateCTM(drawingContext, 0, destImageSurface->height); + CGContextScaleCTM(drawingContext, 1.0f, -1.0f); } else { drawingContext = ((cairo_quartz_surface_t *)generic_surface)->context; CGContextSaveGState (drawingContext); @@ -879,7 +890,7 @@ _cairo_atsui_font_old_show_glyphs (void *abstract_font, } if (!can_draw_directly) { - CGContextRelease(myBitmapContext); + CGContextRelease(drawingContext); _cairo_surface_release_dest_image(generic_surface, &rect, From 116ae23fc64a8477a116bd6f3b60c7b5404af1c5 Mon Sep 17 00:00:00 2001 From: Jinghua Luo Date: Mon, 8 Jan 2007 16:51:28 +0800 Subject: [PATCH 16/53] Glitz: position large glyph correctly. I introduced this bug while fixing test glyph-cache-pressure (commit 3b1d0d3519a7d0328f897927d3534f10750d30db). I also changed GLYPH_CACHE_MAX_HEIGHT and GLYPH_CACHE_MAX_HEIGHT to 96, then we still can cache at least 28 glyphes per font(512 ^ 2 / 96 ^ 2). This make us not hit slow path too much and improve performance a lot. --- src/cairo-glitz-surface.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/cairo-glitz-surface.c b/src/cairo-glitz-surface.c index f5ca50374..f49273917 100644 --- a/src/cairo-glitz-surface.c +++ b/src/cairo-glitz-surface.c @@ -1684,8 +1684,8 @@ static const cairo_glitz_area_funcs_t _cairo_glitz_area_funcs = { #define GLYPH_CACHE_TEXTURE_SIZE 512 #define GLYPH_CACHE_MAX_LEVEL 64 -#define GLYPH_CACHE_MAX_HEIGHT 72 -#define GLYPH_CACHE_MAX_WIDTH 72 +#define GLYPH_CACHE_MAX_HEIGHT 96 +#define GLYPH_CACHE_MAX_WIDTH 96 #define WRITE_VEC2(ptr, _x, _y) \ *(ptr)++ = (_x); \ @@ -2072,6 +2072,11 @@ _cairo_glitz_surface_old_show_glyphs (cairo_scaled_font_t *scaled_font, if (status) goto UNLOCK; + x_offset = scaled_glyphs[i]->surface->base.device_transform.x0; + y_offset = scaled_glyphs[i]->surface->base.device_transform.y0; + x1 = _cairo_lround (glyphs[i].x) + x_offset; + y1 = _cairo_lround (glyphs[i].y) + y_offset; + glitz_composite (_glitz_operator (op), src->surface, clone->surface, From 77171cb8e23704db3eeddfe92cc4e0e83d02b36b Mon Sep 17 00:00:00 2001 From: Brian Ewins Date: Thu, 4 Jan 2007 02:16:47 +0000 Subject: [PATCH 17/53] [ATSUI] [1/2] Implement CAIRO_SCALED_GLYPH_INFO_SURFACE support.(#9467) All non-quartz surfaces need to fall back to using glyph surfaces, in order to clip correctly. The bug being fixed is visible in the clip-operator test. This first patch takes out direct rendering support for non-quartz surfaces, causing all image tests to fail. --- src/cairo-atsui-font.c | 77 ++++++++++++++++++++++++------------------ 1 file changed, 44 insertions(+), 33 deletions(-) diff --git a/src/cairo-atsui-font.c b/src/cairo-atsui-font.c index 4144ce643..c9305c536 100644 --- a/src/cairo-atsui-font.c +++ b/src/cairo-atsui-font.c @@ -674,6 +674,13 @@ _cairo_atsui_scaled_font_init_glyph_path (cairo_atsui_font_t *scaled_font, return CAIRO_STATUS_SUCCESS; } +static cairo_status_t +_cairo_atsui_scaled_font_init_glyph_surface (cairo_atsui_font_t *scaled_font, + cairo_scaled_glyph_t *scaled_glyph) +{ + return CAIRO_INT_STATUS_UNSUPPORTED; +} + static cairo_int_status_t _cairo_atsui_font_scaled_glyph_init (void *abstract_font, cairo_scaled_glyph_t *scaled_glyph, @@ -694,6 +701,12 @@ _cairo_atsui_font_scaled_glyph_init (void *abstract_font, return status; } + if ((info & CAIRO_SCALED_GLYPH_INFO_SURFACE) != 0) { + status = _cairo_atsui_scaled_font_init_glyph_surface (scaled_font, scaled_glyph); + if (status) + return status; + } + return CAIRO_STATUS_SUCCESS; } @@ -777,14 +790,17 @@ _cairo_atsui_font_old_show_glyphs (void *abstract_font, void *extra = NULL; cairo_bool_t can_draw_directly; cairo_rectangle_int16_t rect; + cairo_quartz_surface_t *surface = (cairo_quartz_surface_t *)generic_surface; ATSFontRef atsFont; CGFontRef cgFont; CGAffineTransform textTransform; + if (!_cairo_surface_is_quartz (generic_surface)) + return CAIRO_INT_STATUS_UNSUPPORTED; + /* Check if we can draw directly to the destination surface */ - can_draw_directly = _cairo_surface_is_quartz (generic_surface) && - _cairo_pattern_is_opaque_solid (pattern) && + can_draw_directly = _cairo_pattern_is_opaque_solid (pattern) && op == CAIRO_OPERATOR_OVER; if (!can_draw_directly) { @@ -837,38 +853,33 @@ _cairo_atsui_font_old_show_glyphs (void *abstract_font, CGContextSetRGBFillColor(drawingContext, 0.0f, 0.0f, 0.0f, 0.0f); } - if (_cairo_surface_is_quartz (generic_surface)) { - cairo_quartz_surface_t *surface = (cairo_quartz_surface_t *)generic_surface; - if (surface->clip_region) { - pixman_box16_t *boxes = pixman_region_rects (surface->clip_region); - int num_boxes = pixman_region_num_rects (surface->clip_region); - CGRect stack_rects[10]; - CGRect *rects; - int i; - - /* XXX: Return-value of malloc needs to be checked for - * NULL. Can someone fix this who is more familiar with - * the cleanup needed in this function? - */ - if (num_boxes > 10) - rects = malloc (sizeof (CGRect) * num_boxes); - else - rects = stack_rects; - - for (i = 0; i < num_boxes; i++) { - rects[i].origin.x = boxes[i].x1; - rects[i].origin.y = boxes[i].y1; - rects[i].size.width = boxes[i].x2 - boxes[i].x1; - rects[i].size.height = boxes[i].y2 - boxes[i].y1; - } - - CGContextClipToRects (drawingContext, rects, num_boxes); - - if (rects != stack_rects) - free(rects); + if (surface->clip_region) { + pixman_box16_t *boxes = pixman_region_rects (surface->clip_region); + int num_boxes = pixman_region_num_rects (surface->clip_region); + CGRect stack_rects[10]; + CGRect *rects; + int i; + + /* XXX: Return-value of malloc needs to be checked for + * NULL. Can someone fix this who is more familiar with + * the cleanup needed in this function? + */ + if (num_boxes > 10) + rects = malloc (sizeof (CGRect) * num_boxes); + else + rects = stack_rects; + + for (i = 0; i < num_boxes; i++) { + rects[i].origin.x = boxes[i].x1; + rects[i].origin.y = boxes[i].y1; + rects[i].size.width = boxes[i].x2 - boxes[i].x1; + rects[i].size.height = boxes[i].y2 - boxes[i].y1; } - } else { - /* XXX: Need to get the text clipped */ + + CGContextClipToRects (drawingContext, rects, num_boxes); + + if (rects != stack_rects) + free(rects); } /* TODO - bold and italic text From 504cbdae37232d65f5c1f8913e55ac63397ad4f0 Mon Sep 17 00:00:00 2001 From: Brian Ewins Date: Thu, 4 Jan 2007 03:12:53 +0000 Subject: [PATCH 18/53] [ATSUI] [2/2] Implement CAIRO_SCALED_GLYPH_INFO_SURFACE support.(#9467) All non-quartz surfaces need to fall back to using glyph surfaces, in order to clip correctly. This second patch implements glyph surface support, correcting the unclipped text seen in the clip-operator test. --- src/cairo-atsui-font.c | 113 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 111 insertions(+), 2 deletions(-) diff --git a/src/cairo-atsui-font.c b/src/cairo-atsui-font.c index c9305c536..b359b2e16 100644 --- a/src/cairo-atsui-font.c +++ b/src/cairo-atsui-font.c @@ -676,9 +676,118 @@ _cairo_atsui_scaled_font_init_glyph_path (cairo_atsui_font_t *scaled_font, static cairo_status_t _cairo_atsui_scaled_font_init_glyph_surface (cairo_atsui_font_t *scaled_font, - cairo_scaled_glyph_t *scaled_glyph) + cairo_scaled_glyph_t *scaled_glyph) { - return CAIRO_INT_STATUS_UNSUPPORTED; + OSStatus err; + CGContextRef drawingContext; + cairo_image_surface_t *surface; + cairo_format_t format; + + ATSFontRef atsFont; + CGFontRef cgFont; + cairo_scaled_font_t base = scaled_font->base; + cairo_font_extents_t extents = base.extents; + + GlyphID theGlyph = _cairo_scaled_glyph_index (scaled_glyph); + ATSGlyphScreenMetrics metricsH; + double left, bottom, width, height; + double xscale, yscale; + CGRect bbox; + CGAffineTransform transform; + + + /* Compute a box to contain the glyph mask. The vertical + * sizes come from the font extents; extra pixels are + * added to account for fractional sizes. + */ + height = extents.ascent + extents.descent + 2.0; + bottom = -extents.descent - 1.0; + + /* Horizontal sizes come from the glyph typographic metrics. + * It is possible that this might result in clipped text + * in fonts where the typographic bounds don't cover the ink. + * The width is recalculated, since metricsH.width is rounded. + */ + err = ATSUGlyphGetScreenMetrics (scaled_font->style, + 1, &theGlyph, 0, false, + false, &metricsH); + left = metricsH.sideBearing.x - 1.0; + width = metricsH.deviceAdvance.x + - metricsH.sideBearing.x + + metricsH.otherSideBearing.x + 2.0; + + /* The xy and yx components are negated because the y-axis + * is flipped into the cairo system then flipped back, ie: + * [1 0][xx yx][1 0] + * [0 -1][xy yy][0 -1] + */ + transform = CGAffineTransformMake (base.scale.xx, + -base.scale.yx, + -base.scale.xy, + base.scale.yy, + 0., 0.); + _cairo_matrix_compute_scale_factors (&base.scale, + &xscale, &yscale, 1); + transform = CGAffineTransformScale (transform, 1.0/xscale, 1.0/yscale); + + /* Rotate the bounding box. This computes the smallest CGRect + * that would contain the bounding box after rotation. + */ + bbox = CGRectApplyAffineTransform (CGRectMake (left, bottom, + width, height), transform); + /* Compute the smallest CGRect with integer coordinates + * that contains the bounding box. + */ + bbox = CGRectIntegral (bbox); + + left = CGRectGetMinX (bbox); + bottom = CGRectGetMinY (bbox); + + /* XXX should we select format based on antialiasing flags, as ft does? */ + format = CAIRO_FORMAT_A8; + + /* create the glyph mask surface */ + surface = (cairo_image_surface_t *)cairo_image_surface_create (format, bbox.size.width, bbox.size.height); + if (!surface) + return CAIRO_STATUS_NO_MEMORY; + + drawingContext = CGBitmapContextCreateWithCairoImageSurface (surface); + if (!drawingContext) { + cairo_surface_destroy ((cairo_surface_t *)surface); + return CAIRO_INT_STATUS_UNSUPPORTED; + } + + atsFont = FMGetATSFontRefFromFont (scaled_font->fontID); + cgFont = CGFontCreateWithPlatformFont (&atsFont); + + CGContextSetFont (drawingContext, cgFont); + + if (base.options.antialias == CAIRO_ANTIALIAS_NONE) { + CGContextSetShouldAntialias (drawingContext, false); + } + + /* solid white */ + CGContextSetRGBFillColor (drawingContext, 1.0, 1.0, 1.0, 1.0); + + CGContextSetFontSize (drawingContext, 1.0); + CGContextTranslateCTM (drawingContext, -left, -bottom); + CGContextScaleCTM (drawingContext, xscale, yscale); + CGContextSetTextMatrix (drawingContext, transform); + CGContextShowGlyphsAtPoint (drawingContext, 0, 0, + &theGlyph, 1); + + CGContextRelease (drawingContext); + + /* correct for difference between cairo and quartz + * coordinate systems. + */ + cairo_surface_set_device_offset ((cairo_surface_t *)surface, left, + -bbox.size.height - bottom); + _cairo_scaled_glyph_set_surface (scaled_glyph, + &base, + surface); + + return CAIRO_STATUS_SUCCESS; } static cairo_int_status_t From d5531c4f506caa9ad66fbeef1822a7036d4dd528 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Tue, 9 Jan 2007 14:27:32 -0800 Subject: [PATCH 19/53] Add unaligned_clip perf case courtesy of Jeff Muizelaar Conflicts: perf/Makefile.am perf/cairo-perf.c perf/cairo-perf.h --- perf/Makefile.am | 9 +++--- perf/cairo-perf.c | 1 + perf/cairo-perf.h | 1 + perf/unaligned-clip.c | 66 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 perf/unaligned-clip.c diff --git a/perf/Makefile.am b/perf/Makefile.am index 0d5f2446a..1ed4c81aa 100644 --- a/perf/Makefile.am +++ b/perf/Makefile.am @@ -22,18 +22,19 @@ cairo_perf_SOURCES = \ box-outline.c \ fill.c \ long-lines.c \ + mosaic.c \ + mosaic.h \ paint.c \ + pattern_create_radial.c \ stroke.c \ subimage_copy.c \ tessellate.c \ - pattern_create_radial.c \ + unaligned-clip.c \ text.c \ world-map.c \ world-map.h \ zrusin.c \ - zrusin-another.h \ - mosaic.c \ - mosaic.h + zrusin-another.h if CAIRO_HAS_WIN32_SURFACE cairo_perf_SOURCES += cairo-perf-win32.c diff --git a/perf/cairo-perf.c b/perf/cairo-perf.c index 0708ed952..18cc652ea 100644 --- a/perf/cairo-perf.c +++ b/perf/cairo-perf.c @@ -328,5 +328,6 @@ cairo_perf_case_t perf_cases[] = { { box_outline, 100, 100}, { mosaic, 800, 800 }, { long_lines, 100, 100}, + { unaligned_clip, 100, 100}, { NULL } }; diff --git a/perf/cairo-perf.h b/perf/cairo-perf.h index 2bfd66519..1ef9600aa 100644 --- a/perf/cairo-perf.h +++ b/perf/cairo-perf.h @@ -104,5 +104,6 @@ CAIRO_PERF_DECL (world_map); CAIRO_PERF_DECL (box_outline); CAIRO_PERF_DECL (mosaic); CAIRO_PERF_DECL (long_lines); +CAIRO_PERF_DECL (unaligned_clip); #endif diff --git a/perf/unaligned-clip.c b/perf/unaligned-clip.c new file mode 100644 index 000000000..c7b9d219e --- /dev/null +++ b/perf/unaligned-clip.c @@ -0,0 +1,66 @@ +/* + * Copyright © 2006 Jeff Muizelaar + * Copyright © 2006 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Authors: Jeff Muizelaar + * Carl Worth + */ + +#include "cairo-perf.h" + +static cairo_perf_ticks_t +do_unaligned_clip (cairo_t *cr, int width, int height) +{ + cairo_save (cr); + + cairo_perf_timer_start (); + /* First a triangular clip that obviously isn't along device-pixel + * boundaries. */ + cairo_move_to (cr, 50, 50); + cairo_line_to (cr, 50, 90); + cairo_line_to (cr, 90, 90); + cairo_close_path (cr); + cairo_clip (cr); + + /* Then a rectangular clip that would be but for the non-integer + * scaling. */ + cairo_scale (cr, 1.1, 1.1); + cairo_move_to (cr, 55, 55); + cairo_line_to (cr, 90, 55); + cairo_line_to (cr, 90, 90); + cairo_line_to (cr, 90, 55); + cairo_close_path (cr); + + cairo_clip (cr); + cairo_perf_timer_stop (); + + cairo_restore (cr); + + return cairo_perf_timer_elapsed (); +} + +void +unaligned_clip (cairo_perf_t *perf, cairo_t *cr, int width, int height) +{ + cairo_perf_run (perf, "unaligned_clip", do_unaligned_clip); +} From cf1d95e714d0814e52910c4306d090ef6d989093 Mon Sep 17 00:00:00 2001 From: Soeren Sandmann Date: Tue, 9 Jan 2007 15:05:29 -0800 Subject: [PATCH 20/53] Add SRC and IN implementations to avoid CompositeGeneral in some cases hit by PDF rendering MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The patch implements a few more operations with special cases MMX code. On my laptop, applying the patch to cairo speeds up the benchmark (rendering page 14 of a PDF file[*]) from 20.9 seconds to 14.9 seconds, which is an improvement of 28.6%. [*] http://people.redhat.com/jakub/prelink.pdf This also benefits the recently added unaligned_clip perf case: image-rgb unaligned_clip-100 0.11 -> 0.06: 1.65x speedup ▋ image-rgba unaligned_clip-100 0.11 -> 0.06: 1.64x speedup ▋ --- pixman/src/fbmmx.c | 226 ++++++++++++++++++++++++++++++++++++++++++++ pixman/src/fbmmx.h | 43 +++++++++ pixman/src/fbpict.c | 98 ++++++++++++++++++- 3 files changed, 366 insertions(+), 1 deletion(-) diff --git a/pixman/src/fbmmx.c b/pixman/src/fbmmx.c index a99168c58..f6f512f1d 100644 --- a/pixman/src/fbmmx.c +++ b/pixman/src/fbmmx.c @@ -2134,6 +2134,232 @@ fbCompositeSolidMask_nx8888x0565Cmmx (pixman_operator_t op, _mm_empty (); } +void +fbCompositeIn_nx8x8mmx (pixman_operator_t op, + PicturePtr pSrc, + PicturePtr pMask, + PicturePtr pDst, + INT16 xSrc, + INT16 ySrc, + INT16 xMask, + INT16 yMask, + INT16 xDst, + INT16 yDst, + CARD16 width, + CARD16 height) +{ + CARD8 *dstLine, *dst; + CARD8 *maskLine, *mask; + FbStride dstStride, maskStride; + CARD16 w; + CARD32 src; + CARD8 sa; + __m64 vsrc, vsrca; + + fbComposeGetStart (pDst, xDst, yDst, CARD8, dstStride, dstLine, 1); + fbComposeGetStart (pMask, xMask, yMask, CARD8, maskStride, maskLine, 1); + + fbComposeGetSolid(pSrc, pDst, src); + + sa = src >> 24; + if (sa == 0) + return; + + vsrc = load8888(src); + vsrca = expand_alpha(vsrc); + + while (height--) + { + dst = dstLine; + dstLine += dstStride; + mask = maskLine; + maskLine += maskStride; + w = width; + + if ((((unsigned long)pDst & 3) == 0) && + (((unsigned long)pSrc & 3) == 0)) + { + while (w >= 4) + { + CARD32 m; + __m64 vmask; + __m64 vdest; + + m = 0; + + vmask = load8888 (*(CARD32 *)mask); + vdest = load8888 (*(CARD32 *)dst); + + *(CARD32 *)dst = store8888 (in (in (vsrca, vmask), vdest)); + + dst += 4; + mask += 4; + w -= 4; + } + } + + while (w--) + { + CARD16 tmp; + CARD8 a; + CARD32 m, d; + CARD32 r; + + a = *mask++; + d = *dst; + + m = FbInU (sa, 0, a, tmp); + r = FbInU (m, 0, d, tmp); + + *dst++ = r; + } + } + + _mm_empty(); +} + +void +fbCompositeIn_8x8mmx (pixman_operator_t op, + PicturePtr pSrc, + PicturePtr pMask, + PicturePtr pDst, + INT16 xSrc, + INT16 ySrc, + INT16 xMask, + INT16 yMask, + INT16 xDst, + INT16 yDst, + CARD16 width, + CARD16 height) +{ + CARD8 *dstLine, *dst; + CARD8 *srcLine, *src; + FbStride srcStride, dstStride; + CARD16 w; + + fbComposeGetStart (pDst, xDst, yDst, CARD8, dstStride, dstLine, 1); + fbComposeGetStart (pSrc, xSrc, ySrc, CARD8, srcStride, srcLine, 1); + + while (height--) + { + dst = dstLine; + dstLine += dstStride; + src = srcLine; + srcLine += srcStride; + w = width; + + if ((((unsigned long)pDst & 3) == 0) && + (((unsigned long)pSrc & 3) == 0)) + { + while (w >= 4) + { + CARD32 *s = (CARD32 *)src; + CARD32 *d = (CARD32 *)dst; + + *d = store8888 (in (load8888 (*s), load8888 (*d))); + + w -= 4; + dst += 4; + src += 4; + } + } + + while (w--) + { + CARD8 s, d; + CARD16 tmp; + + s = *src; + d = *dst; + + *dst = FbInU (s, 0, d, tmp); + + src++; + dst++; + } + } + + _mm_empty (); +} + +void +fbCompositeSrcAdd_8888x8x8mmx (pixman_operator_t op, + PicturePtr pSrc, + PicturePtr pMask, + PicturePtr pDst, + INT16 xSrc, + INT16 ySrc, + INT16 xMask, + INT16 yMask, + INT16 xDst, + INT16 yDst, + CARD16 width, + CARD16 height) +{ + CARD8 *dstLine, *dst; + CARD8 *maskLine, *mask; + FbStride dstStride, maskStride; + CARD16 w; + CARD32 src; + CARD8 sa; + __m64 vsrc, vsrca; + + fbComposeGetStart (pDst, xDst, yDst, CARD8, dstStride, dstLine, 1); + fbComposeGetStart (pMask, xMask, yMask, CARD8, maskStride, maskLine, 1); + + fbComposeGetSolid(pSrc, pDst, src); + + sa = src >> 24; + if (sa == 0) + return; + + vsrc = load8888(src); + vsrca = expand_alpha(vsrc); + + while (height--) + { + dst = dstLine; + dstLine += dstStride; + mask = maskLine; + maskLine += maskStride; + w = width; + + if ((((unsigned long)pMask & 3) == 0) && + (((unsigned long)pDst & 3) == 0)) + { + while (w >= 4) + { + __m64 vmask = load8888 (*(CARD32 *)mask); + __m64 vdest = load8888 (*(CARD32 *)dst); + + *(CARD32 *)dst = store8888 (_mm_adds_pu8 (in (vsrca, vmask), vdest)); + + w -= 4; + dst += 4; + mask += 4; + } + } + + while (w--) + { + CARD16 tmp; + CARD16 a; + CARD32 m, d; + CARD32 r; + + a = *mask++; + d = *dst; + + m = FbInU (sa, 0, a, tmp); + r = FbAdd (m, d, 0, tmp); + + *dst++ = r; + } + } + + _mm_empty(); +} + void fbCompositeSrcAdd_8000x8000mmx (pixman_operator_t op, PicturePtr pSrc, diff --git a/pixman/src/fbmmx.h b/pixman/src/fbmmx.h index 531bcbab4..5c081800d 100644 --- a/pixman/src/fbmmx.h +++ b/pixman/src/fbmmx.h @@ -44,6 +44,20 @@ Bool fbHaveMMX(void); pixman_private void fbComposeSetupMMX(void); +pixman_private +void fbCompositeIn_nx8x8mmx (pixman_operator_t op, + PicturePtr pSrc, + PicturePtr pMask, + PicturePtr pDst, + INT16 xSrc, + INT16 ySrc, + INT16 xMask, + INT16 yMask, + INT16 xDst, + INT16 yDst, + CARD16 width, + CARD16 height); + pixman_private void fbCompositeSolidMask_nx8888x0565Cmmx (pixman_operator_t op, PicturePtr pSrc, @@ -109,6 +123,35 @@ void fbCompositeSolidMaskSrc_nx8x8888mmx (pixman_operator_t op, INT16 yDst, CARD16 width, CARD16 height); + +pixman_private +void fbCompositeSrcAdd_8888x8x8mmx (pixman_operator_t op, + PicturePtr pSrc, + PicturePtr pMask, + PicturePtr pDst, + INT16 xSrc, + INT16 ySrc, + INT16 xMask, + INT16 yMask, + INT16 xDst, + INT16 yDst, + CARD16 width, + CARD16 height); + +pixman_private +void fbCompositeIn_8x8mmx (pixman_operator_t op, + PicturePtr pSrc, + PicturePtr pMask, + PicturePtr pDst, + INT16 xSrc, + INT16 ySrc, + INT16 xMask, + INT16 yMask, + INT16 xDst, + INT16 yDst, + CARD16 width, + CARD16 height); + pixman_private void fbCompositeSrcAdd_8000x8000mmx (pixman_operator_t op, PicturePtr pSrc, diff --git a/pixman/src/fbpict.c b/pixman/src/fbpict.c index 0cdec3ffc..2019cbc5d 100644 --- a/pixman/src/fbpict.c +++ b/pixman/src/fbpict.c @@ -843,6 +843,58 @@ fbCompositeSrcAdd_8888x8888 (pixman_operator_t op, } } +static void +fbCompositeSrcAdd_8888x8x8 (pixman_operator_t op, + PicturePtr pSrc, + PicturePtr pMask, + PicturePtr pDst, + INT16 xSrc, + INT16 ySrc, + INT16 xMask, + INT16 yMask, + INT16 xDst, + INT16 yDst, + CARD16 width, + CARD16 height) +{ + CARD8 *dstLine, *dst; + CARD8 *maskLine, *mask; + FbStride dstStride, maskStride; + CARD16 w; + CARD32 src; + CARD8 sa; + + fbComposeGetStart (pDst, xDst, yDst, CARD8, dstStride, dstLine, 1); + fbComposeGetStart (pMask, xMask, yMask, CARD8, maskStride, maskLine, 1); + fbComposeGetSolid (pSrc, pDst, src); + sa = (src >> 24); + + while (height--) + { + dst = dstLine; + dstLine += dstStride; + mask = maskLine; + maskLine += maskStride; + w = width; + + while (w--) + { + CARD16 tmp; + CARD16 a; + CARD32 m, d; + CARD32 r; + + a = *mask++; + d = *dst; + + m = FbInU (sa, 0, a, tmp); + r = FbAdd (m, d, 0, tmp); + + *dst++ = r; + } + } +} + static void fbCompositeSrcAdd_1000x1000 (pixman_operator_t op, PicturePtr pSrc, @@ -1759,6 +1811,26 @@ pixman_composite (pixman_operator_t op, break; } } + else + { + if ((pSrc->format_code == PICT_a8r8g8b8 || + pSrc->format_code == PICT_a8b8g8r8) && + srcRepeat && + pMask->format_code == PICT_a8 && + pDst->format_code == PICT_a8) + { +#ifdef USE_MMX + if (fbHaveMMX()) + { + srcRepeat = FALSE; + + func = fbCompositeSrcAdd_8888x8x8mmx; + } + else +#endif + func = fbCompositeSrcAdd_8888x8x8; + } + } break; case PIXMAN_OPERATOR_SRC: if (pMask) @@ -1798,10 +1870,34 @@ pixman_composite (pixman_operator_t op, } } break; + case PIXMAN_OPERATOR_IN: +#ifdef USE_MMX + if (pSrc->format_code == PICT_a8 && + pDst->format_code == PICT_a8 && + !pMask) + { + if (fbHaveMMX()) + func = fbCompositeIn_8x8mmx; + } + else if (srcRepeat && pMask && !pMask->componentAlpha && + (pSrc->format_code == PICT_a8r8g8b8 || + pSrc->format_code == PICT_a8b8g8r8) && + (pMask->format_code == PICT_a8) && + pDst->format_code == PICT_a8) + { + if (fbHaveMMX()) + { + srcRepeat = FALSE; + func = fbCompositeIn_nx8x8mmx; + } + } +#else + func = NULL; +#endif + break; case PIXMAN_OPERATOR_CLEAR: case PIXMAN_OPERATOR_DST: case PIXMAN_OPERATOR_OVER_REVERSE: - case PIXMAN_OPERATOR_IN: case PIXMAN_OPERATOR_IN_REVERSE: case PIXMAN_OPERATOR_OUT: case PIXMAN_OPERATOR_OUT_REVERSE: From eff6d3c7a013476a7e4cf56c05ad95c9f01fe793 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Sun, 17 Dec 2006 15:49:50 -0500 Subject: [PATCH 21/53] [cairo-type1-subset] Do not use an array of pointers, to reduce .data size We use a string pool plus lookup indices tables now, generated by perl code embedded before the tables. The table in question is the default PS encoding table, so no changes are expected in the future. --- src/cairo-type1-subset.c | 107 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 105 insertions(+), 2 deletions(-) diff --git a/src/cairo-type1-subset.c b/src/cairo-type1-subset.c index 08a2d22f3..4455ca59f 100644 --- a/src/cairo-type1-subset.c +++ b/src/cairo-type1-subset.c @@ -482,7 +482,12 @@ cairo_type1_font_subset_decode_integer (const unsigned char *p, int *integer) return p; } -static const char *ps_standard_encoding[256] = { +#if 0 +/* + * The two tables that follow are generated using this perl code: + */ + +@encoding = ( /* 0 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, @@ -563,8 +568,106 @@ static const char *ps_standard_encoding[256] = { NULL, "dotlessi", NULL, NULL, "lslash", "oslash", "oe", "germandbls", NULL, NULL, NULL, NULL + ); + +print "static const char ps_standard_encoding_symbol[] = {\n"; +$s = qq( "\\0"); +for $sym (@encoding) { + if (! ($sym eq NULL)) { + $ss = qq( "$sym\\0"); + if (length($s) + length($ss) > 78) { + print qq( $s\n); + $s = ""; + } + $s .= $ss; + } +} +print qq( $s\n); +print "};\n\n"; +print "static const int16_t ps_standard_encoding_offset[256] = {\n"; +$offset = 1; +$s = qq(); +for $sym (@encoding) { + if (! ($sym eq NULL)) { + $ss = qq( $offset/*$sym*/,); + $offset += length($sym) + 1; + } else { + $ss = qq( 0,); + } + if (length($s) + length($ss) > 78) { + print qq( $s\n); + $s = ""; + } + $s .= $ss; +} +print qq( $s\n); +print "};\n"; +exit; +#endif + +static const char ps_standard_encoding_symbol[] = { + "\0" "space\0" "exclam\0" "quotedbl\0" "numbersign\0" "dollar\0" "percent\0" + "ampersand\0" "quoteright\0" "parenleft\0" "parenright\0" "asterisk\0" + "plus\0" "comma\0" "hyphen\0" "period\0" "slash\0" "zero\0" "one\0" "two\0" + "three\0" "four\0" "five\0" "six\0" "seven\0" "eight\0" "nine\0" "colon\0" + "semicolon\0" "less\0" "equal\0" "greater\0" "question\0" "at\0" "A\0" "B\0" + "C\0" "D\0" "E\0" "F\0" "G\0" "H\0" "I\0" "J\0" "K\0" "L\0" "M\0" "N\0" "O\0" + "P\0" "Q\0" "R\0" "S\0" "T\0" "U\0" "V\0" "W\0" "X\0" "Y\0" "Z\0" + "bracketleft\0" "backslash\0" "bracketright\0" "asciicircum\0" "underscore\0" + "quoteleft\0" "a\0" "b\0" "c\0" "d\0" "e\0" "f\0" "g\0" "h\0" "i\0" "j\0" + "k\0" "l\0" "m\0" "n\0" "o\0" "p\0" "q\0" "r\0" "s\0" "t\0" "u\0" "v\0" "w\0" + "x\0" "y\0" "z\0" "braceleft\0" "bar\0" "braceright\0" "asciitilde\0" + "exclamdown\0" "cent\0" "sterling\0" "fraction\0" "yen\0" "florin\0" + "section\0" "currency\0" "quotesingle\0" "quotedblleft\0" "guillemotleft\0" + "guilsinglleft\0" "guilsinglright\0" "fi\0" "fl\0" "endash\0" "dagger\0" + "daggerdbl\0" "periodcentered\0" "paragraph\0" "bullet\0" "quotesinglbase\0" + "quotedblbase\0" "quotedblright\0" "guillemotright\0" "ellipsis\0" + "perthousand\0" "questiondown\0" "grave\0" "acute\0" "circumflex\0" "tilde\0" + "macron\0" "breve\0" "dotaccent\0" "dieresis\0" "ring\0" "cedilla\0" + "hungarumlaut\0" "ogonek\0" "caron\0" "emdash\0" "AE\0" "ordfeminine\0" + "Lslash\0" "Oslash\0" "OE\0" "ordmasculine\0" "ae\0" "dotlessi\0" "lslash\0" + "oslash\0" "oe\0" "germandbls\0" }; +static const int16_t ps_standard_encoding_offset[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1/*space*/, 7/*exclam*/, 14/*quotedbl*/, 23/*numbersign*/, + 34/*dollar*/, 41/*percent*/, 49/*ampersand*/, 59/*quoteright*/, + 70/*parenleft*/, 80/*parenright*/, 91/*asterisk*/, 100/*plus*/, 105/*comma*/, + 111/*hyphen*/, 118/*period*/, 125/*slash*/, 131/*zero*/, 136/*one*/, + 140/*two*/, 144/*three*/, 150/*four*/, 155/*five*/, 160/*six*/, 164/*seven*/, + 170/*eight*/, 176/*nine*/, 181/*colon*/, 187/*semicolon*/, 197/*less*/, + 202/*equal*/, 208/*greater*/, 216/*question*/, 225/*at*/, 228/*A*/, 230/*B*/, + 232/*C*/, 234/*D*/, 236/*E*/, 238/*F*/, 240/*G*/, 242/*H*/, 244/*I*/, + 246/*J*/, 248/*K*/, 250/*L*/, 252/*M*/, 254/*N*/, 256/*O*/, 258/*P*/, + 260/*Q*/, 262/*R*/, 264/*S*/, 266/*T*/, 268/*U*/, 270/*V*/, 272/*W*/, + 274/*X*/, 276/*Y*/, 278/*Z*/, 280/*bracketleft*/, 292/*backslash*/, + 302/*bracketright*/, 315/*asciicircum*/, 327/*underscore*/, 338/*quoteleft*/, + 348/*a*/, 350/*b*/, 352/*c*/, 354/*d*/, 356/*e*/, 358/*f*/, 360/*g*/, + 362/*h*/, 364/*i*/, 366/*j*/, 368/*k*/, 370/*l*/, 372/*m*/, 374/*n*/, + 376/*o*/, 378/*p*/, 380/*q*/, 382/*r*/, 384/*s*/, 386/*t*/, 388/*u*/, + 390/*v*/, 392/*w*/, 394/*x*/, 396/*y*/, 398/*z*/, 400/*braceleft*/, + 410/*bar*/, 414/*braceright*/, 425/*asciitilde*/, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 436/*exclamdown*/, 447/*cent*/, 452/*sterling*/, 461/*fraction*/, 470/*yen*/, + 474/*florin*/, 481/*section*/, 489/*currency*/, 498/*quotesingle*/, + 510/*quotedblleft*/, 523/*guillemotleft*/, 537/*guilsinglleft*/, + 551/*guilsinglright*/, 566/*fi*/, 569/*fl*/, 0, 572/*endash*/, 579/*dagger*/, + 586/*daggerdbl*/, 596/*periodcentered*/, 0, 611/*paragraph*/, 621/*bullet*/, + 628/*quotesinglbase*/, 643/*quotedblbase*/, 656/*quotedblright*/, + 670/*guillemotright*/, 685/*ellipsis*/, 694/*perthousand*/, 0, + 706/*questiondown*/, 0, 719/*grave*/, 725/*acute*/, 731/*circumflex*/, + 742/*tilde*/, 748/*macron*/, 755/*breve*/, 761/*dotaccent*/, 771/*dieresis*/, + 0, 780/*ring*/, 785/*cedilla*/, 0, 793/*hungarumlaut*/, 806/*ogonek*/, + 813/*caron*/, 819/*emdash*/, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 826/*AE*/, 0, 829/*ordfeminine*/, 0, 0, 0, 0, 841/*Lslash*/, 848/*Oslash*/, + 855/*OE*/, 858/*ordmasculine*/, 0, 0, 0, 0, 0, 871/*ae*/, 0, 0, 0, + 874/*dotlessi*/, 0, 0, 883/*lslash*/, 890/*oslash*/, 897/*oe*/, + 900/*germandbls*/, 0, 0, 0, 0, +}; + +#define ps_standard_encoding(index) ((index) ? ps_standard_encoding_symbol+ps_standard_encoding_offset[(index)] : NULL) + static void use_standard_encoding_glyph (cairo_type1_font_subset_t *font, int index) { @@ -573,7 +676,7 @@ use_standard_encoding_glyph (cairo_type1_font_subset_t *font, int index) if (index < 0 || index > 255) return; - glyph_name = ps_standard_encoding[index]; + glyph_name = ps_standard_encoding(index); if (glyph_name == NULL) return; From 1002d016834926a771aa0a6cc4bdf83cb009173a Mon Sep 17 00:00:00 2001 From: Kjartan Maraas Date: Thu, 11 Jan 2007 17:59:16 -0500 Subject: [PATCH 22/53] Remove unused variables (#7963) --- src/cairo-pdf-surface.c | 3 +-- src/cairo-ps-surface.c | 3 +-- src/cairo-svg-surface.c | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/cairo-pdf-surface.c b/src/cairo-pdf-surface.c index 640b67e74..821ea5f50 100644 --- a/src/cairo-pdf-surface.c +++ b/src/cairo-pdf-surface.c @@ -1980,7 +1980,7 @@ _cairo_pdf_surface_emit_bitmap_glyph (cairo_pdf_surface_t *surface, cairo_status_t status; cairo_image_surface_t *image; unsigned char *row, *byte; - int rows, cols, bytes_per_row; + int rows, cols; status = _cairo_scaled_glyph_lookup (scaled_font, glyph_index, @@ -2025,7 +2025,6 @@ _cairo_pdf_surface_emit_bitmap_glyph (cairo_pdf_surface_t *surface, _cairo_output_stream_printf (surface->output, "ID "); - bytes_per_row = (image->width + 7) / 8; for (row = image->data, rows = image->height; rows; row += image->stride, rows--) { for (byte = row, cols = (image->width + 7) / 8; cols; byte++, cols--) { unsigned char output_byte = CAIRO_BITSWAP8_IF_LITTLE_ENDIAN (*byte); diff --git a/src/cairo-ps-surface.c b/src/cairo-ps-surface.c index efdc3c486..45d9fe70b 100644 --- a/src/cairo-ps-surface.c +++ b/src/cairo-ps-surface.c @@ -572,7 +572,7 @@ _cairo_ps_surface_emit_bitmap_glyph_data (cairo_ps_surface_t *surface, cairo_status_t status; cairo_image_surface_t *image; unsigned char *row, *byte; - int rows, cols, bytes_per_row; + int rows, cols; status = _cairo_scaled_glyph_lookup (scaled_font, glyph_index, @@ -613,7 +613,6 @@ _cairo_ps_surface_emit_bitmap_glyph_data (cairo_ps_surface_t *surface, _cairo_output_stream_printf (surface->final_stream, " /DataSource {<"); - bytes_per_row = (image->width + 7) / 8; for (row = image->data, rows = image->height; rows; row += image->stride, rows--) { for (byte = row, cols = (image->width + 7) / 8; cols; byte++, cols--) { unsigned char output_byte = CAIRO_BITSWAP8_IF_LITTLE_ENDIAN (*byte); diff --git a/src/cairo-svg-surface.c b/src/cairo-svg-surface.c index 573fb3c06..534ba01f9 100644 --- a/src/cairo-svg-surface.c +++ b/src/cairo-svg-surface.c @@ -623,7 +623,7 @@ _cairo_svg_document_emit_bitmap_glyph_data (cairo_svg_document_t *document, cairo_scaled_glyph_t *scaled_glyph; cairo_status_t status; unsigned char *row, *byte; - int rows, cols, bytes_per_row; + int rows, cols; int x, y, bit; status = _cairo_scaled_glyph_lookup (scaled_font, @@ -644,7 +644,6 @@ _cairo_svg_document_emit_bitmap_glyph_data (cairo_svg_document_t *document, _cairo_output_stream_printf (document->xml_node_glyphs, "xml_node_glyphs, " transform", ">/n", &image->base.device_transform); - bytes_per_row = (image->width + 7) / 8; for (y = 0, row = image->data, rows = image->height; rows; row += image->stride, rows--, y++) { for (x = 0, byte = row, cols = (image->width + 7) / 8; cols; byte++, cols--) { unsigned char output_byte = CAIRO_BITSWAP8_IF_LITTLE_ENDIAN (*byte); From 9cabf5b5f7dd840f91b5be29567cf11cf40fc998 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Mon, 15 Jan 2007 00:26:20 -0500 Subject: [PATCH 23/53] [TODO] Move some items from ROADMAP, and some new ones, into TODO --- ROADMAP | 17 ----------------- TODO | 40 ++++++++++++++++++++++++++++++++++------ 2 files changed, 34 insertions(+), 23 deletions(-) diff --git a/ROADMAP b/ROADMAP index b5a539f91..ba931f36a 100644 --- a/ROADMAP +++ b/ROADMAP @@ -65,23 +65,6 @@ cairo 1.4.0 ideas (think performance!) ✓ New tessellator - Look into using alloca instead of malloc when copying glyphs/path/etc to edit - and use in one function and deallocate upon return. - - Look into generating EPS. That may be done using a new constructor for the - PS backend, or better, using an API similar to - cairo_svg_surface_restrict_to_version. The PDF backend needs a restrict_to - API at some point too. - - Look into the glyph cache. Moreover, make sure we are reusing scaled fonts - enough. - - User-font API---a couple of threads of interest: - http://lists.freedesktop.org/archives/cairo/2006-May/006893.html - http://lists.freedesktop.org/archives/cairo/2006-May/006888.html - - Polling API (cairo_get_serial and cairo_changed) - Bugs to fix ----------- CAIRO_EXTEND_PAD is not implemented for surface patterns diff --git a/TODO b/TODO index c44c5f4c5..cc82af67c 100644 --- a/TODO +++ b/TODO @@ -75,20 +75,36 @@ Other changes (this text used to be in RODMAP) cairo_arc_to see http://lists.freedesktop.org/archives/cairo/2005-August/004801.html or see arc_to branch in bedhad's repository + User-font API---a couple of threads of interest: + http://lists.freedesktop.org/archives/cairo/2006-May/006893.html + http://lists.freedesktop.org/archives/cairo/2006-May/006888.html + Polling API (cairo_get_serial and cairo_changed) PS/PDF improvements 1. Make image fallbacks finer-grained than a whole page - 2. Ensure that PDF text output is "selectable" + 2. Ensure that PDF text output is "selectable". see this thread: + http://lists.freedesktop.org/archives/cairo/2007-January/009059.html + 3. Fix extend modes in PDF + 4. Fix encoding "issues" reported here: + http://lists.freedesktop.org/archives/cairo/2006-December/008985.html + 5. Use glyph advances to generate more compact PS/PDF + 6. Look into generating EPS. That may be done using a new constructor + for the PS backend, or better, using an API similar to + cairo_svg_surface_restrict_to_version. The PDF backend needs a + restrict_to API at some point too. + + Xlib backend + 1. xlib backend requires xrender to compile, while it can perform without + xrender at run time. Make it compile without it. see + http://lists.freedesktop.org/archives/cairo/2006-October/008075.html + 2. Cache patterns (maybe solid ones only). see + http://lists.freedesktop.org/archives/cairo/2006-December/008916.html Quartz backend (maintainer needed!) 1. Mark Quartz backend as supported: a. Incorporate into test suite b. Correct output for the entire suite - Misc - 1. xlib backend requires xrender to compile, while it can perform without - xrender at run time. Make it compile without it. - Some known bugs (this text used to be in BUGS) ============================================== XXX: Many of these bugs are likely no longer valid. We should @@ -145,10 +161,22 @@ cairo_scale (cr, 0, 0); Text drawn with vertical metrics cannot currently use TrueType subsetting for PDF/PS output as the code doesn't write out the necessary VHEA or VMTX entries to the TrueType font objects. As a result, cairo uses -Type3 fonts which generates slightly different outlines. +Type3 fonts which generates slightly different outlines. Type1 has the same +problem. -- Text transformations is a mess in PS/PDF backends. Many combinations of rotated/scaled ctm, rotated/scaled font_matrix, and subsetting code used (Type1/Type3/TrueType) are broken. + +-- + +Move docs inline. see +http://lists.freedesktop.org/archives/cairo/2006-July/007431.html + +-- + +Look into the glyph cache. Moreover, make sure we are reusing scaled fonts +enough. + From 9e332eadad00e115fdcdbc816608a0537f5a9b9c Mon Sep 17 00:00:00 2001 From: Brian Ewins Date: Tue, 16 Jan 2007 01:25:53 +0000 Subject: [PATCH 24/53] [test] Test handling of out-of-range glyph indexes. (#9530) Adds a test for missing and out-of-range glyph indexes. The expected ATSUI renderings are added as references, please replace these with FT renderings when they become available. --- test/Makefile.am | 4 + test/text-glyph-range-ref.png | Bin 0 -> 1810 bytes test/text-glyph-range-rgb24-ref.png | Bin 0 -> 1645 bytes test/text-glyph-range.c | 133 ++++++++++++++++++++++++++++ 4 files changed, 137 insertions(+) create mode 100644 test/text-glyph-range-ref.png create mode 100644 test/text-glyph-range-rgb24-ref.png create mode 100644 test/text-glyph-range.c diff --git a/test/Makefile.am b/test/Makefile.am index efdb16234..f675a299b 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -88,6 +88,7 @@ text-antialias-gray \ text-antialias-none \ text-antialias-subpixel \ text-cache-crash \ +text-glyph-range \ text-pattern \ text-rotate \ text-zero-len \ @@ -315,6 +316,8 @@ surface-pattern-ref.png \ text-antialias-gray-ref.png \ text-antialias-none-ref.png \ text-antialias-subpixel-ref.png \ +text-glyph-range-ref.png \ +text-glyph-range-rgb24-ref.png \ text-pattern-ref.png \ text-pattern-rgb24-ref.png \ text-pattern-svg-argb32-ref.png \ @@ -353,6 +356,7 @@ ft-text-vertical-layout-type1 \ leaky-dash \ long-lines \ self-intersecting \ +text-glyph-range \ text-rotate # Any test that doesn't generate a log file goes here diff --git a/test/text-glyph-range-ref.png b/test/text-glyph-range-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..086aa4a4b09e97496d1efe1ec7574d3b3e961742 GIT binary patch literal 1810 zcmaJ?X;>0!7IwRC>A0ukk|Hi$MJ2^tGIK#gNf2>^(i_BRrn#p!5}J(^mTNARnuZ`2 zm|NyjMtHC0^|nZcxTI-WDd3tKu3cv4*Zi3Ke9!sLdA{$Q^W#0|J%c_uNZ4cw7#6-R&6X!!sS5WY^#@(kC%<<-A(KY&9E4f^5QS4 zZto~y)4YZUtltXf=ZDTg#AAfsnhHBOA&X6<nnHm3l_KS@+0D zCQlorb#-}}xL~(;5w^N7 zqa0M^Wd%ZE@tr%$jA4qdT_h}3R#p}UgJtv1_4Vf)%p^Jwjf{}*-2`S{H+9kp z1UckgH%}Z6APL7}vDt%z>Jdn!+Un|RQDx=zN~eTg;rhpqeb)yD2YZ=eP0LqGuIG~h z!l8TKw4nO~pH@KOcAIyPqtRNpsUqI!=)u?l*Yrh0>DpNS!`%LDLAoUK`O)UfGM7D? zJ3Bfmq=s_$>1t218|DCo#>ad~BzH|ME#SGM2h>DqN1&+R7|0s1V?rlZxv#GeC#*S| zNxrnb;n^6f@W+N|OtvSoP~u>fr=vqYfkf8T)|yZk_jb3PiDK{#Utnu%Yje!7#mm>P zNoWy`W+obK0kZnPegoLqA%iRwWs*};xDyl1gOR~{)KDgu&(}qzZ-_9rPFSq1uX~EK z7S@($ydSl<+qk5~#j!xIrl(KCHlIJ2N_91wPWz)kSEmisHg-cn?ZD}%C<|76T$~D> zPWN<>nx5*(w5~p2Z*RXm#|8S`KA4xWyXBa+G}SnF3WXaevkseH|0fEKmX#F6!z6oe zkMzDX$(w3zZT;)QL)65vb`2hnSCqPa z!a^VrY}I4RIj6(HHJj|FU)YG1l@-p81S=QAg4{wS-NRNYn8mX0Dsk+ipfKs@A`!@) zC{}-)X@>T7u|{+;gUp%y&+cEb^8~8Qmr&Z~=H@=-w1x4X*499=fv-O*LY%(%ko%nK zgz7qMZk&eB@YIsh|B&o2_$Rhi)zF)I)g)tT3ER=xeW3BaqJ1YYA7^)xFx;=^PH)Ke~|i4_&2~=dXI)iqM!5gkF~b>yJRxlgaYQU8f*N zj|N0UL<9#1Yf~p5pEqcK{J4ZKq)UkMprN65d>l*hU38SL6$s9Cr+oceKtO=agA`{& z8ee$7r>EM&!s09*pEEu&;l~)hG^T8JvjI%2uO~~uFHaTC&YIB~4ESKF9=;t56!`o5 zH_++kw5MHNw^rS zSW|6nZ1SNfm7mj}OqQ0HTUdvJ{}T$O2Ni!lr?e9>iwxXQZ zLr)68!NEb}f_{D!XJ?0WEC!;FX~{VRG#|(TBxk~slapa^BSXU-3-8(Ha5W7dRFWDc z4-<+)6|;WqTiYZKorRRNp6rNk490reJ2>Fl#=Hj4A2yJfW!0b{xMElb_8RqIYWgm&zG7AvkVa{%84>WO5#M`NHV=nr+r3ri3TU}GrU#l__vmkZ!N z&HP?aV06TnLZOrv6?wcUG-gQV!oyAg6neNazqPH+kI5?uWzt2WxYn__*1{h*JfLQZ zUZZ7O_zP8^Ev@bXK4@{$F~XJV5C~Oflr*-{!?_CjtFiz8I`W6Kx4rF8y=)(zWTi>@ M`5>SVy-w%+2@)Y(T>t<8 literal 0 HcmV?d00001 diff --git a/test/text-glyph-range-rgb24-ref.png b/test/text-glyph-range-rgb24-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..9e8232c4d6a65dafae1dee227f22392df2d47c0e GIT binary patch literal 1645 zcmb7F`&ZHj6#qgt#lp8)YAWow*>w3_Z9b+Vf})^lVn{L~MPq7A6JN=i1*WEs(9||9 zDUWlcI84(Be5FJ+I7+RVk5cpfz{)3Tj_nWF&OY~Z?>*<9d+raPbMLu%p*S>D*IX9> z0BB$UGE9?WG#;b_)r$(Q_(&bi1pWg0fHKugG1o9vzi|L zK&0>S^q&{5M+X}RT6V-ey4s?(98leZ;8evab|LJXOD-<)+>8!AL>k$dcbZw7D9j*B zJ_d`Ou4mjjxG1=OueNdU%d7EMY+>ggoMcUd(DOBSiFKEbmqZO3Sxs8$&Vd&ei@*hG z?}L={^6%5A>Ypm)^V&!qP>z$)!-kGEEe;FxFSKRsmgwrdIJ&ypbp+(|Xk|dKH8Lz- zV)Y_W9wf>zJ z@X`yoylH3@E7?8iaQmd>mHn)>CxUc6$*F?*EIuY|MiI4Oee|qLXFI9ALBM~4=hqm? zLeNE9j1?L=mX)`6p+Leo~x^CU0ofuX`|zZT?|n+nM`IfM_LS5HqKjq zl_ehO>pOO_^QLk}tyW)oDfznKHT8 z{}{9V`yh4M*?nGKUKhUDD-wymVvnxOy#N7ei$en?Q@t&n4|=B46BD8K@0XXCZ=s8O_p%VxLZJ)Q z3~?eV%6#FQq05JY;GAGAwx@t3Vqp2taagRc4hT@(@V4H+-=HdkLV=^>8H{U{F0QV( zLhUX{yDMwUo2qfOS*!B{v$M3PzbK~o4GnCIJ>#E-RLvjPXwc?JdO&8Jxz2n)iS_jb zsq!d~@2Ae;o%SctXvyxCoPe0jO!bI3EBJ0p%j#%%uCcLkb?EflajBo5pGQOz8Z8y2 zsiKI)ZD#x6g5>;0GKE4R5-oNrJey!rt+$`|6&|3)$J^Q4+eaDejJBmrm2V_zCccqz zArJ@v)Z;x|T)=dyUn!=!#$k1JSdg%(&);Yt&lBY_`xu`{3M^(-`5%)@L_o)fcF}HH9tn4i0&BO#KcbxxzI|Q8JsZxma z;J$_jyI}W9oo$3p|H*YytgrLPQuUX*s5gthQ~$VOk+cTKC?V()wn@hROwX#`UQ{W@ zmJ_g?DgK>$8m+mRtck~^B_$?>C}n@YkzQ_vK^hUE(>+R0Nl8JWP)|Ru$MZ>o5X|4` zpIgE6BSKSeVNK=?Wl0j#90SCo1x6f|%1BLZJK5l4y}iBNNv1QI z5)GQ0BgiWNP*_-4Y~>Y2APiVF4=!jHicY7W`3H1*Xm#ivZ|FEOn1ID%6B84``XmzR zk9fDIhXoEz1D1|7H}g%k`p-jRu^4rWb5D=**!|q}kII=VW>6L)IyzcfbdZaw>GSnD zR?;yG0!|)|d=QVr>0y=gCdE=Nm)lJ||^BjP-F_ll(#F%<6-a+A^!SgIn=`3Jopo3S6A2A z7;hk*hT3b(i!j;7c$HpiHJ@DHt1~4rc@;Cg_pz+Ssd4X9!uaTM9st{ + */ + +/* Related to bug 9530 + * + * cairo_glyph_t can contain any unsigned long in its 'index', the intention + * being that it is large enough to hold a pointer. However, this means that + * it can specify many glyph indexes which don't exist in the font, and may + * exceed the range of legal glyph indexes for the font backend. It may + * also contain special values that are not usable as indexes - e.g. 0xffff is + * kATSDeletedGlyphcode in ATSUI, a glyph that should not be drawn. + * The font backends should handle all legal and out-of-range values consistently. + * + * This test expects that operations on out-of-range and missing glyphs should + * act as if they were zero-width. + */ + +#include "cairo-test.h" + +#define WIDTH 100 +#define HEIGHT 75 +#define NUM_TEXT 20 +#define TEXT_SIZE 12 + +static cairo_test_draw_function_t draw; + +cairo_test_t test = { + "text-glyph-range", + "Tests show_glyphs, glyph_path, glyph_extents with out of range glyph ids." + "\nft and atsui font backends fail, misreporting errors from FT_Load_Glyph and ATSUGlyphGetCubicPaths", + WIDTH, HEIGHT, + draw +}; + +static cairo_test_status_t +draw (cairo_t *cr, int width, int height) +{ + cairo_text_extents_t extents; + int i; + /* Glyphs with no paths followed by 'cairo', the additional + * text is to make the space obvious. + */ + long int index[] = { + 0, /* 'no matching glyph' */ + 0xffff, /* kATSDeletedGlyphCode */ + 0x1ffff, /* out of range */ + -1L, /* out of range */ + 70, 68, 76, 85, 82 /* 'cairo' */ + }; + + /* We draw in the default black, so paint white first. */ + cairo_save (cr); + cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); /* white */ + cairo_paint (cr); + cairo_restore (cr); + + cairo_select_font_face (cr, "Bitstream Vera Sans", + CAIRO_FONT_SLANT_NORMAL, + CAIRO_FONT_WEIGHT_NORMAL); + cairo_set_font_size (cr, 16); + + + for (i = 0; i < 9; i++) { + /* since we're just drawing glyphs directly we need to position them. */ + cairo_glyph_t glyph = { + index[i], 10 * i, 25 + }; + + /* test cairo_glyph_extents. Every glyph index should + * have extents, invalid glyphs should be zero-width. + */ + cairo_move_to (cr, glyph.x, glyph.y); + cairo_set_line_width (cr, 1.0); + cairo_glyph_extents (cr, &glyph, 1, &extents); + cairo_rectangle (cr, + glyph.x + extents.x_bearing - 0.5, + glyph.y + extents.y_bearing - 0.5, + extents.width + 1, + extents.height + 1); + cairo_set_source_rgb (cr, 1, 0, 0); /* red */ + cairo_stroke (cr); + + /* test cairo_show_glyphs. Every glyph index should be + * drawable, invalid glyph indexes should draw nothing. + */ + cairo_set_source_rgb (cr, 0, 0, 0); /* black */ + cairo_show_glyphs (cr, &glyph, 1); + cairo_move_to (cr, glyph.x, glyph.y); + + /* test cairo_glyph_path. Every glyph index should produce + * a path, invalid glyph indexes should have empty paths. + */ + /* Change the glyph position + * so that the paths are visible. + */ + glyph.y = 55; + cairo_move_to (cr, glyph.x, glyph.y); + cairo_glyph_path (cr, &glyph, 1); + cairo_fill (cr); + } + + return CAIRO_TEST_SUCCESS; +} + +int +main (void) +{ + return cairo_test (&test); +} From a2ec383ff128617d33efa5760ec4b5f9688e8a13 Mon Sep 17 00:00:00 2001 From: Pavel Roskin Date: Sun, 13 Aug 2006 01:57:56 -0400 Subject: [PATCH 25/53] Clean up _fbOnes() The implementation of _FbOnes in iccolor.c would not work on 64-bit longs correctly. Fortunately, it's only used on integers, so make it explicit in the declaration. Use an inline function for the gcc builtin implementation to make sure that it's never used with arguments of incorrect size. There is no __INT_MIN__ in gcc 4.1.1, but it's not an issue now because the argument is 32-bit. Signed-off-by: Pavel Roskin --- pixman/src/iccolor.c | 4 ++-- pixman/src/icint.h | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pixman/src/iccolor.c b/pixman/src/iccolor.c index 26b4aaf57..9dd8f5e42 100644 --- a/pixman/src/iccolor.c +++ b/pixman/src/iccolor.c @@ -26,9 +26,9 @@ #ifdef ICINT_NEED_IC_ONES /* Fall back on HACKMEM 169. */ int -_FbOnes (unsigned long mask) +_FbOnes (unsigned int mask) { - register unsigned long y; + register int y; y = (mask >> 1) &033333333333; y = mask - y - ((y >>1) & 033333333333); diff --git a/pixman/src/icint.h b/pixman/src/icint.h index 17b13b491..93795b056 100644 --- a/pixman/src/icint.h +++ b/pixman/src/icint.h @@ -804,15 +804,15 @@ fbRasterizeTrapezoid (pixman_image_t *pMask, in libgcc in case a target does not have one, which should be just as good as the static function below. */ #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) -# if __INT_MIN__ == 0x7fffffff -# define _FbOnes(mask) __builtin_popcount(mask) -# else -# define _FbOnes(mask) __builtin_popcountl((mask) & 0xffffffff) -# endif +static INLINE int +_FbOnes(unsigned int mask) +{ + return __builtin_popcount(mask); +} #else # define ICINT_NEED_IC_ONES pixman_private int -_FbOnes(unsigned long mask); +_FbOnes(unsigned int mask); #endif /* icformat.c */ From 5c2136ea7c3aea1ae90b46b0dd645a4e1b5cc9a1 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Wed, 17 Jan 2007 15:47:24 -0500 Subject: [PATCH 26/53] Implement pixman fbCompositeSrc_8888x0565mmx MMX-accelerate for fbCompositeSrc_8888x0565. Upstream X bug for the same issue: http://bugs.freedesktop.org/show_bug.cgi?id=9682 --- pixman/src/fbmmx.c | 122 ++++++++++++++++++++++++++++++++++++++ pixman/src/fbmmx.h | 13 ++++ pixman/src/fbpict.c | 14 ++++- pixman/src/pixman-remap.h | 1 + 4 files changed, 148 insertions(+), 2 deletions(-) diff --git a/pixman/src/fbmmx.c b/pixman/src/fbmmx.c index f6f512f1d..aa18019ae 100644 --- a/pixman/src/fbmmx.c +++ b/pixman/src/fbmmx.c @@ -1443,6 +1443,128 @@ fbCompositeSrc_8888x8888mmx (pixman_operator_t op, _mm_empty(); } +void +fbCompositeSrc_8888x0565mmx (pixman_operator_t op, + PicturePtr pSrc, + PicturePtr pMask, + PicturePtr pDst, + INT16 xSrc, + INT16 ySrc, + INT16 xMask, + INT16 yMask, + INT16 xDst, + INT16 yDst, + CARD16 width, + CARD16 height) +{ + CARD16 *dstLine, *dst; + CARD32 *srcLine, *src; + FbStride dstStride, srcStride; + CARD16 w; + + CHECKPOINT(); + + fbComposeGetStart (pDst, xDst, yDst, CARD16, dstStride, dstLine, 1); + fbComposeGetStart (pSrc, xSrc, ySrc, CARD32, srcStride, srcLine, 1); + + assert (pSrc->pDrawable == pMask->pDrawable); + + while (height--) + { + dst = dstLine; + dstLine += dstStride; + src = srcLine; + srcLine += srcStride; + w = width; + + CHECKPOINT(); + + while (w && (unsigned long)dst & 7) + { + __m64 vsrc = load8888 (*src); + ullong d = *dst; + __m64 vdest = expand565 ((__m64)d, 0); + + vdest = pack565(over(vsrc, expand_alpha(vsrc), vdest), vdest, 0); + + *dst = (ullong)vdest; + + w--; + dst++; + src++; + } + + CHECKPOINT(); + + while (w >= 4) + { + CARD32 s0, s1, s2, s3; + unsigned char a0, a1, a2, a3; + __m64 vsrc0, vsrc1, vsrc2, vsrc3; + + s0 = *src; + s1 = *(src + 1); + s2 = *(src + 2); + s3 = *(src + 3); + + a0 = (s0 >> 24); + a1 = (s1 >> 24); + a2 = (s2 >> 24); + a3 = (s3 >> 24); + + vsrc0 = load8888(s0); + vsrc1 = load8888(s1); + vsrc2 = load8888(s2); + vsrc3 = load8888(s3); + + if ((a0 & a1 & a2 & a3) == 0xFF) + { + __m64 vdest; + vdest = pack565(vsrc0, _mm_setzero_si64(), 0); + vdest = pack565(vsrc1, vdest, 1); + vdest = pack565(vsrc2, vdest, 2); + vdest = pack565(vsrc3, vdest, 3); + + *(__m64 *)dst = vdest; + } + else if (a0 | a1 | a2 | a3) + { + __m64 vdest = *(__m64 *)dst; + + vdest = pack565(over(vsrc0, expand_alpha(vsrc0), expand565(vdest, 0)), vdest, 0); + vdest = pack565(over(vsrc1, expand_alpha(vsrc1), expand565(vdest, 1)), vdest, 1); + vdest = pack565(over(vsrc2, expand_alpha(vsrc2), expand565(vdest, 2)), vdest, 2); + vdest = pack565(over(vsrc3, expand_alpha(vsrc3), expand565(vdest, 3)), vdest, 3); + + *(__m64 *)dst = vdest; + } + + w -= 4; + dst += 4; + src += 4; + } + + CHECKPOINT(); + + while (w) + { + __m64 vsrc = load8888 (*src); + ullong d = *dst; + __m64 vdest = expand565 ((__m64)d, 0); + + vdest = pack565(over(vsrc, expand_alpha(vsrc), vdest), vdest, 0); + + *dst = (ullong)vdest; + + w--; + dst++; + src++; + } + } + + _mm_empty(); +} + void fbCompositeSolidMask_nx8x8888mmx (pixman_operator_t op, PicturePtr pSrc, diff --git a/pixman/src/fbmmx.h b/pixman/src/fbmmx.h index 5c081800d..054ac0b73 100644 --- a/pixman/src/fbmmx.h +++ b/pixman/src/fbmmx.h @@ -179,6 +179,19 @@ void fbCompositeSrc_8888RevNPx8888mmx (pixman_operator_t op, CARD16 width, CARD16 height); pixman_private +void fbCompositeSrc_8888x0565mmx (pixman_operator_t op, + PicturePtr pSrc, + PicturePtr pMask, + PicturePtr pDst, + INT16 xSrc, + INT16 ySrc, + INT16 xMask, + INT16 yMask, + INT16 xDst, + INT16 yDst, + CARD16 width, + CARD16 height); +pixman_private void fbCompositeSrc_8888RevNPx0565mmx (pixman_operator_t op, PicturePtr pSrc, PicturePtr pMask, diff --git a/pixman/src/fbpict.c b/pixman/src/fbpict.c index 2019cbc5d..63b1cbcf0 100644 --- a/pixman/src/fbpict.c +++ b/pixman/src/fbpict.c @@ -1735,7 +1735,12 @@ pixman_composite (pixman_operator_t op, func = fbCompositeSrc_8888x0888; break; case PICT_r5g6b5: - func = fbCompositeSrc_8888x0565; +#ifdef USE_MMX + if (fbHaveMMX()) + func = fbCompositeSrc_8888x0565mmx; + else +#endif + func = fbCompositeSrc_8888x0565; break; } break; @@ -1754,7 +1759,12 @@ pixman_composite (pixman_operator_t op, func = fbCompositeSrc_8888x0888; break; case PICT_b5g6r5: - func = fbCompositeSrc_8888x0565; +#ifdef USE_MMX + if (fbHaveMMX()) + func = fbCompositeSrc_8888x0565mmx; + else +#endif + func = fbCompositeSrc_8888x0565; break; } break; diff --git a/pixman/src/pixman-remap.h b/pixman/src/pixman-remap.h index 45a4477af..290df3281 100644 --- a/pixman/src/pixman-remap.h +++ b/pixman/src/pixman-remap.h @@ -13,6 +13,7 @@ #define fbCompositeSolid_nx8888mmx _cairo_pixman_composite_solid_nx8888mmx #define fbCompositeSrc_8888RevNPx0565mmx _cairo_pixman_composite_src_8888RevNPx0565mmx #define fbCompositeSrc_8888RevNPx8888mmx _cairo_pixman_composite_src_8888RevNPx8888_mmx +#define fbCompositeSrc_8888x0565mmx _cairo_pixman_composite_src_8888x0565mmx #define fbCompositeSrc_8888x8888mmx _cairo_pixman_composite_src_8888x8888mmx #define fbCompositeSrc_8888x8x8888mmx _cairo_pixman_composite_src_8888x8x8888mmx #define fbCompositeSrcAdd_8000x8000mmx _cairo_pixman_composite_src_add_8000x8000mmx From b3440e85305af4f5ceef9437af7c26d3232dc55a Mon Sep 17 00:00:00 2001 From: Adrian Johnson Date: Sun, 24 Sep 2006 00:48:36 +0930 Subject: [PATCH 27/53] PDF: Use Td where possible instead of Tm for positioning glyphs This avoids emitting the font matrix for every single glyph. --- src/cairo-pdf-surface.c | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/src/cairo-pdf-surface.c b/src/cairo-pdf-surface.c index 821ea5f50..d29005935 100644 --- a/src/cairo-pdf-surface.c +++ b/src/cairo-pdf-surface.c @@ -2726,6 +2726,7 @@ _cairo_pdf_surface_show_glyphs (void *abstract_surface, cairo_pdf_surface_t *surface = abstract_surface; unsigned int current_subset_id = (unsigned int)-1; unsigned int font_id, subset_id, subset_glyph_index; + cairo_bool_t diagonal; cairo_status_t status; int i; @@ -2741,6 +2742,12 @@ _cairo_pdf_surface_show_glyphs (void *abstract_surface, _cairo_output_stream_printf (surface->output, "BT\r\n"); + if (scaled_font->scale.xy == 0.0 && + scaled_font->scale.yx == 0.0) + diagonal = TRUE; + else + diagonal = FALSE; + for (i = 0; i < num_glyphs; i++) { status = _cairo_scaled_font_subsets_map_glyph (surface->font_subsets, scaled_font, glyphs[i].index, @@ -2748,22 +2755,29 @@ _cairo_pdf_surface_show_glyphs (void *abstract_surface, if (status) return status; - if (subset_id != current_subset_id) { + if (subset_id != current_subset_id) _cairo_output_stream_printf (surface->output, "/CairoFont-%d-%d 1 Tf\r\n", font_id, subset_id); - current_subset_id = subset_id; - } - _cairo_output_stream_printf (surface->output, - "%f %f %f %f %f %f Tm <%02x> Tj\r\n", - scaled_font->scale.xx, - scaled_font->scale.yx, - -scaled_font->scale.xy, - -scaled_font->scale.yy, - glyphs[i].x, - glyphs[i].y, - subset_glyph_index); + if (subset_id != current_subset_id || !diagonal) { + _cairo_output_stream_printf (surface->output, + "%f %f %f %f %f %f Tm <%02x> Tj\r\n", + scaled_font->scale.xx, + scaled_font->scale.yx, + -scaled_font->scale.xy, + -scaled_font->scale.yy, + glyphs[i].x, + glyphs[i].y, + subset_glyph_index); + current_subset_id = subset_id; + } else { + _cairo_output_stream_printf (surface->output, + "%f %f Td <%02x> Tj\r\n", + (glyphs[i].x - glyphs[i-1].x)/scaled_font->scale.xx, + (glyphs[i].y - glyphs[i-1].y)/scaled_font->scale.yy, + subset_glyph_index); + } } _cairo_output_stream_printf (surface->output, From 7f246462eb3cc2576387755fa2d554394e86225c Mon Sep 17 00:00:00 2001 From: Adrian Johnson Date: Sun, 24 Sep 2006 00:52:01 +0930 Subject: [PATCH 28/53] Add cairo-deflate-stream.c Add a new stream type that compresses the stream using the zlib deflate method. This is intended for use by the PDF surface. --- src/Makefile.am | 1 + src/cairo-deflate-stream.c | 142 ++++++++++++++++++++++++++++++ src/cairo-output-stream-private.h | 4 + 3 files changed, 147 insertions(+) create mode 100644 src/cairo-deflate-stream.c diff --git a/src/Makefile.am b/src/Makefile.am index 5206d3f65..598386743 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -177,6 +177,7 @@ libcairo_la_SOURCES = \ cairo-clip-private.h \ cairo-color.c \ cairo-debug.c \ + cairo-deflate-stream.c \ cairo-fixed.c \ cairo-font.c \ cairo-font-options.c \ diff --git a/src/cairo-deflate-stream.c b/src/cairo-deflate-stream.c new file mode 100644 index 000000000..816f5c57c --- /dev/null +++ b/src/cairo-deflate-stream.c @@ -0,0 +1,142 @@ +/* cairo_deflate_stream.c: Output stream abstraction + * + * Copyright © 2006 Adrian Johnson + * + * This library is free software; you can redistribute it and/or + * modify it either under the terms of the GNU Lesser General Public + * License version 2.1 as published by the Free Software Foundation + * (the "LGPL") or, at your option, under the terms of the Mozilla + * Public License Version 1.1 (the "MPL"). If you do not alter this + * notice, a recipient may use your version of this file under either + * the MPL or the LGPL. + * + * You should have received a copy of the LGPL along with this library + * in the file COPYING-LGPL-2.1; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * You should have received a copy of the MPL along with this library + * in the file COPYING-MPL-1.1 + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY + * OF ANY KIND, either express or implied. See the LGPL or the MPL for + * the specific language governing rights and limitations. + * + * The Original Code is cairo_output_stream.c as distributed with the + * cairo graphics library. + * + * The Initial Developer of the Original Code is Adrian Johnson. + * + * Author(s): + * Adrian Johnson + */ + +#include "cairoint.h" +#include "cairo-output-stream-private.h" +#include + +#define BUFFER_SIZE 16384 + +typedef struct _cairo_deflate_stream { + cairo_output_stream_t base; + cairo_output_stream_t *output; + z_stream zlib_stream; + unsigned char input_buf[BUFFER_SIZE]; + unsigned char output_buf[BUFFER_SIZE]; +} cairo_deflate_stream_t; + +static void +cairo_deflate_stream_deflate (cairo_deflate_stream_t *stream, cairo_bool_t flush) +{ + int ret; + cairo_bool_t finished; + + do { + ret = deflate (&stream->zlib_stream, flush ? Z_FINISH : Z_NO_FLUSH); + if (flush || stream->zlib_stream.avail_out == 0) + { + _cairo_output_stream_write (stream->output, + stream->output_buf, + BUFFER_SIZE - stream->zlib_stream.avail_out); + stream->zlib_stream.next_out = stream->output_buf; + stream->zlib_stream.avail_out = BUFFER_SIZE; + } + + finished = TRUE; + if (stream->zlib_stream.avail_in != 0) + finished = FALSE; + if (flush && ret != Z_STREAM_END) + finished = FALSE; + + } while (!finished); + + stream->zlib_stream.next_in = stream->input_buf; +} + +static cairo_status_t +_cairo_deflate_stream_write (cairo_output_stream_t *base, + const unsigned char *data, + unsigned int length) +{ + cairo_deflate_stream_t *stream = (cairo_deflate_stream_t *) base; + unsigned int count; + const unsigned char *p = data; + + while (length) { + count = length; + if (count > BUFFER_SIZE - stream->zlib_stream.avail_in) + count = BUFFER_SIZE - stream->zlib_stream.avail_in; + memcpy (stream->input_buf + stream->zlib_stream.avail_in, p, count); + p += count; + stream->zlib_stream.avail_in += count; + length -= count; + + if (stream->zlib_stream.avail_in == BUFFER_SIZE) + cairo_deflate_stream_deflate (stream, FALSE); + } + + return _cairo_output_stream_get_status (stream->output); +} + +static cairo_status_t +_cairo_deflate_stream_close (cairo_output_stream_t *base) +{ + cairo_deflate_stream_t *stream = (cairo_deflate_stream_t *) base; + + cairo_deflate_stream_deflate (stream, TRUE); + deflateEnd (&stream->zlib_stream); + + return _cairo_output_stream_get_status (stream->output); +} + +cairo_output_stream_t * +_cairo_deflate_stream_create (cairo_output_stream_t *output) +{ + cairo_deflate_stream_t *stream; + + stream = malloc (sizeof (cairo_deflate_stream_t)); + if (stream == NULL) + return (cairo_output_stream_t *) &cairo_output_stream_nil; + + _cairo_output_stream_init (&stream->base, + _cairo_deflate_stream_write, + _cairo_deflate_stream_close); + stream->output = output; + + stream->zlib_stream.zalloc = Z_NULL; + stream->zlib_stream.zfree = Z_NULL; + stream->zlib_stream.opaque = Z_NULL; + + if (deflateInit (&stream->zlib_stream, Z_DEFAULT_COMPRESSION) != Z_OK) + return (cairo_output_stream_t *) &cairo_output_stream_nil; + + stream->zlib_stream.next_in = stream->input_buf; + stream->zlib_stream.avail_in = 0; + stream->zlib_stream.next_out = stream->output_buf; + stream->zlib_stream.avail_out = BUFFER_SIZE; + + return &stream->base; +} diff --git a/src/cairo-output-stream-private.h b/src/cairo-output-stream-private.h index 913fb6075..d68fbb480 100644 --- a/src/cairo-output-stream-private.h +++ b/src/cairo-output-stream-private.h @@ -159,4 +159,8 @@ _cairo_memory_stream_length (cairo_output_stream_t *stream); cairo_private cairo_output_stream_t * _cairo_base85_stream_create (cairo_output_stream_t *output); +/* cairo_deflate_stream.c */ +cairo_private cairo_output_stream_t * +_cairo_deflate_stream_create (cairo_output_stream_t *output); + #endif /* CAIRO_OUTPUT_STREAM_PRIVATE_H */ From b02b86da5c6c82f9b653698f8480855a35777155 Mon Sep 17 00:00:00 2001 From: Adrian Johnson Date: Sun, 24 Sep 2006 00:55:20 +0930 Subject: [PATCH 29/53] PDF: Compress the content stream Use cairo-deflate-stream to compress all content streams emitted by the PDF surface. --- src/cairo-pdf-surface.c | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/cairo-pdf-surface.c b/src/cairo-pdf-surface.c index d29005935..ec98345c9 100644 --- a/src/cairo-pdf-surface.c +++ b/src/cairo-pdf-surface.c @@ -129,6 +129,8 @@ typedef struct _cairo_pdf_surface { cairo_pdf_resource_t self; cairo_pdf_resource_t length; long start_offset; + cairo_bool_t compressed; + cairo_output_stream_t *old_output; } current_stream; cairo_bool_t has_clip; @@ -146,8 +148,9 @@ _cairo_pdf_surface_clear (cairo_pdf_surface_t *surface); static cairo_pdf_resource_t _cairo_pdf_surface_open_stream (cairo_pdf_surface_t *surface, + cairo_bool_t compressed, const char *fmt, - ...) CAIRO_PRINTF_FORMAT(2, 3); + ...) CAIRO_PRINTF_FORMAT(3, 4); static void _cairo_pdf_surface_close_stream (cairo_pdf_surface_t *surface); @@ -456,6 +459,7 @@ _cairo_pdf_surface_clear (cairo_pdf_surface_t *surface) static cairo_pdf_resource_t _cairo_pdf_surface_open_stream (cairo_pdf_surface_t *surface, + cairo_bool_t compressed, const char *fmt, ...) { @@ -464,12 +468,16 @@ _cairo_pdf_surface_open_stream (cairo_pdf_surface_t *surface, surface->current_stream.active = TRUE; surface->current_stream.self = _cairo_pdf_surface_new_object (surface); surface->current_stream.length = _cairo_pdf_surface_new_object (surface); + surface->current_stream.compressed = compressed; _cairo_output_stream_printf (surface->output, "%d 0 obj\r\n" "<< /Length %d 0 R\r\n", surface->current_stream.self.id, surface->current_stream.length.id); + if (compressed) + _cairo_output_stream_printf (surface->output, + " /Filter /FlateDecode\r\n"); if (fmt != NULL) { va_start (ap, fmt); @@ -483,6 +491,11 @@ _cairo_pdf_surface_open_stream (cairo_pdf_surface_t *surface, surface->current_stream.start_offset = _cairo_output_stream_get_position (surface->output); + if (compressed) { + surface->current_stream.old_output = surface->output; + surface->output = _cairo_deflate_stream_create (surface->output); + } + return surface->current_stream.self; } @@ -494,6 +507,13 @@ _cairo_pdf_surface_close_stream (cairo_pdf_surface_t *surface) if (! surface->current_stream.active) return; + if (surface->current_stream.compressed) { + _cairo_output_stream_destroy (surface->output); + surface->output = surface->current_stream.old_output; + _cairo_output_stream_printf (surface->output, + "\r\n"); + } + length = _cairo_output_stream_get_position (surface->output) - surface->current_stream.start_offset; _cairo_output_stream_printf (surface->output, @@ -577,6 +597,7 @@ _cairo_pdf_surface_resume_content_stream (cairo_pdf_surface_t *surface) cairo_pdf_resource_t stream; stream = _cairo_pdf_surface_open_stream (surface, + TRUE, " /Type /XObject\r\n" " /Subtype /Form\r\n" " /BBox [ 0 0 %f %f ]\r\n", @@ -593,6 +614,7 @@ _cairo_pdf_surface_start_page (void *abstract_surface) cairo_pdf_resource_t stream; stream = _cairo_pdf_surface_open_stream (surface, + TRUE, " /Type /XObject\r\n" " /Subtype /Form\r\n" " /BBox [ 0 0 %f %f ]\r\n", @@ -680,6 +702,7 @@ emit_smask (cairo_pdf_surface_t *surface, } *stream_ret = _cairo_pdf_surface_open_stream (surface, + FALSE, " /Type /XObject\r\n" " /Subtype /Image\r\n" " /Width %d\r\n" @@ -789,12 +812,14 @@ emit_image (cairo_pdf_surface_t *surface, if (need_smask) *image_ret = _cairo_pdf_surface_open_stream (surface, + FALSE, IMAGE_DICTIONARY " /SMask %d 0 R\r\n", image->width, image->height, smask.id); else *image_ret = _cairo_pdf_surface_open_stream (surface, + FALSE, IMAGE_DICTIONARY, image->width, image->height); @@ -928,6 +953,7 @@ emit_surface_pattern (cairo_pdf_surface_t *surface, cairo_matrix_scale (&pdf_p2d, 1.0, -1.0); stream = _cairo_pdf_surface_open_stream (surface, + FALSE, " /BBox [0 0 %d %d]\r\n" " /XStep %d\r\n" " /YStep %d\r\n" @@ -1942,7 +1968,7 @@ _cairo_pdf_surface_emit_outline_glyph (cairo_pdf_surface_t *surface, if (status) return status; - *glyph_ret = _cairo_pdf_surface_open_stream (surface, NULL); + *glyph_ret = _cairo_pdf_surface_open_stream (surface, FALSE, NULL); _cairo_output_stream_printf (surface->output, "0 0 %f %f %f %f d1\r\n", @@ -1997,7 +2023,7 @@ _cairo_pdf_surface_emit_bitmap_glyph (cairo_pdf_surface_t *surface, return cairo_surface_status (&image->base); } - *glyph_ret = _cairo_pdf_surface_open_stream (surface, NULL); + *glyph_ret = _cairo_pdf_surface_open_stream (surface, FALSE, NULL); _cairo_output_stream_printf (surface->output, "0 0 %f %f %f %f d1\r\n", From 4e1c2b1ad84a695662dea9fbe60a975c928eb277 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Wed, 17 Jan 2007 15:07:31 -0800 Subject: [PATCH 30/53] Rename cairo_copy_clip_rectangles to cairo_copy_clip_rectangle_list --- src/cairo-clip-private.h | 2 +- src/cairo-clip.c | 2 +- src/cairo-gstate.c | 4 ++-- src/cairo.c | 6 +++--- src/cairo.h | 2 +- src/cairoint.h | 2 +- test/get-clip.c | 26 +++++++++++++------------- 7 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/cairo-clip-private.h b/src/cairo-clip-private.h index d3255fae6..3c4ff0d42 100644 --- a/src/cairo-clip-private.h +++ b/src/cairo-clip-private.h @@ -127,6 +127,6 @@ _cairo_clip_translate (cairo_clip_t *clip, cairo_fixed_t ty); cairo_private cairo_rectangle_list_t* -_cairo_clip_copy_rectangles (cairo_clip_t *clip, cairo_gstate_t *gstate); +_cairo_clip_copy_rectangle_list (cairo_clip_t *clip, cairo_gstate_t *gstate); #endif /* CAIRO_CLIP_PRIVATE_H */ diff --git a/src/cairo-clip.c b/src/cairo-clip.c index 83dda7b6a..605589bb9 100644 --- a/src/cairo-clip.c +++ b/src/cairo-clip.c @@ -601,7 +601,7 @@ _cairo_clip_rect_to_user (cairo_gstate_t *gstate, } cairo_private cairo_rectangle_list_t* -_cairo_clip_copy_rectangles (cairo_clip_t *clip, cairo_gstate_t *gstate) +_cairo_clip_copy_rectangle_list (cairo_clip_t *clip, cairo_gstate_t *gstate) { cairo_rectangle_list_t *list; cairo_rectangle_t *rectangles; diff --git a/src/cairo-gstate.c b/src/cairo-gstate.c index 946e17088..18dabd902 100644 --- a/src/cairo-gstate.c +++ b/src/cairo-gstate.c @@ -1177,9 +1177,9 @@ _cairo_gstate_clip_extents (cairo_gstate_t *gstate, } cairo_rectangle_list_t* -_cairo_gstate_copy_clip_rectangles (cairo_gstate_t *gstate) +_cairo_gstate_copy_clip_rectangle_list (cairo_gstate_t *gstate) { - return _cairo_clip_copy_rectangles (&gstate->clip, gstate); + return _cairo_clip_copy_rectangle_list (&gstate->clip, gstate); } static void diff --git a/src/cairo.c b/src/cairo.c index d842d7570..637c0d0ee 100644 --- a/src/cairo.c +++ b/src/cairo.c @@ -2265,7 +2265,7 @@ _cairo_rectangle_list_create_in_error (cairo_status_t status) } /** - * cairo_copy_clip_rectangles: + * cairo_copy_clip_rectangle_list: * * Returns the current clip region as a list of rectangles in user coordinates. * Never returns %NULL. @@ -2281,12 +2281,12 @@ _cairo_rectangle_list_create_in_error (cairo_status_t status) * Since: 1.4 **/ cairo_rectangle_list_t * -cairo_copy_clip_rectangles (cairo_t *cr) +cairo_copy_clip_rectangle_list (cairo_t *cr) { if (cr->status) return _cairo_rectangle_list_create_in_error (cr->status); - return _cairo_gstate_copy_clip_rectangles (cr->gstate); + return _cairo_gstate_copy_clip_rectangle_list (cr->gstate); } /** diff --git a/src/cairo.h b/src/cairo.h index 5e58244d4..bd2620ac0 100644 --- a/src/cairo.h +++ b/src/cairo.h @@ -622,7 +622,7 @@ typedef struct _cairo_rectangle_list { } cairo_rectangle_list_t; cairo_public cairo_rectangle_list_t * -cairo_copy_clip_rectangles (cairo_t *cr); +cairo_copy_clip_rectangle_list (cairo_t *cr); cairo_public void cairo_rectangle_list_destroy (cairo_rectangle_list_t *rectangle_list); diff --git a/src/cairoint.h b/src/cairoint.h index 80ddb002c..060b98812 100755 --- a/src/cairoint.h +++ b/src/cairoint.h @@ -1380,7 +1380,7 @@ _cairo_gstate_clip_extents (cairo_gstate_t *gstate, double *y2); cairo_private cairo_rectangle_list_t* -_cairo_gstate_copy_clip_rectangles (cairo_gstate_t *gstate); +_cairo_gstate_copy_clip_rectangle_list (cairo_gstate_t *gstate); cairo_private cairo_status_t _cairo_gstate_show_surface (cairo_gstate_t *gstate, diff --git a/test/get-clip.c b/test/get-clip.c index b2a001ca4..f6a2f5a4d 100644 --- a/test/get-clip.c +++ b/test/get-clip.c @@ -30,7 +30,7 @@ static cairo_test_draw_function_t draw; cairo_test_t test = { "get-clip", - "Test cairo_copy_clip_rectangles and cairo_clip_extents", + "Test cairo_copy_clip_rectangle_list and cairo_clip_extents", 0, 0, draw }; @@ -46,13 +46,13 @@ check_count (const char *message, cairo_bool_t uses_clip_rects, return 1; if (list->status == CAIRO_STATUS_CLIP_NOT_REPRESENTABLE) return 1; - cairo_test_log ("Error: %s; cairo_copy_clip_rectangles unexpectedly got %d rectangles\n", + cairo_test_log ("Error: %s; cairo_copy_clip_rectangle_list unexpectedly got %d rectangles\n", message, list->num_rectangles); return 0; } if (list->status != CAIRO_STATUS_SUCCESS) { - cairo_test_log ("Error: %s; cairo_copy_clip_rectangles failed with \"%s\"\n", + cairo_test_log ("Error: %s; cairo_copy_clip_rectangle_list failed with \"%s\"\n", message, cairo_status_to_string(list->status)); return 0; } @@ -68,7 +68,7 @@ static cairo_bool_t check_unrepresentable (const char *message, cairo_rectangle_list_t *list) { if (list->status != CAIRO_STATUS_CLIP_NOT_REPRESENTABLE) { - cairo_test_log ("Error: %s; cairo_copy_clip_rectangles got unexpected result \"%s\"\n" + cairo_test_log ("Error: %s; cairo_copy_clip_rectangle_list got unexpected result \"%s\"\n" " (we expected CAIRO_STATUS_CLIP_NOT_REPRESENTABLE)", message, cairo_status_to_string(list->status)); return 0; @@ -126,7 +126,7 @@ draw (cairo_t *cr, int width, int height) cr2 = cairo_create (surface); cairo_surface_destroy (surface); - /* Check the surface type so we ignore cairo_copy_clip_rectangles failures + /* Check the surface type so we ignore cairo_copy_clip_rectangle_list failures * on surface types that don't use rectangle lists for clipping. * Default to FALSE for the internal surface types, (meta, test-fallback, etc.) */ @@ -154,7 +154,7 @@ draw (cairo_t *cr, int width, int height) /* first, test basic stuff. This should not be clipped, it should return the surface rectangle. */ phase = "No clip set"; - rectangle_list = cairo_copy_clip_rectangles (cr2); + rectangle_list = cairo_copy_clip_rectangle_list (cr2); if (!check_count (phase, uses_clip_rects, rectangle_list, 1) || !check_clip_extents (phase, cr2, 0, 0, 100, 100) || !check_rectangles_contain(phase, uses_clip_rects, rectangle_list, 0, 0, 100, 100)) { @@ -168,7 +168,7 @@ draw (cairo_t *cr, int width, int height) cairo_save (cr2); cairo_rectangle (cr2, 10, 10, 80, 80); cairo_clip (cr2); - rectangle_list = cairo_copy_clip_rectangles (cr2); + rectangle_list = cairo_copy_clip_rectangle_list (cr2); if (!check_count (phase, uses_clip_rects, rectangle_list, 1) || !check_clip_extents (phase, cr2, 10, 10, 80, 80) || !check_rectangles_contain(phase, uses_clip_rects, rectangle_list, 10, 10, 80, 80)) { @@ -182,7 +182,7 @@ draw (cairo_t *cr, int width, int height) phase = "All clipped out"; cairo_save (cr2); cairo_clip (cr2); - rectangle_list = cairo_copy_clip_rectangles (cr2); + rectangle_list = cairo_copy_clip_rectangle_list (cr2); if (!check_count (phase, uses_clip_rects, rectangle_list, 0)) { cairo_rectangle_list_destroy (rectangle_list); return CAIRO_TEST_FAILURE; @@ -198,7 +198,7 @@ draw (cairo_t *cr, int width, int height) cairo_clip (cr2); cairo_rectangle (cr2, 15, 15, 10, 10); cairo_clip (cr2); - rectangle_list = cairo_copy_clip_rectangles (cr2); + rectangle_list = cairo_copy_clip_rectangle_list (cr2); if (!check_count (phase, uses_clip_rects, rectangle_list, 2) || !check_clip_extents (phase, cr2, 15, 15, 10, 10) || !check_rectangles_contain(phase, uses_clip_rects, rectangle_list, 15, 15, 5, 5) || @@ -217,7 +217,7 @@ draw (cairo_t *cr, int width, int height) cairo_line_to (cr2, 100, 0); cairo_close_path (cr2); cairo_clip (cr2); - rectangle_list = cairo_copy_clip_rectangles (cr2); + rectangle_list = cairo_copy_clip_rectangle_list (cr2); /* can't get this in one tight user-space rectangle */ if (!check_unrepresentable (phase, rectangle_list) || !check_clip_extents (phase, cr2, 0, 0, 100, 100)) { @@ -232,7 +232,7 @@ draw (cairo_t *cr, int width, int height) cairo_scale (cr2, 2, 2); cairo_rectangle (cr2, 5, 5, 40, 40); cairo_clip (cr2); - rectangle_list = cairo_copy_clip_rectangles (cr2); + rectangle_list = cairo_copy_clip_rectangle_list (cr2); if (!check_count (phase, uses_clip_rects, rectangle_list, 1) || !check_clip_extents (phase, cr2, 5, 5, 40, 40) || !check_rectangles_contain(phase, uses_clip_rects, rectangle_list, 5, 5, 40, 40)) { @@ -249,7 +249,7 @@ draw (cairo_t *cr, int width, int height) cairo_rectangle (cr2, 5, 5, 40, 40); cairo_restore (cr2); cairo_clip (cr2); - rectangle_list = cairo_copy_clip_rectangles (cr2); + rectangle_list = cairo_copy_clip_rectangle_list (cr2); if (!check_count (phase, uses_clip_rects, rectangle_list, 1) || !check_clip_extents (phase, cr2, 10, 10, 80, 80) || !check_rectangles_contain(phase, uses_clip_rects, rectangle_list, 10, 10, 80, 80)) { @@ -266,7 +266,7 @@ draw (cairo_t *cr, int width, int height) cairo_rectangle (cr2, 5, 5, 40, 40); cairo_restore (cr2); cairo_clip (cr2); - rectangle_list = cairo_copy_clip_rectangles (cr2); + rectangle_list = cairo_copy_clip_rectangle_list (cr2); if (!check_unrepresentable (phase, rectangle_list)) { cairo_rectangle_list_destroy (rectangle_list); return CAIRO_TEST_FAILURE; From bc7072064e421e4c5e5043aada6cae1d8250938f Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Wed, 17 Jan 2007 15:07:12 -0800 Subject: [PATCH 31/53] cairo-path-fixed: Don't add redundant, succesive MOVE_TO operations to the path Instead, we can simply tweak the argument value for the last MOVE_TO operation that's already at the end of the path. This helps backends like pdf that are currently emitting all of the redundant MOVE_TO operations in the output. --- src/cairo-path-fixed.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/cairo-path-fixed.c b/src/cairo-path-fixed.c index 71d646b80..3505c668b 100644 --- a/src/cairo-path-fixed.c +++ b/src/cairo-path-fixed.c @@ -187,9 +187,19 @@ _cairo_path_fixed_move_to (cairo_path_fixed_t *path, point.x = x; point.y = y; - status = _cairo_path_fixed_add (path, CAIRO_PATH_OP_MOVE_TO, &point, 1); - if (status) - return status; + /* If the previous op was also a MOVE_TO, then just change its + * point rather than adding a new op. */ + if (path->op_buf_tail && path->op_buf_tail->num_ops && + path->op_buf_tail->op[path->op_buf_tail->num_ops - 1] == CAIRO_PATH_OP_MOVE_TO) + { + cairo_point_t *last_move_to_point; + last_move_to_point = &path->arg_buf_tail->points[path->arg_buf_tail->num_points - 1]; + *last_move_to_point = point; + } else { + status = _cairo_path_fixed_add (path, CAIRO_PATH_OP_MOVE_TO, &point, 1); + if (status) + return status; + } path->current_point = point; path->has_current_point = TRUE; From 28d6a228f030dbec05ab5b0ba680db272df67c49 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Thu, 18 Jan 2007 13:01:53 -0800 Subject: [PATCH 32/53] Fix cairo_get_dash and cairo_get_dash_count APIs Make these functions consistent with other cairo_get functions by making cairo_get_dash_count return the count directly, and removing the cairo_status_t return value from cairo_get_dash. --- src/cairo.c | 37 +++++++++++-------------------------- src/cairo.h | 6 +++--- test/get-and-set.c | 17 ++++++----------- 3 files changed, 20 insertions(+), 40 deletions(-) diff --git a/src/cairo.c b/src/cairo.c index 637c0d0ee..2e522a63b 100644 --- a/src/cairo.c +++ b/src/cairo.c @@ -953,26 +953,18 @@ cairo_set_dash (cairo_t *cr, /** * cairo_get_dash_count: * @cr: a #cairo_t - * @count: return value for the number of dash values, or %NULL * - * Gets the length of the dash array in @cr. + * Returns the length of the dash array in @cr (0 if dashing is not + * currently in effect). * - * Return value: %CAIRO_STATUS_SUCCESS, or error status set on - * @cr. + * See also cairo_set_dash() and cairo_get_dash(). * * Since: 1.4 */ -cairo_status_t -cairo_get_dash_count (cairo_t *cr, - int *count) +int +cairo_get_dash_count (cairo_t *cr) { - if (cr->status) - return cr->status; - - if (count) - *count = cr->gstate->stroke_style.num_dashes; - - return CAIRO_STATUS_SUCCESS; + return cr->gstate->stroke_style.num_dashes; } /** @@ -985,27 +977,20 @@ cairo_get_dash_count (cairo_t *cr, * enough to hold at least the number of values returned by * cairo_get_dash_count(). * - * Return value: %CAIRO_STATUS_SUCCESS, or error status set on - * @cr. - * * Since: 1.4 **/ -cairo_status_t +void cairo_get_dash (cairo_t *cr, double *dashes, double *offset) { - if (cr->status) - return cr->status; - - memcpy (dashes, - cr->gstate->stroke_style.dash, - sizeof(double) * cr->gstate->stroke_style.num_dashes); + if (dashes) + memcpy (dashes, + cr->gstate->stroke_style.dash, + sizeof (double) * cr->gstate->stroke_style.num_dashes); if (offset) *offset = cr->gstate->stroke_style.dash_offset; - - return CAIRO_STATUS_SUCCESS; } void diff --git a/src/cairo.h b/src/cairo.h index bd2620ac0..1c3fb25ea 100644 --- a/src/cairo.h +++ b/src/cairo.h @@ -1113,10 +1113,10 @@ cairo_get_line_join (cairo_t *cr); cairo_public double cairo_get_miter_limit (cairo_t *cr); -cairo_public cairo_status_t -cairo_get_dash_count (cairo_t *cr, int *count); +cairo_public int +cairo_get_dash_count (cairo_t *cr); -cairo_public cairo_status_t +cairo_public void cairo_get_dash (cairo_t *cr, double *dashes, double *offset); cairo_public void diff --git a/test/get-and-set.c b/test/get-and-set.c index ec35834fe..c23707e4c 100644 --- a/test/get-and-set.c +++ b/test/get-and-set.c @@ -93,6 +93,8 @@ settings_set (cairo_t *cr, settings_t *settings) static int settings_get (cairo_t *cr, settings_t *settings) { + int count; + settings->op = cairo_get_operator (cr); settings->tolerance = cairo_get_tolerance (cr); settings->fill_rule = cairo_get_fill_rule (cr); @@ -102,18 +104,11 @@ settings_get (cairo_t *cr, settings_t *settings) settings->miter_limit = cairo_get_miter_limit (cr); cairo_get_matrix (cr, &settings->matrix); - { - cairo_status_t status; - int count; + count = cairo_get_dash_count (cr); + if (count != 5) + return -1; - status = cairo_get_dash_count (cr, &count); - if (status || count != 5) - return -1; - - status = cairo_get_dash (cr, settings->dash, &settings->dash_offset); - if (status) - return -1; - } + cairo_get_dash (cr, settings->dash, &settings->dash_offset); return 0; } From 7b67c20a013ed45a10676cb129794ccfb66dc04c Mon Sep 17 00:00:00 2001 From: Vladimir Vukicevic Date: Thu, 18 Jan 2007 16:49:14 -0800 Subject: [PATCH 33/53] [nquartz] use pattern snapshots, and correctly setup/teardown source Use a snapshot for the pattern, to avoid the pattern being freed undreneath us before we actually render (as when rendering to a CG PDF context). Also correctly return UNSUPPORTED from setup source, avoiding brokenness when the source isn't torn down correctly. --- src/cairo-nquartz-surface.c | 81 +++++++++++++++++++++++++++++++------ 1 file changed, 68 insertions(+), 13 deletions(-) diff --git a/src/cairo-nquartz-surface.c b/src/cairo-nquartz-surface.c index 15b3d61b4..dd05c3849 100644 --- a/src/cairo-nquartz-surface.c +++ b/src/cairo-nquartz-surface.c @@ -548,6 +548,29 @@ SurfacePatternDrawFunc (void *info, CGContextRef context) cairo_surface_destroy ((cairo_surface_t*) quartz_surf); } +/* Borrowed from cairo-meta-surface */ +static cairo_status_t +_init_pattern_with_snapshot (cairo_pattern_t *pattern, + const cairo_pattern_t *other) +{ + _cairo_pattern_init_copy (pattern, other); + + if (pattern->type == CAIRO_PATTERN_TYPE_SURFACE) { + cairo_surface_pattern_t *surface_pattern = + (cairo_surface_pattern_t *) pattern; + cairo_surface_t *surface = surface_pattern->surface; + + surface_pattern->surface = _cairo_surface_snapshot (surface); + + cairo_surface_destroy (surface); + + if (surface_pattern->surface->status) + return surface_pattern->surface->status; + } + + return CAIRO_STATUS_SUCCESS; +} + static CGPatternRef _cairo_nquartz_cairo_repeating_surface_pattern_to_quartz (cairo_nquartz_surface_t *dest, cairo_pattern_t *abspat) @@ -564,6 +587,9 @@ _cairo_nquartz_cairo_repeating_surface_pattern_to_quartz (cairo_nquartz_surface_ CGPatternRef cgpat; float rw, rh; + cairo_pattern_union_t *snap_pattern = NULL; + cairo_pattern_t *target_pattern = abspat; + /* SURFACE is the only type we'll handle here */ if (abspat->type != CAIRO_PATTERN_TYPE_SURFACE) return NULL; @@ -628,8 +654,18 @@ _cairo_nquartz_cairo_repeating_surface_pattern_to_quartz (cairo_nquartz_surface_ rh = extents.height; #endif - cairo_pattern_reference (abspat); - cgpat = CGPatternCreate (abspat, + /* XXX fixme: only do snapshots if the context is for printing, or get rid of the + other block if it doesn't fafect performance */ + if (1 /* context is for printing */) { + snap_pattern = (cairo_pattern_union_t*) malloc(sizeof(cairo_pattern_union_t)); + target_pattern = (cairo_pattern_t*) snap_pattern; + _init_pattern_with_snapshot (snap_pattern, abspat); + } else { + cairo_pattern_reference (abspat); + target_pattern = abspat; + } + + cgpat = CGPatternCreate (target_pattern, pbounds, ptransform, rw, rh, @@ -672,7 +708,7 @@ _cairo_nquartz_setup_source (cairo_nquartz_surface_t *surface, { CGShadingRef shading = _cairo_nquartz_cairo_gradient_pattern_to_quartz (source); if (!shading) - return CAIRO_INT_STATUS_UNSUPPORTED; + return DO_UNSUPPORTED; surface->sourceShading = shading; @@ -680,7 +716,7 @@ _cairo_nquartz_setup_source (cairo_nquartz_surface_t *surface, } else if (source->type == CAIRO_PATTERN_TYPE_SURFACE) { CGPatternRef pattern = _cairo_nquartz_cairo_repeating_surface_pattern_to_quartz (surface, source); if (!pattern) - return CAIRO_INT_STATUS_UNSUPPORTED; + return DO_UNSUPPORTED; float patternAlpha = 1.0f; @@ -692,6 +728,8 @@ _cairo_nquartz_setup_source (cairo_nquartz_surface_t *surface, CGColorSpaceRef patternSpace = CGColorSpaceCreatePattern(NULL); CGContextSetFillColorSpace (surface->cgContext, patternSpace); CGContextSetFillPattern (surface->cgContext, pattern, &patternAlpha); + CGContextSetStrokeColorSpace (surface->cgContext, patternSpace); + CGContextSetStrokePattern (surface->cgContext, pattern, &patternAlpha); CGColorSpaceRelease (patternSpace); /* Quartz likes to munge the pattern phase (as yet unexplained @@ -1247,7 +1285,9 @@ _cairo_nquartz_surface_stroke (void *abstract_surface, CGContextSaveGState (surface->cgContext); - CGContextSetShouldAntialias (surface->cgContext, (antialias != CAIRO_ANTIALIAS_NONE)); + // Turning antialiasing off causes misrendering with + // single-pixel lines (e.g. 20,10.5 -> 21,10.5 end up being rendered as 2 pixels) + //CGContextSetShouldAntialias (surface->cgContext, (antialias != CAIRO_ANTIALIAS_NONE)); CGContextSetLineWidth (surface->cgContext, style->line_width); CGContextSetLineCap (surface->cgContext, _cairo_nquartz_cairo_line_cap_to_quartz (style->line_cap)); CGContextSetLineJoin (surface->cgContext, _cairo_nquartz_cairo_line_join_to_quartz (style->line_join)); @@ -1294,6 +1334,8 @@ _cairo_nquartz_surface_stroke (void *abstract_surface, rv = CAIRO_INT_STATUS_UNSUPPORTED; } + _cairo_nquartz_teardown_source (surface, source); + CGContextRestoreGState (surface->cgContext); ND((stderr, "-- stroke\n")); @@ -1363,8 +1405,16 @@ _cairo_nquartz_surface_show_glyphs (void *abstract_surface, CGContextSetFontSize (surface->cgContext, 1.0); // XXXtodo/perf: stack storage for glyphs/sizes - CGGlyph *cg_glyphs = (CGGlyph*) malloc(sizeof(CGGlyph) * num_glyphs); - CGSize *cg_advances = (CGSize*) malloc(sizeof(CGSize) * num_glyphs); +#define STATIC_BUF_SIZE 64 + CGGlyph glyphs_static[STATIC_BUF_SIZE]; + CGSize cg_advances_static[STATIC_BUF_SIZE]; + CGGlyph *cg_glyphs = &glyphs_static[0]; + CGSize *cg_advances = &cg_advances_static[0]; + + if (num_glyphs > STATIC_BUF_SIZE) { + cg_glyphs = (CGGlyph*) malloc(sizeof(CGGlyph) * num_glyphs); + cg_advances = (CGSize*) malloc(sizeof(CGSize) * num_glyphs); + } double xprev = glyphs[0].x; double yprev = glyphs[0].y; @@ -1392,8 +1442,10 @@ _cairo_nquartz_surface_show_glyphs (void *abstract_surface, cg_advances, num_glyphs); - free (cg_glyphs); - free (cg_advances); + if (cg_glyphs != &glyphs_static[0]) { + free (cg_glyphs); + free (cg_advances); + } if (action == DO_SHADING) CGContextDrawShading (surface->cgContext, surface->sourceShading); @@ -1422,10 +1474,13 @@ _cairo_nquartz_surface_mask (void *abstract_surface, CGContextSetAlpha (surface->cgContext, solid_mask->color.alpha); } else { - /* So, CGContextClipToMask is not present in 10.3.9, so we're doomed; we could - * do fallback, if we implemented _composite, but for now let's just not support - * this. (But pretend we did.) + /* So, CGContextClipToMask is not present in 10.3.9, so we're + * doomed; if we have imageData, we can do fallback, otherwise + * just pretend success. */ + if (surface->imageData) + return CAIRO_INT_STATUS_UNSUPPORTED; + return CAIRO_STATUS_SUCCESS; } @@ -1646,7 +1701,7 @@ cairo_nquartz_surface_create (cairo_format_t format, if (width % 4 == 0) stride = width; else - stride = (width & 3) + 1; + stride = (width & ~3) + 4; bitinfo = kCGImageAlphaNone; bitsPerComponent = 8; } else if (format == CAIRO_FORMAT_A1) { From eefcfbf5a168569518a8dcf099b5f41b570f504b Mon Sep 17 00:00:00 2001 From: Vladimir Vukicevic Date: Thu, 18 Jan 2007 16:49:42 -0800 Subject: [PATCH 34/53] [nquartz] add test reference files for nquartz backend --- test/caps-joins-alpha-nquartz-ref.png | Bin 0 -> 2466 bytes test/clip-nesting-nquartz-ref.png | Bin 0 -> 1067 bytes test/clip-nesting-nquartz-rgb24-ref.png | Bin 0 -> 956 bytes test/clip-push-group-nquartz-ref.png | Bin 0 -> 203 bytes test/clip-twice-nquartz-ref.png | Bin 0 -> 1171 bytes test/clip-twice-nquartz-rgb24-ref.png | Bin 0 -> 1111 bytes test/dash-caps-joins-nquartz-ref.png | Bin 0 -> 4727 bytes test/degenerate-path-nquartz-rgb24-ref.png | Bin 0 -> 188 bytes test/fill-and-stroke-alpha-add-nquartz-ref.png | Bin 0 -> 603 bytes test/fill-and-stroke-alpha-nquartz-ref.png | Bin 0 -> 550 bytes test/fill-and-stroke-nquartz-ref.png | Bin 0 -> 286 bytes test/fill-and-stroke-nquartz-rgb24-ref.png | Bin 0 -> 264 bytes .../fill-degenerate-sort-order-nquartz-ref.png | Bin 0 -> 2470 bytes ...degenerate-sort-order-nquartz-rgb24-ref.png | Bin 0 -> 2098 bytes test/fill-rule-nquartz-ref.png | Bin 0 -> 2079 bytes test/fill-rule-nquartz-rgb24-ref.png | Bin 0 -> 1790 bytes test/new-sub-path-nquartz-ref.png | Bin 0 -> 386 bytes test/new-sub-path-nquartz-rgb24-ref.png | Bin 0 -> 357 bytes test/operator-clear-nquartz-ref.png | Bin 0 -> 1195 bytes test/operator-clear-nquartz-rgb24-ref.png | Bin 0 -> 1244 bytes test/random-intersections-nquartz-ref.png | Bin 0 -> 203877 bytes .../random-intersections-nquartz-rgb24-ref.png | Bin 0 -> 179204 bytes test/rel-path-nquartz-ref.png | Bin 0 -> 212 bytes test/rel-path-nquartz-rgb24-ref.png | Bin 0 -> 228 bytes test/source-clip-scale-nquartz-ref.png | Bin 0 -> 148 bytes test/trap-clip-nquartz-ref.png | Bin 0 -> 5814 bytes test/trap-clip-nquartz-rgb24-ref.png | Bin 0 -> 5385 bytes 27 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/caps-joins-alpha-nquartz-ref.png create mode 100644 test/clip-nesting-nquartz-ref.png create mode 100644 test/clip-nesting-nquartz-rgb24-ref.png create mode 100644 test/clip-push-group-nquartz-ref.png create mode 100644 test/clip-twice-nquartz-ref.png create mode 100644 test/clip-twice-nquartz-rgb24-ref.png create mode 100644 test/dash-caps-joins-nquartz-ref.png create mode 100644 test/degenerate-path-nquartz-rgb24-ref.png create mode 100644 test/fill-and-stroke-alpha-add-nquartz-ref.png create mode 100644 test/fill-and-stroke-alpha-nquartz-ref.png create mode 100644 test/fill-and-stroke-nquartz-ref.png create mode 100644 test/fill-and-stroke-nquartz-rgb24-ref.png create mode 100644 test/fill-degenerate-sort-order-nquartz-ref.png create mode 100644 test/fill-degenerate-sort-order-nquartz-rgb24-ref.png create mode 100644 test/fill-rule-nquartz-ref.png create mode 100644 test/fill-rule-nquartz-rgb24-ref.png create mode 100644 test/new-sub-path-nquartz-ref.png create mode 100644 test/new-sub-path-nquartz-rgb24-ref.png create mode 100644 test/operator-clear-nquartz-ref.png create mode 100644 test/operator-clear-nquartz-rgb24-ref.png create mode 100644 test/random-intersections-nquartz-ref.png create mode 100644 test/random-intersections-nquartz-rgb24-ref.png create mode 100644 test/rel-path-nquartz-ref.png create mode 100644 test/rel-path-nquartz-rgb24-ref.png create mode 100644 test/source-clip-scale-nquartz-ref.png create mode 100644 test/trap-clip-nquartz-ref.png create mode 100644 test/trap-clip-nquartz-rgb24-ref.png diff --git a/test/caps-joins-alpha-nquartz-ref.png b/test/caps-joins-alpha-nquartz-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..190c1e96ce29df274cc27c2ede35043eb7643a8e GIT binary patch literal 2466 zcmZ`*dpy(YA0OuwKjkD=5z_5foaItNNXq>>cgt2=k?S^8mR!b($SsP7Vw(<2*moGl zXsM3NugPXDvkd)?H@`l6{%FVUqdrMah}*Sp%Ddh& zms(>(l2E}Y64S!Ck4Iczh%O!+8F_gyy|>prQeCXxeOpoNGg|`!QObJhP z{CwWlvltZS6oJQU`|lO24`8$)KY*vauoKnLL#N7&E`*&f+3{g&$cyN3^!(Kn&wA>q zEWVtsn~H@l=WRtFBzvK*3jrv@QKLsj5Rs-$*~@8gEb!+l9yES_5Ojc(%rpU9M2F# z+o{yX8YvV84WA+EPrr+q44xh%48S!vqym5G5>C@v5|Q<6SEZil-TMu3TxC_By>QUx zs^fHvKRPIk>W{!_X~ra0`Gy7&RW4qAhI(01@-@kmufUlrKjP87^>8 z3He)JM77t$yx0v;|YGDbeOUef#H4C?XfeES+{ zK19^yj>krznIab=EiasL84=*oOm__pjp?C3kGWwZP58^9i?D^Fu8ig= zjWPsNq$T@5)5=@MZ3--6EqsL<$(JpRIk17cxcbktmx5JnoWP-~3%Q| zYBb{35-mvszqT_C3bK4)oLWn3m_~ji+7_?VfC-4HET2au`&|r1&ypIV_xAoSami0W z+a|YFU__}YW;qD+8h=0LeLs6|ERfG3(}V2?1=~BH6B<@uIH6f4+cc&wsA7RiRz(mHL)Y^r>ek505SQjM=W_bI4^uax@6+I zA-S$a^J;Foup5Wa1UuI^!4q45W)z0z z1Ma^%*EO+WZgLp?UH(u~iwLgo|M%vM2=2k6r|J+E`H^u`0M7U&FT$MNj*N#Wb@g)b z73{njabvTfcH#AsdQo!Kxf7l*mf3?7WU$UkflBG%6+;#s4iwAJn#bJ*w!t#R1u8ar z@4mV@tQ8*xhmN%z#=EITq9KH!si0B+(x>2Y=+oauuNk#&4_+Cobsfs)8@1B1jSUhw zeN?K@m_0ZkbM7i44Ucmf!U96$Tw!4DQ3HnQ2digA1Y-_^QRnlD{q~CbW%jidN?vv< zpiF@=u;^3-=JX^Am3Z4+1e4PK)+MbPheg^h=wFn!MK)6$6II;uPZw9n=lB?K!V z=1k4Zs(2T*rdPef(ZqA+uU%`Yst}RM&RKJf9NM2Qik-uP_>VUo{1o+OHWpeZa?nu# z&m_GJVgy<;%BWmm?cF7`*(f3fr zV0C4|wR$EVhXtekBzFd#1rZ;8I5YoQ$WHtbPFS{FMEHY7p zA!_=w^nUw+lmq>do#0o3MVWN;3L=<+N>|WvG8w&wCM>fph$xjtpkJ1(-lUaWy1tMPZ*B4$0C0TG=8ktk?b1Pmw7tJlSm5YLwZBuvA(WEZTJn9B$-=D=-Qb zSWRcW>Y5&+PHwAfIy(uB@rDImf!|#!Yc6yQMQCPzd!nCVO8u_6fN~AY|JJ4E34v-S zrV}hP`bJ@~BIpYFLC7d{G(%|i?C}A84}W<9aDVRa@bfwa>E6Yu`A$Ycj+vf-dt2i! zFt&mHw81J)Q#PnOM zGN`?KnJs3TTQHwaR4(IQRl^^hbE<*bTD};BQ;XGBxhV(op7aqKD8{lD%8tmq1EN{W7ssZ@>{Fnlro?+i&yl@#U_S zA2;TP_*Rx#MP~7RYN-dC+g#ho$(*hk47aPZ9ZH#;A?#TbRg&ooVjB1LkQ}~wgIFt_ z+`kndHIA>{8tH2(LIxO0C$$WN(0JyAMf}!RAy5j$JmJtT-^9&UgpPHj4Yl9Ic*!5o zK+Kd7SY)o+Zl0{>wLkM^+wKDrQxl_?<@Cw=vVuFm7+`+=%CrRR9{Ws>|IV|Ocx>$= z&Vl!)3Xn+V^4Fys!FQA#tc(IyAHbVcgVi<&0sV4{}_BuewBn%@~E0pm$g_RXM3m}&E`tVe*sKX@_7IN literal 0 HcmV?d00001 diff --git a/test/clip-nesting-nquartz-ref.png b/test/clip-nesting-nquartz-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..5a3db7b3aa4cd2e471f21f4a2b6b5ec3c8b58d66 GIT binary patch literal 1067 zcmV+`1l0S9P)GV0|9^|02j(Vm_j=c0GI$W(Qd*Dnhpsu=aV5iB*cC4jFmtD z_Xz-7fdK9kGY$zc;gg{|BxKM&u^0$2V4qkG1Q@7KEC&Jr7qgk1XgAR&)&m)xp5pra zTs~+w(iYYO!Qmm^9UtSTb{}nFJ`eyHkMVInmrLzFOd(`|xX+3-m8Uj+!k;&ePOK0B zc>f;B5PZ^^K!9QRq*H+a?vpkAb80zmUfryAKm-3h4lji0v#=vE7atHTGd73|B@_ka3x<27eno*}0r3UkT zQkA+s;Z2%RXWuI}xb2fV)bR;t$_=q~4LBskeG*N(N6f}24668qQ+Y$h-EO79jZYX< z@d>B$hC2J+NQ0SASoO;KgjIJ%Y+Yjx32~nkqIJY97P92ljr+YYvu0K|4#O)XiQ(-j&iO~n6qYe$yjQzj!$+x2;1@rbJnab8EXwz z^-00w;)#WMJLQm&!TUt(h$*6qPxk!EW$hD-^S;1pgJpfP?`KCVpIDuDjpYW*_#`3_ z0c4^zZ)Y76(u_}Z=tUsYY4UJ$gR{p+uvVV^_pE3w;WEVdB=VF+Cw2zK*E7YvuBa@F zg)GNo9PX|gw;lE&)8*GQ)uI8Pv`X&+X}~8o(K@GAWtUIfA-f7UAFt} z(OSZFd40dj`Y9_K^9>dd`osfitHC|2?sr)aq}L7!>55O@YB$gp(`oW>a3E&@e!%d( zs$O6A<|7jTThGw9zU7y_ZIN67_^#c>E(W+lfak}wzmUB_JO3NLLfRxr0i1#Kz7-|| z4Fq8S|AfVW0|6}hWS|ZS$@hsnL=9U$@jw7r@`(qs#)ePaAurhY#2sP+eV=$BTiEf5 l<2a7vIF92uj^jAm{0Cr}NMac6&Wr#6002ovPDHLkV1h6W^5p;k literal 0 HcmV?d00001 diff --git a/test/clip-nesting-nquartz-rgb24-ref.png b/test/clip-nesting-nquartz-rgb24-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..b55d116b47e508ef9c3dfe94f3c344a95c23e309 GIT binary patch literal 956 zcmV;t14I0YP)}*dFc5{G(|Crh%G?0G zj-gULQ|COYTu7;NkQAz^BB@il6vt_d6jTtI5+HCv>=NXDqrzj47H^)xZ^Rz~ilQir zq9}@@l*3c_&(>P{=%+8hf&6wdX_-TXWG$-&*1(B8fkwWvK9T1}Pyye8D(4ccWGxGT z0d|>};3Icg0BWGlzX}Igo#lRHl~z9dT z7F+mnS?BZn=<=FvS=Np(uY6^RImED_ve`nM35h$?Cmy6&Rc-ue8i! z&iYDwTdDF&-qMGmhoOTkujI^PWmP~!D~l|zdPyhq4F9pvshW^$!idUgd zK%~4fWELyyA}<1w^2(4|tSof$qRotvSDwsbWdW$kV;{;ZTV}Dca5(%*m|QQbtg2cy z%^P*{888bf3xF}3^ZA`L*#eF4Vp-PAVr2oS>lf1G?zLZ5Ss=;l>a?j|R#^mjU6pl5 zUJRMV%EEAYeY}9tmlscFv9d5wUN=|AKFEtLvshUeBCmVbsq1Bx6)&%QW&M{IXJ)ao z5G^my9ixl9m@|u&g*bWnZm)In;?FEr79!;3FUzK!qCd=>_4fUP;XbNrbv*ty=Gi|v z@b1=H`qy2GdF05^wy)dmwry$uC%G>M<=fH^3CJsW7^Xxn&{+vXNBm=OUnw;J8hIIYtqhglp(K)?5qwaFFg#S=;WnkMbXJi z%ZkOA&E1Dom;MRfPwl&Dh{b+__j3Tg@vmCw&H_*Y$GcBF=+3&O1-3xTxn#Lz0XUJr z9z>()vcN2_a-HSq%S)XVfKOgCC<|=znnzjSk=G2I<+#X8ofSiNdCjRT@PG1B6h%=K eMNt%Gy8HzV&a(^|toGsn0000f4u_bxCyDyxmw5WR zvR`Ku61HG_!fa9k6w38%TMV9I|VDvuYdbbYc~*Wk2m) z68ItE;WX(RPvzM1iH7DrY`R>v%kQx)B1`~QDri7<0Ndv0?VJJ4bVPgg&ebxsLQ0Jf+}TmS$7 literal 0 HcmV?d00001 diff --git a/test/clip-twice-nquartz-ref.png b/test/clip-twice-nquartz-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..f8231b31abf12bc13e3dbd0f8be75ad4bb55f98b GIT binary patch literal 1171 zcmV;E1Z?|>P)EI!;9520P`Ar1Hs0eMIudN0GX+ep^?b9YbqgYN@cq`U9^?tAy1?tXWm(P%UpjYgx< zX!asTf91=^!59N)9`bht>z)SV6gama|7U;V>ze`Jy$$BqV0`qU%_X8MIC9x23Uh|=n^mm#5@Xl7}2Za9khXO;opm3J&Gb)h}3|qM<8|s zjNykXP8po(sM_E}pAfRdtZ^!b5NG$)=mZ{|a z&&U42`>(EpL}HU-afVE03Db0Z%i6Xz(x<70{ZD_wEvrdpS;My$kVVIKX zbdySDnt1%NPz$Zr0J+>G^?KMz=FGzR386*^If9*(kArbJOv$OK2G_6uz~JB$;Z_C) z+MGN0I}abe#{B$SA!-;$VWJKnaN4@m>^xAB+-+3aE@Q@7DyVKUO!9E0!ahB9bZ{FK&>_+C+kD4HWH91k(&h) zLsdQv=Ffg55{XUj-nAmz542hXq*7Lh1d08==zc(EJA5jr#OmsPa=FP!9tGPr$mJ$O zW`}}f>qcffd@D?;dVQEeA){o1Z5tE{8Ii0|sMwxm&!@yBUxMu~anI@ksn>@|r7Wt| z6QO2<`?fzpDrE_Dp0;~I1vzu=zIvaYTbn)N77h9R9(cbdC*s6`gutz_6?njC51~;{OGPdUiwQ?-MswQ la3>4)d#wNf002ovPDHLkV1nXcFzx^V literal 0 HcmV?d00001 diff --git a/test/clip-twice-nquartz-rgb24-ref.png b/test/clip-twice-nquartz-rgb24-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..65cd80fa76b6484a9da8a076a32bc5ef68640e80 GIT binary patch literal 1111 zcmV-d1gQIoP)00006VoOIv0RI60 z0RN!9r;`8x00(qQO+^RS0TL5A5q`^n@&Et>`AI}URA__TV0+y(olKSz+Ch2J|X>Einxy zO(X7tZIhs-EJ?R+DvCPkA!_5yyxH%~Bt`1{ZnN+E|K8hq?;8jR2nYxW2ncv}*|S4- zqHqEX_){R<1wHTx?)i6Y__ojigYeF?$0}TfszSIM`l0*T<04GM9Y5~oJhZ@Ow8 zHt`V{hgN+>clJUOZb4m3O*ery_cw*46-OwaC)a;d1$Cv6x(5KG@7a6b9itVNCK(+yP&@&sZ$B zp3hIE({rKFrlWvq8l_TCE;qcga=_J>3111{5Ap;~!P_pw0|N_%!bBwUu&JR&Bb?2S zUb*tFtJETVBMD2miKFnb%kb&b<;lql`}T=mM&a<2k&z$k_12l0PPNpVupl{W2opE~ z3DwxZz{2F@1=X@~#4zaVyE#7}tyJ38Qh&fNO-%{^g??2H#A54(!h}}zPaTIg3x$bT zY~6#?7wpK~-Bz8?^7$#rx_2ZJd6>^nDF&->TVh219=K}%DIQ--r{}~L97w0<;_)@1 zJ4fURRPB?H$;^6KJTJHpZDumF5?@LSI_|7hNu??}>drVBk(M9L1gwQgB<|{{J7Y7V zQGPTNz*3v7lY&odMl{NgegZEYx(W1ef2h?W{v)s%>35b>pp`(k87CtelORvPp)kc_(lmWFW=zv47LyWRD&z?`RAqVjV5!t2w%|ai z)T6lKNGCyRedIv8w_n;HrPz}$_bk5I5 zPoDfK9DdT&R-+Lf8TqtX^owv!5}CX&bO%0kxkFbf?UydSf9TL($BzB3nhMi2E?<6c zXy~)+*WH(g3Fkp{PSIMspFnR@A>VBk;M#7qRe%=wLed)Y$10qWH>Y?^qyt<#5p3?zC+uEjDANhWU?|pvc+bN>ZD?ENd7xeD_-*G@dKtMo1 dK*0Z>e*hXJ9p_$YkW2so002ovPDHLkV1ho(4}<^! literal 0 HcmV?d00001 diff --git a/test/dash-caps-joins-nquartz-ref.png b/test/dash-caps-joins-nquartz-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..5e4aa76cfd02c027942b6a4c7e393c43d8be88ce GIT binary patch literal 4727 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 literal 0 HcmV?d00001 diff --git a/test/fill-and-stroke-alpha-nquartz-ref.png b/test/fill-and-stroke-alpha-nquartz-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..0121479056e7a0b35461f3399d6178aa186bc02b GIT binary patch literal 550 zcmV+>0@?kEP)Ll(B2uKp4e;_MH()Ks6a+ zVyAHn&06qU3Oz*Wo_5R-l7Awr*8CGTCGFV3YgNSk2MrmtB;YE=E(DBSiV;?X+`+LE zRo51yH{E^j@gCpt-B;3D&oIDsT~oPmT>>;aot*Hn*E1S4I~~HKqfBi&EioQHXEJG$ zB#-9C@+TV`A=7CI%ewEWY;;`#!(oMPx4~%CB91pnQ$d;v;&_wMs71HiU^uK~J6yoU zU7j^MXa10%cUH#pYDAHs&JP@XcDV-Nnq7PxCKG|@)!5%3U|DH4a8(3>O%w?l40uT! z$?cMR#wAbqMvqtYqdGxg(`t>2J!u%O0pQ?g!WNL+;^1er(skYCfINIgrBu#9q0n0M zJ`C?n4oFkU3(k0B&;xwdXJ~dPmlMv%I0 z+`MMMHXk_1X{7wh*47takZVEzRRpO3FHib<>>#3 orv|NM&8Su{s8%lw+}q6kH=QZ2bLT7m$^ZZW07*qoM6N<$f(%yjLjV8( literal 0 HcmV?d00001 diff --git a/test/fill-and-stroke-nquartz-ref.png b/test/fill-and-stroke-nquartz-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..4c48d24260275a551e7715dc6328bf8dd3531002 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^GC<77!3HF4glkxU6kC$Fy9>jA5L~c#`DCC7dx@v7 zEBkduAz@JkF_qV8K%oPkE{-7Tup6*z zDoU8Dvc%3j&uF3`c_(o4!M)QCBz?G9XOPp#dSKq$6%W$Z?=boQ^5Tu&qpK_HGsT+! h%L&Z*wYApx+$6=F96Hv)Gl70#@O1TaS?83{1OQcqZAJh9 literal 0 HcmV?d00001 diff --git a/test/fill-and-stroke-nquartz-rgb24-ref.png b/test/fill-and-stroke-nquartz-rgb24-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..5972d560433a53eac66df8c4cf046ff50f6229f6 GIT binary patch literal 264 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 literal 0 HcmV?d00001 diff --git a/test/fill-degenerate-sort-order-nquartz-rgb24-ref.png b/test/fill-degenerate-sort-order-nquartz-rgb24-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..59e1cb6c865ac22b20069fb838a6dffadc256f5d GIT binary patch literal 2098 zcmZWqdpy(KAK!*eb7zmjrn$$H2|rEqBacX~Pf;FwS7+G9X0N)>z65DdbT=;-lnAblQNpuMgx!NQPu-k< zJAArw2?)+Ras<=gZ8_-XrVl(&tzb^u&YK_@LXMl2f}<*b+D3i{BcTM zUX`J|r@UF#j?BC>?s-lu^}Y>X<8#+{OAFY!gNoLtHio8taPD`ttW|E`?yzUAvE?i6 zRoqDX!g0Kfrp$`iM)LS%0$eRZ<_khc97c7sJ5d_6&)E+y_d%nhV5d|LouJfIs)&_E zlU3)bTQ6w^@w>H-%>`6#6Z$TOT2Y>ilC7!Qqr``#YrKU=`LhPd3cU)~JAc5oW-Lq? z&HiSN3y%V{_}|7r)AX9fzduzaem;DPk_^P5r)3h3Xzi+GuG|^HR&}!&KV^-ZqC5b5 zhVSq>pfJUEJauvMA}y(!^|l8==C(7Y$R#BNiZDJ0tlN9Y^&PCElP-<15_^Bb-A997w!WDNiDf@2LEqW)2#IxLKL z0F#8nM4JZM|CYvJ83Mc7G!nj;>3iLUG}23Y^5bhQi~w6&EWcE>dW9)zu*TWWL;#4> zmxEeUu^WpAN=56bzOZH9;O>#TQro13Ap`*#FozlKCrnu#15C=ymgTK{;TlY0)d%`m$p41;@IK9 zYnzj%OSD94MmoLnD&wl!DwGKs&k&-E2_9!c11zH?K4-FDZY|-`v1Hs^^%o?vUv@4q zt7YwE!J!%8fAWjZ4e z6u8jk?y_ETl=Y?JdyL{pD1d>9f6VY#m|n*QQVRp!JH+O{;&rj+Z(8;fZmjSbi;dOl zGZm>Y2jmmaBZ*tHm6|OSc*s$;6hM1%9`$$k96#bcYksV zB^BlGX>HrHPL~`}QtN~QFkjq~r?IM?t2b5iy%u&hRYftm8S1Xt&F^!4jLIK7=`S@(`Agk2_`d z`WF8hkLTAJJUSK~UQmCZGbVezj9CWe--n`{xGeoz-D$5*#x-$xHmss?_c!M3CI0h8 z?aQM923yBOivjIb2}^f}>I`INkL>Z>fD`9c1SogXTYuLW=mm;QRRkLEm#>>aeDnG4 zpXBK9nVVaUT2RTbA}M%+l`QM;B4z|Q7Hm)=l!>(dlu^oTY2cN=4Cl7i4-2$nNq#NL zQ4m3L=`=|etJ}xM|4D4~P0e=&kCe`kK%R0ugi(R%m*o5f@ettasOh9@h3t($+9ew9 zuKhN0?m|)TH90Jz_MGU32Yd+mT^vS-|1eLj&+5=~@&-!A*ObzCSLFuD7(Z;wP^3^H zq~NC92ooHNii=BVO4c~McbEA)?$J;)9Lj%SS+4&1`u%+twJ?>HtM+4bY#y*#C5B!? zLCcI4n~4H9DT%ymEbKfQDw%A`VJJdmkpA4Z5}E&Cvra@D9%5d3n-6+Nuui4pvRw{T zWoo#mxVM@K-9BulMwIxUUJ!U=5S2Nx8P3OGZY{z>uEv1zg8u&#{94WosoU-uUrhHm!R zWyo#v_ko^^uMHA(%I{%T07KesoX8_R8x+)FOm|v@tj!uFmeT;yvo6}Oq9tcsc`@$; zH^D6yN(!Wj36cnJxUteG%~?3N)~PkbNO___1^{-kx$B=7l&b zqj@mWlE2LVcf0F?tR_Ms{oB5c$ybgiyA5r>q%|TPFy?*6awoKHNlpXl)qJ(-l%ctX zvbwj16*Tmn5zKT^XBRIPX1ixnzh}QRT;x}MO0d5tS3~5P0S2ganjSxoF3DjQTCxRh z5~v3zJsU!%!9Uxa$=`zr zB#UU-%zHzIVa9O_2SI^_j0tpNAY<^}6{@3a5Djg8sf{rO2W9OqDQqp5edaJ7dB>z- z{??!;f%b_v5;&dSYhryhLfv_!_^br2)?XUoFnVY$ZJonY@PEB7lf|zyW($nwP<6YU z2IeV{QM%5HdC7lL*a@m&39GD literal 0 HcmV?d00001 diff --git a/test/fill-rule-nquartz-ref.png b/test/fill-rule-nquartz-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..f7e616c9f60d3490ca291b3ef5c8991633a4a955 GIT binary patch literal 2079 zcmV+)2;ldLP)5YAUaS= zBtTRM2?-jo(m*01D4~KtgHj_P{{aH(hz8^eS*a-LFqLT#G$bIAGPuG(5fK!NFU8K; zdwaWkvpa8g-|W4g^kjq2@18%;dG_XgGYc3-Y7jU`;Gp)LM!GCCcgkn^ac011Tk_N3FA8$&sKaMLX4cokRh-@ z;3EOL_{e5&d^*W#%mD-zbAx6ai`sG;>GK@`5V%C(pOOJW08dN4?`hd%U5-m0IggHj zQ9b}1ot4v=69^n8@Va6^_{3`hhdpy1D0%(^J~@p!fxu1zODzWC5`mqbIV%^q3B2{m zY0MFIQ*7HQG?(*U&13G_v}{b_rr7nGfw5Bn5m)!Ma@tU$xPGb%r@TlaSZSkG)qrjZMyJ(%$7&y#2 zBwF}PNTF|ass)?P`7#3Booeuzx zjetL@zR`W{n0u@bF>)G)Vay=}4iPxicO5B{iiW=C+CDk&!f20aC;@@z1fKU@N6MIn z0ub0o;G2tmebzTH!3g< zg&=UIM8t8N>ASuZNKr$r({$ZbV$+NtreP=qMg-p1ysFzL#<)G`=DrV5*8GEBozSna#>jk)*d4Mjr@ ze;I#3*fq;8mt&q8goYXhqr?<3@6(KF7z$_m?tEiz{duOL5cKoi`Gz`wUKb2W!}0Cf zt`hhn_(ORGfK|btWwq=2on}{i)^M?S>$|pr@_RaVrr{<8ju3d)LounwI|4@(Xeed_ zV>A0%6b?ZJ7!7o~SJSMPPfrf9S24b#$A7gG*4fDl}2>eQ5L%}ayTWmOOYA^IV z)bO_GNX%-#twFU=8zy?IrL`!9eIco)Orq zOv5NkF_c>>64NkW+yb-PX7oKE`igrDyh&0d4etm2V(aU@uT8^Zf#(T)QZP8Wicb{o zN(gHh?T8ZAAC1zhhWR4*6L_Uypu~<>1okV|FsiYE;l_)o8s-b#!O4654K0=k>`<=Z za?JW%jmw%fEEao(J#-u*#uoxtIukHV!wVhMb|D1~^92v3Yg63`(5GQ1+XUEr8$)jz z=8I0fYcsnOpi9Hf4vFXF;q~zyT>kkD`tKlZp-?a(v1VpAr!_JQ*Vfk?>>NVViS;yh7f`M0zyOit%M5IE) zTRqfqD^(3Apq{QxyiP!53L18PgdMj$j>&4c3H$Hb#P0+|#%UORp}Xe!m%Gp~`tHCH z@E3X%62P*nAz57gs{}50{oL+3S5wz;6E-_DP&x*224POa2kfBL#;j%eU`QIaIWtf? zRGmTCh7t{5#+)|YWx>m?HSA&&f73GqrBQVTVM~e{9s%%z5q>V0^93ebdqdC=OxZqtE4~)-=>`gTVC$xv#UCxg|*rrL60cq2dg} zCIo0$Yw2Qp+h1}T0)XVE9?4L7pXDk7H7qr|GTaayO~aT=I~x0#8f&T}q~86=x;8(L z|HFO0im)}xXc|UY|6`W-Z^$f^{_8$UbRE_Jd_MvxkSi*}8vf=!{vwbo84UqI@`#Lg zZd#GtYm>w|j;5gylsPlB%=U@gWY}JtB<{0p z8VbO$11G)qRWN+7jjH=B7cmWm;IvKMHyZ7$VAx)p&h7h6Fb#!ZJMZEhwrKV)!!o;9fS=b45A(9d_*$thLzJKam2KhHE2g0p>hot{!fzm9_{f1YV51nYfw zy_{0T*&PQ}{yfuA09O0%HVE8MP~Q!fcO2CC^Grh_Snj)1bxIYhI}R#5j;5gyoW50q z%2TRX-f@U_3yUV0h5~T literal 0 HcmV?d00001 diff --git a/test/fill-rule-nquartz-rgb24-ref.png b/test/fill-rule-nquartz-rgb24-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..8b180c53450d36b9d9d5bf049c9230d928ba880a GIT binary patch literal 1790 zcmVn|r@G1%h{GKHSG)=6uh2KvouT8cv5>o@G&O@t3av@JaXRhRd`3X$4lo zEzk0#6Yv9mz=;scv+U|O!PhQB8`^ML>(GYFv+PQ=(^pC#D9LbnmM67g3x2{+*y?-d zW_x*-KTRL(QzxeVF3)nJ>+r32V`SnRT(4h#r}q?h>X&DE)g-)E+2;2!DO`T4_xPuT z%d@;{6qe<-c^O89%PUJIpM=Y^d`q0k`=;E^@};UTE#-_InKDfBgVwVMBO0!{u37Sp%yHmR zN)VZoun+riGW3;rQ*h)k*?SgR(1O_@rw^e7kpbQuRL$Omz7lUr5Se4}{Q&zr91DFt z9uxy|fb2a3!v`M^!;Jqc@U9q;1MKvi@SlxTg2)WRPOs;^)Af39q!L61xK!2Pa4Gav zIaMUczO#2_;%as_OAwhBe64zce}z`)YjdOokpa%tcc`5UeQk~u53<+nEl62S&1MNA z1AMH1f&Ux&+8ilCWG3pFJJCG5Ix1v;*}HGDYF;)=5E)>#-wV8X-fe=&g*z+8ZkSyi z8?vYDJuC6}*f8%lL1gH1XT{MZ?>0f?9(Pt8jj^jEMD~%rXQZv0#@N*nBKz2BrDus| zJa{CCT;a}&qXFJ+g2+(g&WdBu?dmv@oo8>2)HLYXEJ5U2cUBw&?cFAb3_^ES9D{3D zM~!?7c6G0BuwoZ(IYwU4-Gv3m$c4_p=g`~WIzGc0_sH5tWM7NZ9J$bOcoljx+{G(6 z?jHH0?lyNMXj`y_T&M*PU@!Ep*o{4SP=CK;7kSZarx(2-A8HELLvN3*ScfTzZ?P?8 z!@DZ&yEzTyLSyhY^d_0dTNv|*Z2qLA_k^a6T&N98p|{E;mbCt&gbDH!)o*c?p7=#R z)EsPw-ZRzMHY+)4BU`CxYE)9qkqeE(TIkJ_k2M$%fo#jAP<2OaAr~5vemnoLu?!=D zkY89jFYqD|@}X`D8dfh2kuwRab&MBHQf{lIcuxid-nRQktj| z6haCkorn*) zkn2*K%}S6Zjax04l=Z?Y@{p|qZNcyGm#xE<^f$bAc5ppy!5{D^tT{ONJp2d$I5@He z^&J;Bi8x1%JIGJ1mLx~uX~f7<9-+zDd#RN;4dEGgN}epg0J+2lq>f zs0H^GyVAnGGj@W=YQx>)HmE7ZuC!2Z2A&`?sJvl=OdFI^SDK@qp1w*D8Ke#Ahtfs= zA$TZv%uwEKg2+;aw4RYyHt)(2#Jf!p86*s86LY@Xkgp5>-fe=&(9e*5X54Ty0?&k} z@bBFwh%9nv?alxSrX4+dw+SLcy*uk-22fB}^6A|shzvFEth*V&y1J52?>0f?3U_u7 z?zunjy;5Dtn|GTaGL+m|pEH0{rMi+I?>0eX=yhlP&j22&EBWzm6GZNDXXPtFcGX>1 z^5ESjhztkrta%r^xqj7^Tzj_(A_FYin@llRr>^AMyKM%t^55aufb;N0{Y)e;) zv$*&M4uw90gKNP@5QjdGo0HF=66oRsbZ~IA3NCUS@`16%aFwe`+w+5OxjDJX{d&`; zU}k1!W@eT~L(m1N0=-66F*f{*3#zV7pd--yb4@EXuQPcs+LH!q06GL6gZ6%LehGSv z_1uHTpdxA-bRvzx{4ms-(Flk$(YQetm4U3pxWmMP`yP z-y*U_OQwj-BJCcNbk#rror4Zqj_=o*q`B6ifqk|Xk8q!D-H%9aTl*T5QztLdo95sD g%9)v&nVDJB2X479<#Ks>&Hw-a07*qoM6N<$f)DGfb^rhX literal 0 HcmV?d00001 diff --git a/test/new-sub-path-nquartz-rgb24-ref.png b/test/new-sub-path-nquartz-rgb24-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..efc907e83c6e3882288bbc5e9e306fc46e523597 GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^0YEIr!2~2t6#1S3DYhhUcNd2LAh=-f^2tCE_7YED zSN7|SLL#!_$^4g|FfcH(d%8G=M6|xWX6VK2D8g_dU0G9X(y?==qApc1cRQR*NR&Py z*yMUHIsK`m2@6n%W>AC_vzbvCxAw8#oU&Nv|AtrR&z<>y=FPi`Edov)if=Ba9-5;Y z{mkcuoJFS6)k(2;f35lSr7PF<|Afl_%O3Dek171N`+4;m&odH}CK{%=CHbx|(()Cr zIm`UMRd-hLVb7NIVC#Iqo+=8x8lUNuTFX7cum*49CJ{jc%ydRxg8}5vst$< zI;(uQYw@29*+(7q-cwCWKmIr`wKJ*>5R22WQ%mvv4FO#sI> Bl#l=b literal 0 HcmV?d00001 diff --git a/test/operator-clear-nquartz-ref.png b/test/operator-clear-nquartz-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..d79d4c3f47085a0847eaea5f5d2f8d0b90447d11 GIT binary patch literal 1195 zcmV;c1XTNpP)MMJ?q@FU+3HmfVc5*LuYewE?Rhz@EYN1!dQdfIN<|A=)ZDvdXCQ$ zwl~B2pnGbBW#aUlwh`90!)E=r5KdPJ%f#t9Z0-&t#!5KQgXZO=!+mTxU=eTtCvhe> zCta0)4+ot6&54S(d2>=>XNO~j0#jm7Q_I3hg-sI{Q=IEayd6s_gk|9*!iqD5CEZwI z4BHJ(V>Zrs|JP!sy|-ZuPhqXW(aOddAMjV4D|;LU!C@`7;+A?*c{mlqD0{q&unJ4X zm+w@0O|*-eKc_|*Wvmc$T@Y7WM?v%FGzja1&eL*n7OdXdD%h&;qg1d%bLuMCHmiZ= zL2+s)l4~6{CO#+d1rCcD`yR1=Ppu2*B)-HUtij!4!kx7=#-_v^ zb5$vL9CzXgF(&roecX%_YjF`}GIv$#R6= z!K-*OxxXBr&Ka>L&Jl5U^fGoP_gCPP6f#%XjOyV1Oe|0CH5fzB>91g$IG-e`k(STRYFc;Q35=UH^mqo!$%`> zrtw0;d9O~`V*SbRdY-iW_1ULpK7B4=gEnV@(n<)jtt1;Sa?u`z|8@L#(LlSS@r?JVM%9!luORKdC=mbP=~vFVnBa zwIye!MOY)0-kDd27j`S>Toq@bg1uratuAiDHu2TdrSkj=yUM?k>LLp#5jHDuJ$B%} z8t6W}MX{&!5Be=ekMr?FW(-~~t16Sd3!f|}lENpbn zs1+>nY+`4#u+cdS73>vbEwxYh+Cb%5OjP)V<~nM4PFsS#Bw4+SwF$c&6eefq$f!udL3ulyb{x-iXoKb|e1#%Y7DF3o)dvF%ciByRUBdyN19002ov JPDHLkV1g^cE?)ou literal 0 HcmV?d00001 diff --git a/test/operator-clear-nquartz-rgb24-ref.png b/test/operator-clear-nquartz-rgb24-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..d47ce752019c314aa58c6a33e7a204c9d6d1799d GIT binary patch literal 1244 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

h;{N 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

bcuZH@);_u^b^^fmK)jn3l-7aDfXNfLjU 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 literal 0 HcmV?d00001 diff --git a/test/random-intersections-nquartz-rgb24-ref.png b/test/random-intersections-nquartz-rgb24-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..77f73cd53342cefa18594703124429f367d0a781 GIT binary patch literal 179204 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

Uqemqedr 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 Ef-RRxGXMYp literal 0 HcmV?d00001 diff --git a/test/rel-path-nquartz-ref.png b/test/rel-path-nquartz-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..5878ce4d3b24499edbe4cbd63e673d3ad0a7374d GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4u_bxCyDyxmw5WR zvR`Ku5*8EsdhewwP^iq)#W6%;YU_DJJ_iSZ)`#LDLQ~yV76^QwV8P&CD8IdcvGo|E ziqO~f29vf%?s=A~9>2+Wl6b;HuXpE^<-KmLIc>iqO1!>cyWibJp@yq_nFPGERIc(f zmXw`f{Bj^CKTm*>`QaG{Z3X6I<_Y(`4}9UAvv*(PQ*>#kY(3ddf5I;Z|%6nB7EW!vWc3<|=pqJBS3j3^P6jA5L~c#`DCC7dx@v7 zEBkduAz?8VMy{9=ppcoTi(`mIZ*t0y^B?9nwl#E4YvW(Q%KubSLPXBMz~G-cpSDfI r3&mSZT1|o6Z1n=U|^W~TS$2OKGjt~6Bs;Q{an^LB{Ts5m>?<@ literal 0 HcmV?d00001 diff --git a/test/trap-clip-nquartz-ref.png b/test/trap-clip-nquartz-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..28f59778abff29f8ef3d45d69683624256ee6983 GIT binary patch literal 5814 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 Date: Fri, 19 Jan 2007 15:52:06 -0800 Subject: [PATCH 35/53] Add new scale-down-source-surface-paint test This new test case demonstrates a bug in the PDF backend, (source surface patterns are repeated even with a pattern extend of NONE). Thanks to Romuald and Claudio Saavedra for pointing out the bug. --- test/.gitignore | 1 + test/Makefile.am | 2 + test/scale-down-source-surface-paint-ref.png | Bin 0 -> 133 bytes test/scale-down-source-surface-paint.c | 72 +++++++++++++++++++ 4 files changed, 75 insertions(+) create mode 100644 test/scale-down-source-surface-paint-ref.png create mode 100644 test/scale-down-source-surface-paint.c diff --git a/test/.gitignore b/test/.gitignore index 75fa10c35..a984f82fb 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -107,6 +107,7 @@ pthread-show-text rectangle-rounding-error rectilinear-stroke rel-path +scale-down-source-surface-paint scale-source-surface-paint select-font-face select-font-no-show-text diff --git a/test/Makefile.am b/test/Makefile.am index f675a299b..4f432ada8 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -72,6 +72,7 @@ pixman-rotate \ random-intersections \ rectangle-rounding-error \ rectilinear-stroke \ +scale-down-source-surface-paint \ scale-source-surface-paint \ select-font-face \ select-font-no-show-text \ @@ -293,6 +294,7 @@ rectilinear-stroke-ref.png \ rel-path-ref.png \ rel-path-rgb24-ref.png \ romedalen.png \ +scale-down-source-surface-paint-ref.png \ scale-source-surface-paint-ref.png \ scale-source-surface-paint-rgb24-ref.png \ scale-source-surface-paint-pdf-argb32-ref.png \ diff --git a/test/scale-down-source-surface-paint-ref.png b/test/scale-down-source-surface-paint-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..5c969d2c5dabe5382ab739488d9741b9a814cf84 GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^Y#_`5A|IT2?*ZZ@dAqwX{0G4WdzViJim;b>`ns}T zXA~CK(`TJ?tqdrn?&;zf!Z9;BB_ZL*`36>lL}8bSKmPx>?+V+&qRb40lSGtH0u?5w Wva>Ti@|6H;VeoYIb6Mw<&;$U?OC;q0 literal 0 HcmV?d00001 diff --git a/test/scale-down-source-surface-paint.c b/test/scale-down-source-surface-paint.c new file mode 100644 index 000000000..f5effabfe --- /dev/null +++ b/test/scale-down-source-surface-paint.c @@ -0,0 +1,72 @@ +/* + * Copyright © 2005,2007 Red Hat, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software + * and its documentation for any purpose is hereby granted without + * fee, provided that the above copyright notice appear in all copies + * and that both that copyright notice and this permission notice + * appear in supporting documentation, and that the name of + * Red Hat, Inc. not be used in advertising or publicity pertaining to + * distribution of the software without specific, written prior + * permission. Red Hat, Inc. makes no representations about the + * suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL, + * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER + * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR + * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Author: Carl D. Worth + */ + +#include "cairo-test.h" + +static cairo_test_draw_function_t draw; + +cairo_test_t test = { + "scale-down-source-surface-paint", + "Test call sequence: cairo_scale; cairo_set_source_surface; cairo_paint, with a scale < 1.0", + 6, 6, + draw +}; + +static cairo_test_status_t +draw (cairo_t *cr, int width, int height) +{ + cairo_surface_t *surface; + static uint32_t data[16] = { + 0xffffffff, 0xffffffff, 0xffff0000, 0xffff0000, + 0xffffffff, 0xffffffff, 0xffff0000, 0xffff0000, + + 0xff00ff00, 0xff00ff00, 0xff0000ff, 0xff0000ff, + 0xff00ff00, 0xff00ff00, 0xff0000ff, 0xff0000ff + }; + + /* First paint opaque background (black) so we don't need separate + * ARGB32 and RGB24 reference images. */ + cairo_set_source_rgb (cr, 0, 0, 0); /* black */ + cairo_paint (cr); + + surface = cairo_image_surface_create_for_data ((unsigned char *) data, + CAIRO_FORMAT_RGB24, 4, 4, 16); + + cairo_scale (cr, 0.5, 0.5); + + cairo_set_source_surface (cr, surface, 4, 4); + cairo_pattern_set_filter (cairo_get_source (cr), CAIRO_FILTER_NEAREST); + cairo_paint (cr); + + cairo_surface_destroy (surface); + + return CAIRO_TEST_SUCCESS; +} + +int +main (void) +{ + return cairo_test (&test); +} From 8354906381b2ccc3211214bad55c1f505d3dce3a Mon Sep 17 00:00:00 2001 From: M Joonas Pihlaja Date: Sat, 16 Dec 2006 22:21:36 +0200 Subject: [PATCH 36/53] Make UTF-8 output from cairo-perf-diff-files optional This patch adds options to disable the UTF-8 change bars and replace them with ASCII '*' gfx. The motivation is that UTF-8 really does some damage to some terminals, and some always forget to pipe stuff through a pager to make it safe. The new options for cairo-perf-diff-files are: --no-utf --no-bars --- perf/cairo-perf-diff-files.c | 135 +++++++++++++++++++++++++---------- 1 file changed, 98 insertions(+), 37 deletions(-) diff --git a/perf/cairo-perf-diff-files.c b/perf/cairo-perf-diff-files.c index e6bb09585..d72cb8dfd 100644 --- a/perf/cairo-perf-diff-files.c +++ b/perf/cairo-perf-diff-files.c @@ -129,6 +129,14 @@ typedef enum { TEST_REPORT_STATUS_ERROR } test_report_status_t; +typedef struct _cairo_perf_diff_files_args { + char const *old_filename; + char const *new_filename; + double min_change; + int use_utf; + int print_change_bars; +} cairo_perf_diff_files_args_t; + /* Ad-hoc parsing, macros with a strong dependence on the calling * context, and plenty of other ugliness is here. But at least it's * not perl... */ @@ -429,46 +437,55 @@ cairo_perf_report_sort_and_compute_stats (cairo_perf_report_t *report) #define CHANGE_BAR_WIDTH 70 static void -print_change_bar (double change, double max_change) +print_change_bar (double change, double max_change, int use_utf) { int units_per_cell = (int) ceil (max_change / CHANGE_BAR_WIDTH); + static char const *ascii_boxes[8] = { + "****","***" ,"***", "**", + "**", "*", "*", "" + }; + static char const *utf_boxes[8] = { + "█", "▉", "▊", "▋", + "▌", "▍", "▎", "▏" + }; + char const **boxes = use_utf ? utf_boxes : ascii_boxes; /* For a 1.0x speedup we want a zero-size bar to show "no * change". */ change -= 1.0; while (change > units_per_cell) { - printf("█"); + printf(boxes[0]); change -= units_per_cell; } change /= units_per_cell; if (change > 7.5/8.0) - printf("█"); + printf(boxes[0]); else if (change > 6.5/8.0) - printf("▉"); + printf(boxes[1]); else if (change > 5.5/8.0) - printf("▊"); + printf(boxes[2]); else if (change > 4.5/8.0) - printf("▋"); + printf(boxes[3]); else if (change > 3.5/8.0) - printf("▌"); + printf(boxes[4]); else if (change > 2.5/8.0) - printf("▍"); + printf(boxes[5]); else if (change > 1.5/8.0) - printf("▎"); + printf(boxes[6]); else if (change > 0.5/8.0) - printf("▏"); + printf(boxes[7]); printf ("\n"); } #define MAX(a,b) ((a) > (b) ? (a) : (b)) static void -cairo_perf_report_diff (cairo_perf_report_t *old, - cairo_perf_report_t *new, - double min_change) +cairo_perf_report_diff (cairo_perf_report_t *old, + cairo_perf_report_t *new, + cairo_perf_diff_files_args_t const *args) { int i, i_old, i_new; test_report_t *o, *n; @@ -476,7 +493,7 @@ cairo_perf_report_diff (cairo_perf_report_t *old, test_diff_t *diff, *diffs; int num_diffs = 0; int printed_speedup = 0, printed_slowdown = 0; - double change, max_change; + double min_change = args->min_change, change, max_change; diffs = xmalloc (MAX (old->tests_count, new->tests_count) * sizeof (test_diff_t)); @@ -577,7 +594,8 @@ cairo_perf_report_diff (cairo_perf_report_t *old, else printf ("slowdown\n"); - print_change_bar (change, max_change); + if (args->print_change_bars) + print_change_bar (change, max_change, args->use_utf); } free (diffs); @@ -586,42 +604,85 @@ cairo_perf_report_diff (cairo_perf_report_t *old, static void usage (const char *argv0) { - fprintf (stderr, "Usage: %s file1 file2 [minimum_significant_change[%%]]\n", argv0); + char const *basename = strrchr(argv0, '/'); + basename = basename ? basename+1 : argv0; + fprintf (stderr, + "Usage: %s [--no-utf] [--no-bars] file1 file2 [minimum_significant_change[%%]]\n\n", + basename); fprintf (stderr, "Computes significant performance differences for cairo performance reports.\n" "Each file should be the output of the cairo-perf program (or \"make perf\").\n" "The third argument is used to supress all changes below some threshold.\n" "The default value of 5%% ignores any speeedup or slowdown of 5%% or less,\n" - "A value of 0 will cause all output to be reported.\n"); + "A value of 0 will cause all output to be reported.\n" + "\n" + "--no-utf Use ascii stars instead of utf-8 change bars.\n" + " Four stars are printed per factor of speedup.\n" + "--no-bars Don't display change bars at all.\n" + ); + exit(1); +} + +static void +parse_args(int argc, + char const **argv, + cairo_perf_diff_files_args_t *args) +{ +#define is_yesno_opt(opt) !(strcmp ("--no-" opt, argv[i]) && strcmp ("--" opt, argv[i])) + int i; + int have_minchange = 0; + + for (i=1; iuse_utf = 0 != strncmp ("--no-", argv[i], 4); + } + else if (is_yesno_opt("bars")) { + args->print_change_bars = 0 != strncmp ("--no-", argv[i], 4); + } + else if (!args->old_filename) { + args->old_filename = argv[i]; + } + else if (!args->new_filename) { + args->new_filename = argv[i]; + } + else if (!have_minchange) { + char *end = NULL; + args->min_change = strtod (argv[i], &end); + if (*end && *end) { + if (0 == strcmp (end, "%")) { + args->min_change /= 100; + } else { + usage (argv[0]); + } + } + } + else { + usage (argv[0]); + } + } + if ( !args->old_filename || !args->new_filename ) + usage (argv[0]); +#undef is_yesno_opt } int main (int argc, const char *argv[]) { - const char *old_filename, *new_filename; + cairo_perf_diff_files_args_t args = { + NULL, /* old filename */ + NULL, /* new filename */ + 0.05, /* min change */ + 1, /* use UTF-8? */ + 1, /* display change bars? */ + }; cairo_perf_report_t old, new; - double min_change; - char *end; - if (argc < 3) { - usage (argv[0]); - return 1; - } + parse_args (argc, argv, &args); - old_filename = argv[1]; - new_filename = argv[2]; + cairo_perf_report_load (&old, args.old_filename); + cairo_perf_report_load (&new, args.new_filename); - min_change = 0.05; - if (argc >= 4) { - min_change = strtod (argv[3], &end); - if (*end && *end == '%') - min_change = min_change / 100.0; - } - - cairo_perf_report_load (&old, old_filename); - cairo_perf_report_load (&new, new_filename); - - cairo_perf_report_diff (&old, &new, min_change); + cairo_perf_report_diff (&old, &new, &args); return 0; } From 2f6d184e6659e91909ed933d36bef441f1b5df4d Mon Sep 17 00:00:00 2001 From: Kalle Vahlman Date: Sat, 13 Jan 2007 12:36:03 +0200 Subject: [PATCH 37/53] Add --use-ms option to cairo-perf-diff-files This allows for comparing perf files generation on different hardware platforms, (since the ticks can be very different on different hardware). --- perf/cairo-perf-diff-files.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/perf/cairo-perf-diff-files.c b/perf/cairo-perf-diff-files.c index d72cb8dfd..8b6292a40 100644 --- a/perf/cairo-perf-diff-files.c +++ b/perf/cairo-perf-diff-files.c @@ -135,6 +135,7 @@ typedef struct _cairo_perf_diff_files_args { double min_change; int use_utf; int print_change_bars; + int use_ms; } cairo_perf_diff_files_args_t; /* Ad-hoc parsing, macros with a strong dependence on the calling @@ -533,7 +534,14 @@ cairo_perf_report_diff (cairo_perf_report_t *old, diffs[num_diffs].old = o; diffs[num_diffs].new = n; - diffs[num_diffs].speedup = (double) o->stats.min_ticks / n->stats.min_ticks; + if (args->use_ms) { + diffs[num_diffs].speedup = + (double) (o->stats.min_ticks / o->stats.ticks_per_ms) + / (n->stats.min_ticks / n->stats.ticks_per_ms); + } else { + diffs[num_diffs].speedup = + (double) o->stats.min_ticks / n->stats.min_ticks; + } num_diffs++; i_old++; @@ -619,6 +627,9 @@ usage (const char *argv0) "--no-utf Use ascii stars instead of utf-8 change bars.\n" " Four stars are printed per factor of speedup.\n" "--no-bars Don't display change bars at all.\n" + "--use-ms Use milliseconds to calculate differences.\n" + " (instead of ticks which are hardware dependant)\n" + ); exit(1); } @@ -639,6 +650,9 @@ parse_args(int argc, else if (is_yesno_opt("bars")) { args->print_change_bars = 0 != strncmp ("--no-", argv[i], 4); } + else if (strcmp(argv[i], "--use-ms") == 0) { + args->use_ms = 1; + } else if (!args->old_filename) { args->old_filename = argv[i]; } From 5f9d70a56158e468683dba953d6eaceea4dfd644 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Fri, 19 Jan 2007 23:11:09 -0800 Subject: [PATCH 38/53] PDF: Fix CAIRO_EXTEND_NONE for source surface patterns The former workaround for the lack of non-repeating patterns in PDF (as far as we can tell) was broken for a source pattern matrix that resulted in scaling the source surface pattern down. This was demonstrated by the failure of the scale-down-source-surface-paint test which now passes. The old code would have also allowed for bogus repeated pattern instances to appear if the source surface pattern was translated sufficiently far off the destination surface in just the right direction. This bug is also fixed. --- src/cairo-pdf-surface.c | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/src/cairo-pdf-surface.c b/src/cairo-pdf-surface.c index ec98345c9..9debdb6d4 100644 --- a/src/cairo-pdf-surface.c +++ b/src/cairo-pdf-surface.c @@ -890,16 +890,41 @@ emit_surface_pattern (cairo_pdf_surface_t *surface, _cairo_surface_get_extents (&surface->base, &surface_extents); - /* In PDF, (as far as I can tell), all patterns are repeating. So - * we support cairo's EXTEND_NONE semantics by setting the repeat - * step size to the larger of the image size and the extents of - * the destination surface. That way we guarantee the pattern will - * not repeat. - */ switch (extend) { case CAIRO_EXTEND_NONE: - xstep = MAX(image->width, surface_extents.width); - ystep = MAX(image->height, surface_extents.height); + { + /* In PDF, (as far as I can tell), all patterns are + * repeating. So we support cairo's EXTEND_NONE semantics + * by setting the repeat step size to a size large enough + * to guarantee that no more than a single occurence will + * be visible. + * + * First, map the pattern's extents through the inverse + * pattern matrix to compute the device-space bounds of + * the desired single occurrence. Then consider the bounds + * of (the union of this rectangle with the target surface + * extents). If the repeat size is larger than the + * diagonal of the bounds of the union, then it is + * guaranteed to never repeat visibly. + */ + double x1 = 0.0, y1 = 0.0; + double x2 = image->width, y2 = image->height; + cairo_matrix_t surface_to_device = pattern->base.matrix; + cairo_matrix_invert (&surface_to_device); + _cairo_matrix_transform_bounding_box (&surface_to_device, + &x1, &y1, &x2, &y2, + NULL); + /* Rather than computing precise bounds of the union, just + * add the surface extents unconditonally. We only + * required an answer that's large enough, we don't really + * care if it's not as tight as possible. */ + x1 = MAX (fabs(x1), fabs(x2)) + surface_extents.width; + y1 = MAX (fabs(y1), fabs(y2)) + surface_extents.height; + /* Similarly, don't bother computing the square root to + * determine the length of the final diagonal. */ + xstep = _cairo_lround (ceil (x1 * y1)); + ystep = _cairo_lround (ceil (x1 * y1)); + } break; case CAIRO_EXTEND_REPEAT: xstep = image->width; From 6c40575a225e3d6d138adae9d492881b8358f881 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Fri, 19 Jan 2007 23:23:32 -0800 Subject: [PATCH 39/53] Fix two misspellings in a recent comment. --- src/cairo-pdf-surface.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cairo-pdf-surface.c b/src/cairo-pdf-surface.c index 9debdb6d4..696a8d8f3 100644 --- a/src/cairo-pdf-surface.c +++ b/src/cairo-pdf-surface.c @@ -896,7 +896,7 @@ emit_surface_pattern (cairo_pdf_surface_t *surface, /* In PDF, (as far as I can tell), all patterns are * repeating. So we support cairo's EXTEND_NONE semantics * by setting the repeat step size to a size large enough - * to guarantee that no more than a single occurence will + * to guarantee that no more than a single occurrence will * be visible. * * First, map the pattern's extents through the inverse @@ -915,7 +915,7 @@ emit_surface_pattern (cairo_pdf_surface_t *surface, &x1, &y1, &x2, &y2, NULL); /* Rather than computing precise bounds of the union, just - * add the surface extents unconditonally. We only + * add the surface extents unconditionally. We only * required an answer that's large enough, we don't really * care if it's not as tight as possible. */ x1 = MAX (fabs(x1), fabs(x2)) + surface_extents.width; From b06222b99091796486cc0f938dd7487c66dd8420 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Sat, 20 Jan 2007 00:56:07 -0800 Subject: [PATCH 40/53] ROADMAP: Add 3 bugs to fix before the next snapshot --- ROADMAP | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ROADMAP b/ROADMAP index ba931f36a..06aa816a1 100644 --- a/ROADMAP +++ b/ROADMAP @@ -36,6 +36,13 @@ cairo-1.4 (January 2006): Better performance - New rasterization - Finer-grained fallbacks for PS/PDF +cairo 1.3.14 +============ + Bugs to fix: + "issue with rotated image sources" from Benjamin Otte on mailing list + "Problem with linear gradients and reflect mode post-rewrite" from T Rowley on list + 8801 text rendering lacking locking in multithreaded apps + cairo 1.3.6 =========== ✓ Bankers' rounding bug in _cairo_lround (https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=217819) From d6bb0d772018809caaa215d562292c8aeb2990d3 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Sat, 20 Jan 2007 01:47:06 -0800 Subject: [PATCH 41/53] .gitignore: Add text-glyph-range --- test/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/test/.gitignore b/test/.gitignore index a984f82fb..36ea1d0a8 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -125,6 +125,7 @@ text-antialias-gray text-antialias-none text-antialias-subpixel text-cache-crash +text-glyph-range text-pattern text-rotate text-zero-len From 87b3ac10af6b18d57236ae7e595e84e11e12eaad Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Sat, 20 Jan 2007 02:01:29 -0800 Subject: [PATCH 42/53] cairo-wideint: Fix to eliminate comparison of signed and unsigned values --- src/cairo-wideint.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cairo-wideint.c b/src/cairo-wideint.c index 1e64ae476..e8d3ab69a 100644 --- a/src/cairo-wideint.c +++ b/src/cairo-wideint.c @@ -781,7 +781,7 @@ _cairo_int_96by64_32x64_divrem (cairo_int128_t num, cairo_int64_t den) { int num_neg = _cairo_int128_negative (num); int den_neg = _cairo_int64_negative (den); - cairo_int64_t nonneg_den = den; + cairo_uint64_t nonneg_den; cairo_uquorem64_t uqr; cairo_quorem64_t qr; @@ -789,6 +789,8 @@ _cairo_int_96by64_32x64_divrem (cairo_int128_t num, cairo_int64_t den) num = _cairo_int128_negate (num); if (den_neg) nonneg_den = _cairo_int64_negate (den); + else + nonneg_den = den; uqr = _cairo_uint_96by64_32x64_divrem (num, nonneg_den); if (_cairo_uint64_eq (uqr.rem, nonneg_den)) { From 26e6c73aab3fbfb4e2c893b4064cd8e85dc25346 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Sat, 20 Jan 2007 02:58:15 -0800 Subject: [PATCH 43/53] NEWS: Add notes for 1.3.12 snapshot --- NEWS | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/NEWS b/NEWS index 29efdb45d..b373fe6ae 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,96 @@ +Snapshot 1.3.12 (2007-01-20 Carl Worth ) +=========================================================== +The relentless march toward the cairo 1.4 release continues, (even if +slightly late out of the starting blocks in 2007). This is the sixth +development snapshot in the 1.3 series. It comes 4 weeks after the +1.3.10 snapshot. + +Performance +----------- +As usual, this snapshot has some fun performance improvements to show +off: + +image-rgba long-lines-uncropped-100 470.08 -> 4.95: 94.91x speedup +███████████████████████████████████████████████ +image-rgb long-lines-uncropped-100 461.60 -> 4.96: 93.02x speedup +██████████████████████████████████████████████ + +This 100x improvement, (and yes, that's 100x, not 100%), in the image +backend occurs when drawing large shapes where only a fraction of the +shape actually appears in the final result, (the rest being outside +the bounds of the destination surface). Many applications should see +speedups here, and the actual amount of speedup depends on the ratio +of non-visible to visible portions of geometry. + +[Note: There remains a similar performance bug when drawing mostly +non-visible objects with the xlib backend. This is due to a similar +bug in the X server itself, but we hope a future cairo snapshot will +workaround that bug to get a similar speedup with the xlib backend.] + +image-rgba unaligned_clip-100 0.09 -> 0.06: 1.67x speedup +▍ +image-rgb unaligned_clip-100 0.09 -> 0.06: 1.66x speedup +▍ + +This speedup is due to further MMX optimization by Soeren Sandmann for +a case commonly hit when rendering PDF files, (and thanks to Jeff +Muizelaar for writing code to extract the test case for us). + +There's another MMX optimization in this snapshot (without a fancy +speedup chart) by Dan Williams which improves compositing performance +specifically for the OLPC machine. + +Thanks to Adrian Johnson, cairo's PDF output is now much more +efficient in the way it encodes text output. By reducing redundant +information and adding compression to text output streams, Adrian +achieved a ~25x improvement in the efficiency of encoding text in PDF +files, (was ~45 bytes per glyph and is now ~1.6 bytes per glyph). + +Bug fixes +--------- +In addition to those performance improvements, this snapshot includes +several bug fixes: + + * A huge number of bug fixes for cairo-atsui text rendering, (for mac + OS X). These bugs affect font selection, glyph positioning, glyph + rendering, etc. One noteworthy bug fixes is that + cairo_select_font_face will no longer arbitrarily select bold nor + italic when not requested, (at least not when using a standard CSS2 + font family name such as "serif", "sans-serif", "monospace", etc.). + All these fixes are thanks to Brian Ewins who continues to do a + great job as the new cairo-atsui maintainer. + + * Fix PDF output so that images that are scaled down no longer + mysteriously repeat (Carl Worth). + + * Fix segfault on Mac OS X dues to attempt to measure extents of a + zero-length string (Behdad Esfahbod). + + * Fix text extents to not include the size of initial/trailing + non-inked characters (Behdad Esfahbod). + +API tweaks +---------- +Three functions have had API changes to improve consistency. Note that +the API functions being changed here are all functions that were +introduced as new functions during these 1.3.x snapshots. As always, +there will not be any API changes to functions included in a major +release (1.2.x, 1.4.x, etc.) of cairo. + +The changes are as follows: + + * Rename of cairo_copy_clip_rectangles to cairo_copy_clip_rectangle_list. + + * Change cairo_get_dash_count to return an int rather than accepting a + pointer to an int for the return value. + + * Change cairo_get_dash to have a void return type rather than + returning cairo_status_t. + +It's possible there will be one more round of changes to these +functions, (and perhaps cairo_get_color_stop as well), as we seek to +establish a unifying convention for returning lists of values. + Snapshot 1.3.10 (2006-12-23 Carl Worth ) =========================================================== Santa Claus is coming just a little bit early this year, and he's From c34a1a75fdb886b7a69875fb92d30c6dfd9d39cb Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Sat, 20 Jan 2007 03:04:31 -0800 Subject: [PATCH 44/53] configure.in: Increment cairo version to 1.3.12 --- configure.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.in b/configure.in index 449245aed..1c87e3eff 100644 --- a/configure.in +++ b/configure.in @@ -5,7 +5,7 @@ dnl An odd micro number indicates in-progress development, (eg. from git/cvs) dnl An even micro number indicates a released version. m4_define(cairo_version_major, 1) m4_define(cairo_version_minor, 3) -m4_define(cairo_version_micro, 11) +m4_define(cairo_version_micro, 12) AC_INIT([cairo], cairo_version_major.cairo_version_minor.cairo_version_micro, From 53358ddc73b985b5cf6493dc48c54073fd7c59fc Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Sat, 20 Jan 2007 03:20:18 -0800 Subject: [PATCH 45/53] configure.in: Increment version to 1.3.13 after making the 1.3.12 snapshot --- configure.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.in b/configure.in index 1c87e3eff..25ae86ba7 100644 --- a/configure.in +++ b/configure.in @@ -5,7 +5,7 @@ dnl An odd micro number indicates in-progress development, (eg. from git/cvs) dnl An even micro number indicates a released version. m4_define(cairo_version_major, 1) m4_define(cairo_version_minor, 3) -m4_define(cairo_version_micro, 12) +m4_define(cairo_version_micro, 13) AC_INIT([cairo], cairo_version_major.cairo_version_minor.cairo_version_micro, From 1e52ce5a0981aac72452f1f7d7988e6382b0abcc Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Sat, 20 Jan 2007 03:20:30 -0800 Subject: [PATCH 46/53] doc tmpl churn --- doc/public/tmpl/cairo.sgml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/doc/public/tmpl/cairo.sgml b/doc/public/tmpl/cairo.sgml index 739f74bba..4b9dc0e7a 100644 --- a/doc/public/tmpl/cairo.sgml +++ b/doc/public/tmpl/cairo.sgml @@ -233,7 +233,6 @@ The cairo drawing context @cr: -@count: @Returns: @@ -245,7 +244,6 @@ The cairo drawing context @cr: @dashes: @offset: -@Returns: @@ -483,15 +481,6 @@ The cairo drawing context @rectangle_list: - - - - - -@cr: -@Returns: - - From 1a8d0a33ce589367f0e46006caecb544a3945048 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Sat, 20 Jan 2007 13:01:35 -0500 Subject: [PATCH 47/53] PDF: Fix approximate diagonal in recent commit Use x+y as an upper bound for sqrt(x*x+y*y), not x*y. --- src/cairo-pdf-surface.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/cairo-pdf-surface.c b/src/cairo-pdf-surface.c index 696a8d8f3..722372645 100644 --- a/src/cairo-pdf-surface.c +++ b/src/cairo-pdf-surface.c @@ -922,8 +922,7 @@ emit_surface_pattern (cairo_pdf_surface_t *surface, y1 = MAX (fabs(y1), fabs(y2)) + surface_extents.height; /* Similarly, don't bother computing the square root to * determine the length of the final diagonal. */ - xstep = _cairo_lround (ceil (x1 * y1)); - ystep = _cairo_lround (ceil (x1 * y1)); + xstep = ystep = _cairo_lround (ceil (x1 + y1)); } break; case CAIRO_EXTEND_REPEAT: From 6aa8e80cc722774191c4418c9a2cd434c0538508 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Sun, 21 Jan 2007 15:06:02 -0500 Subject: [PATCH 48/53] [pixman/src/fbmmx.c] Hide "dereferencing type-punned pointer" warnings The warning happens all the place when the code converts from ullong to __m64. The way the conversion is done is a C idiom: 1) get a pointer to the value, 2) convert it to the suitable pointer type for the target, 3) dereference it. That is "*(__m64*)(&m)" in this case. This is necessarily (as opposed to just casting to target type) because the two types may not be "compatible" from the compiler's point of view. Example of types that are not compatbile is structs vs anything. The "dereferencing type-punned pointer will break strict-aliasing rules" from gcc exactly means: "some code may be assuming that pointers with different types do not compare equal (or otherwise share the same target object). If you case a pointer to a different type and dereference it, it may happen here." However, in our usecase, it's clear that the compiler cannot make any false assumptions. So we just go ahead and hide it by using a middle cast to "void *". Since the compiler does not many any aliasing assumptions about generic pointers, it will not warn either. (Though the problems if any, will still occure. So this is not an ideal solution to this problem and should be used very carefully, to no hide useful warnings for when things go loose on some weird architecture.) Another solution would have been to use gcc's "may_alias" function attribute, but trying to define a may_alias version of __m64 hit a bug in gcc. That is, try replacing "__m64" with "m64" and define: typedef __m64 m64 __attribute__((may_alias)); and see it fail to compile. This seems to be because of the special vector type that __m64 has. --- pixman/src/fbmmx.c | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/pixman/src/fbmmx.c b/pixman/src/fbmmx.c index aa18019ae..abe52b940 100644 --- a/pixman/src/fbmmx.c +++ b/pixman/src/fbmmx.c @@ -157,6 +157,8 @@ static const MMXData c = #define MC(x) c.mmx_##x #endif +#define M64(x) (*(__m64*)(void*)(&x)) + static __inline__ __m64 shift (__m64 v, int s) { @@ -1619,7 +1621,7 @@ fbCompositeSolidMask_nx8x8888mmx (pixman_operator_t op, if (m) { - __m64 vdest = in_over(vsrc, vsrca, expand_alpha_rev (*(__m64*)(&m)), load8888(*dst)); + __m64 vdest = in_over(vsrc, vsrca, expand_alpha_rev (M64(m)), load8888(*dst)); *dst = store8888(vdest); } @@ -1647,8 +1649,8 @@ fbCompositeSolidMask_nx8x8888mmx (pixman_operator_t op, vdest = *(__m64 *)dst; - dest0 = in_over(vsrc, vsrca, expand_alpha_rev (*(__m64*)(&m0)), expand8888(vdest, 0)); - dest1 = in_over(vsrc, vsrca, expand_alpha_rev (*(__m64*)(&m1)), expand8888(vdest, 1)); + dest0 = in_over(vsrc, vsrca, expand_alpha_rev (M64(m0)), expand8888(vdest, 0)); + dest1 = in_over(vsrc, vsrca, expand_alpha_rev (M64(m1)), expand8888(vdest, 1)); *(__m64 *)dst = pack8888(dest0, dest1); } @@ -1667,7 +1669,7 @@ fbCompositeSolidMask_nx8x8888mmx (pixman_operator_t op, if (m) { __m64 vdest = load8888(*dst); - vdest = in_over(vsrc, vsrca, expand_alpha_rev (*(__m64*)(&m)), vdest); + vdest = in_over(vsrc, vsrca, expand_alpha_rev (M64(m)), vdest); *dst = store8888(vdest); } @@ -1737,7 +1739,7 @@ fbCompositeSolidMaskSrc_nx8x8888mmx (pixman_operator_t op, if (m) { - __m64 vdest = in(vsrc, expand_alpha_rev (*(__m64*)(&m))); + __m64 vdest = in(vsrc, expand_alpha_rev (M64(m))); *dst = store8888(vdest); } else @@ -1769,8 +1771,8 @@ fbCompositeSolidMaskSrc_nx8x8888mmx (pixman_operator_t op, vdest = *(__m64 *)dst; - dest0 = in(vsrc, expand_alpha_rev (*(__m64*)(&m0))); - dest1 = in(vsrc, expand_alpha_rev (*(__m64*)(&m1))); + dest0 = in(vsrc, expand_alpha_rev (M64(m0))); + dest1 = in(vsrc, expand_alpha_rev (M64(m1))); *(__m64 *)dst = pack8888(dest0, dest1); } @@ -1793,7 +1795,7 @@ fbCompositeSolidMaskSrc_nx8x8888mmx (pixman_operator_t op, if (m) { __m64 vdest = load8888(*dst); - vdest = in(vsrc, expand_alpha_rev (*(__m64*)(&m))); + vdest = in(vsrc, expand_alpha_rev (M64(m))); *dst = store8888(vdest); } else @@ -1848,7 +1850,7 @@ fbCompositeSolidMask_nx8x0565mmx (pixman_operator_t op, vsrca = expand_alpha (vsrc); vsrc16 = pack565(vsrc, _mm_setzero_si64(), 0); - src16 = *(ullong*)(&vsrc16); + src16 = *(ullong*)(void*)(&vsrc16); srcsrcsrcsrc = (ullong)src16 << 48 | (ullong)src16 << 32 | (ullong)src16 << 16 | (ullong)src16; @@ -1870,7 +1872,7 @@ fbCompositeSolidMask_nx8x0565mmx (pixman_operator_t op, if (m) { __m64 vd = _mm_cvtsi32_si64 (*dst); - __m64 vdest = in_over(vsrc, vsrca, expand_alpha_rev (*(__m64*)(&m)), expand565(vd, 0)); + __m64 vdest = in_over(vsrc, vsrca, expand_alpha_rev (M64(m)), expand565(vd, 0)); *dst = _mm_cvtsi64_si32 (pack565(vdest, _mm_setzero_si64(), 0)); } @@ -1900,13 +1902,13 @@ fbCompositeSolidMask_nx8x0565mmx (pixman_operator_t op, vdest = *(__m64 *)dst; - vm0 = *(__m64*)(&m0); + vm0 = M64(m0); vdest = pack565(in_over(vsrc, vsrca, expand_alpha_rev(vm0), expand565(vdest, 0)), vdest, 0); - vm1 = *(__m64*)(&m1); + vm1 = M64(m1); vdest = pack565(in_over(vsrc, vsrca, expand_alpha_rev(vm1), expand565(vdest, 1)), vdest, 1); - vm2 = *(__m64*)(&m2); + vm2 = M64(m2); vdest = pack565(in_over(vsrc, vsrca, expand_alpha_rev(vm2), expand565(vdest, 2)), vdest, 2); - vm3 = *(__m64*)(&m3); + vm3 = M64(m3); vdest = pack565(in_over(vsrc, vsrca, expand_alpha_rev(vm3), expand565(vdest, 3)), vdest, 3); *(__m64 *)dst = vdest; @@ -1926,7 +1928,7 @@ fbCompositeSolidMask_nx8x0565mmx (pixman_operator_t op, if (m) { __m64 vd = _mm_cvtsi32_si64 (*dst); - __m64 vdest = in_over(vsrc, vsrca, expand_alpha_rev (*(__m64*)(&m)), expand565(vd, 0)); + __m64 vdest = in_over(vsrc, vsrca, expand_alpha_rev (M64(m)), expand565(vd, 0)); *dst = _mm_cvtsi64_si32 (pack565(vdest, _mm_setzero_si64(), 0)); } @@ -2657,7 +2659,7 @@ fbSolidFillmmx (FbPixels *pDraw, } fill = ((ullong)xor << 32) | xor; - vfill = *(__m64*)&fill; + vfill = M64(fill); while (height--) { From 1a9d3b5185f454a63bc96c2e570c931c3ecabbb5 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Sun, 21 Jan 2007 15:11:31 -0500 Subject: [PATCH 49/53] [configure.in] Use AC_MSG_RESULT in PKG_CHECK_MODULES's second branch If PKG_CHECK_MODULES fails, it does not print out any check results and so, no newlines. This is kinda silly, at least in the case that no second branch is provided, but I think that's the way it is, to let users decide what to print. We now just do a AC_MSG_RESULT(no) and continue with what we used to do. Inspired by Tor Lillqvist's similar change in Pango. --- configure.in | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/configure.in b/configure.in index 25ae86ba7..ecb124b76 100644 --- a/configure.in +++ b/configure.in @@ -231,7 +231,8 @@ dnl =========================================================================== CAIRO_BACKEND_ENABLE(xlib, Xlib, xlib, XLIB_SURFACE, auto, [ xlib_REQUIRES="x11" PKG_CHECK_MODULES(xlib, $xlib_REQUIRES, , - [xlib_REQUIRES="" + [AC_MSG_RESULT(no) + xlib_REQUIRES="" AC_PATH_XTRA if test "x$no_x" = xyes; then use_xlib="no (requires X development libraries)" @@ -253,7 +254,8 @@ CAIRO_BACKEND_ENABLE(xlib_xrender, Xlib Xrender, xlib-xrender, XLIB_XRENDER_SURF xlib_xrender_BASE=cairo-xlib xlib_xrender_REQUIRES="xrender >= 0.6" PKG_CHECK_MODULES(xlib_xrender, $xlib_xrender_REQUIRES, , - [xlib_xrender_REQUIRES="" + [AC_MSG_RESULT(no) + xlib_xrender_REQUIRES="" AC_CHECK_HEADER(X11/extensions/Xrender.h, [xlib_xrender_NONPKGCONFIG_LIBS="-lXrender"], [use_xlib_xrender="no (requires Xrender http://freedesktop.org/Software/xlibs)"])]) @@ -264,7 +266,7 @@ dnl =========================================================================== CAIRO_BACKEND_ENABLE(xcb, XCB, xcb, XCB_SURFACE, no, [ xcb_REQUIRES="xcb >= 0.9.92 xcb-render >= 0.9.92 xcb-renderutil" - PKG_CHECK_MODULES(xcb, $xcb_REQUIRES, , [ + PKG_CHECK_MODULES(xcb, $xcb_REQUIRES, , [AC_MSG_RESULT(no) use_xcb="no (requires XCB http://xcb.freedesktop.org)"]) ]) @@ -351,7 +353,7 @@ CAIRO_BACKEND_ENABLE(png, PNG, png, PNG_FUNCTIONS, yes, [ fi if test "x$use_png" = "xyes" ; then - PKG_CHECK_MODULES(png, $png_REQUIRES) + PKG_CHECK_MODULES(png, $png_REQUIRES, , AC_MSG_RESULT(no)) else AC_MSG_WARN([Could not find libpng in the pkg-config search path]) fi @@ -368,19 +370,19 @@ dnl =========================================================================== GLITZ_MIN_VERSION=0.5.1 CAIRO_BACKEND_ENABLE(glitz, glitz, glitz, GLITZ_SURFACE, no, [ glitz_REQUIRES="glitz >= $GLITZ_MIN_VERSION" - PKG_CHECK_MODULES(glitz, $glitz_REQUIRES, , [ + PKG_CHECK_MODULES(glitz, $glitz_REQUIRES, , [AC_MSG_RESULT(no) use_glitz="no (requires glitz http://freedesktop.org/Software/glitz)"]) ]) if test "x$use_glitz" = "xyes";then PKG_CHECK_MODULES(GLITZ_AGL, glitz-agl >= $GLITZ_MIN_VERSION, - [have_glitz_agl=yes], [have_glitz_agl=no; echo $MYSTUFF_PKG_ERRORS]) + [have_glitz_agl=yes], [have_glitz_agl=no; AC_MSG_RESULT(no)]) PKG_CHECK_MODULES(GLITZ_EGL, glitz-egl >= $GLITZ_MIN_VERSION, - [have_glitz_egl=yes], [have_glitz_egl=no; echo $MYSTUFF_PKG_ERRORS]) + [have_glitz_egl=yes], [have_glitz_egl=no; AC_MSG_RESULT(no)]) PKG_CHECK_MODULES(GLITZ_GLX, glitz-glx >= $GLITZ_MIN_VERSION, - [have_glitz_glx=yes], [have_glitz_glx=no; echo $MYSTUFF_PKG_ERRORS]) + [have_glitz_glx=yes], [have_glitz_glx=no; AC_MSG_RESULT(no)]) PKG_CHECK_MODULES(GLITZ_WGL, glitz-wgl >= $GLITZ_MIN_VERSION, - [have_glitz_wgl=yes], [have_glitz_wgl=no; echo $MYSTUFF_PKG_ERRORS]) + [have_glitz_wgl=yes], [have_glitz_wgl=no; AC_MSG_RESULT(no)]) if test "x$have_glitz_agl" = "xyes";then AC_DEFINE(CAIRO_CAN_TEST_GLITZ_AGL_SURFACE, 1, [define if glitz backend can be tested against agl]) @@ -405,7 +407,7 @@ dnl =========================================================================== CAIRO_BACKEND_ENABLE(directfb, directfb, directfb, DIRECTFB_SURFACE, no, [ directfb_REQUIRES=directfb - PKG_CHECK_MODULES(directfb, $directfb_REQUIRES, , + PKG_CHECK_MODULES(directfb, $directfb_REQUIRES, , AC_MSG_RESULT(no) [use_directfb="no (requires directfb http://www.directfb.org)"]) ]) @@ -435,11 +437,13 @@ CAIRO_BACKEND_ENABLE(ft, FreeType font, freetype, FT_FONT, auto, [ ft_REQUIRES="fontconfig" PKG_CHECK_MODULES(FONTCONFIG, $ft_REQUIRES, [_CHECK_FUNCS_WITH_FLAGS(FcFini, $ft_CFLAGS, $ft_LIBS)], - [use_ft="no (requires fontconfig"]) + [AC_MSG_RESULT(no); use_ft="no (requires fontconfig"]) if test "x$use_ft" = "xyes"; then PKG_CHECK_MODULES(FREETYPE, freetype2 >= $FREETYPE_MIN_VERSION, - [freetype_pkgconfig=yes], [freetype_pkgconfig=no]) + [freetype_pkgconfig=yes], + [AC_MSG_RESULT(no) + freetype_pkgconfig=no]) if test "x$freetype_pkgconfig" = "xyes"; then ft_REQUIRES="freetype2 >= $FREETYPE_MIN_VERSION $ft_REQUIRES" @@ -517,7 +521,10 @@ POPPLER_VERSION_REQUIRED=0.4.1 test_pdf=no if test "x$use_pdf" = "xyes"; then poppler_DEPENDENCY="poppler-glib >= $POPPLER_VERSION_REQUIRED" - PKG_CHECK_MODULES(POPPLER, $poppler_DEPENDENCY pango gtk+-2.0, [test_pdf=yes], [test_pdf="no (requires $poppler_DEPENDENCY)"]) + PKG_CHECK_MODULES(POPPLER, $poppler_DEPENDENCY pango gtk+-2.0, + [test_pdf=yes], + [AC_MSG_RESULT(no) + test_pdf="no (requires $poppler_DEPENDENCY)"]) if test "x$test_pdf" = "xyes"; then AC_DEFINE([CAIRO_CAN_TEST_PDF_SURFACE], 1, [Define to 1 if the PDF backend can be tested (need poppler and other dependencies for pdf2png)]) else @@ -542,7 +549,10 @@ CAIRO_BACKEND_ENABLE(svg, SVG, svg, SVG_SURFACE, auto, [ LIBRSVG_VERSION_REQUIRED=2.15.0 if test "x$use_svg" = "xyes"; then librsvg_DEPENDENCY="librsvg-2.0 >= $LIBRSVG_VERSION_REQUIRED" - PKG_CHECK_MODULES(LIBRSVG, $librsvg_DEPENDENCY gdk-2.0, [test_svg=yes], [test_svg="no (requires $librsvg_DEPENDENCY)"]) + PKG_CHECK_MODULES(LIBRSVG, $librsvg_DEPENDENCY gdk-2.0, + [test_svg=yes], + [AC_MSG_RESULT(no) + test_svg="no (requires $librsvg_DEPENDENCY)"]) if test "x$test_svg" = "xyes"; then AC_DEFINE([CAIRO_CAN_TEST_SVG_SURFACE], 1, [Define to 1 if the SVG backend can be tested]) else From 4dfa5d33e451886b05cf767ae5a538e152ec534d Mon Sep 17 00:00:00 2001 From: Brian Ewins Date: Mon, 22 Jan 2007 01:09:49 +0000 Subject: [PATCH 50/53] [ATSUI] Handle deleted glyphs correctly. (#9530) This code ensures that deleted glyphs are not drawn. --- src/cairo-atsui-font.c | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/src/cairo-atsui-font.c b/src/cairo-atsui-font.c index b359b2e16..8a7c679a5 100644 --- a/src/cairo-atsui-font.c +++ b/src/cairo-atsui-font.c @@ -481,7 +481,7 @@ static cairo_status_t _cairo_atsui_font_init_glyph_metrics (cairo_atsui_font_t *scaled_font, cairo_scaled_glyph_t *scaled_glyph) { - cairo_text_extents_t extents; + cairo_text_extents_t extents = {0, 0, 0, 0, 0, 0}; OSStatus err, callback_err; ATSGlyphScreenMetrics metricsH; static ATSCubicMoveToUPP moveProc = NULL; @@ -493,6 +493,13 @@ _cairo_atsui_font_init_glyph_metrics (cairo_atsui_font_t *scaled_font, double xscale, yscale; CGRect rect; + if (theGlyph == kATSDeletedGlyphcode) { + _cairo_scaled_glyph_set_metrics (scaled_glyph, + &scaled_font->base, + &extents); + return CAIRO_STATUS_SUCCESS; + } + /* We calculate the advance from the screen metrics. We * could probably take this from the glyph path. */ @@ -633,6 +640,7 @@ _cairo_atsui_scaled_font_init_glyph_path (cairo_atsui_font_t *scaled_font, static ATSCubicLineToUPP lineProc = NULL; static ATSCubicCurveToUPP curveProc = NULL; static ATSCubicClosePathUPP closePathProc = NULL; + GlyphID theGlyph = _cairo_scaled_glyph_index (scaled_glyph); OSStatus err; cairo_atsui_scaled_path_t scaled_path; cairo_matrix_t *font_to_device = &scaled_font->base.scale; @@ -640,6 +648,17 @@ _cairo_atsui_scaled_font_init_glyph_path (cairo_atsui_font_t *scaled_font, double xscale; double yscale; + scaled_path.path = _cairo_path_fixed_create (); + if (!scaled_path.path) + return CAIRO_STATUS_NO_MEMORY; + + if (theGlyph == kATSDeletedGlyphcode) { + _cairo_scaled_glyph_set_path (scaled_glyph, &scaled_font->base, + scaled_path.path); + + return CAIRO_STATUS_SUCCESS; + } + /* extract the rotation/shear component of the scale matrix. */ _cairo_matrix_compute_scale_factors (font_to_device, &xscale, &yscale, 1); cairo_matrix_init (&unscaled_font_to_device, @@ -650,9 +669,6 @@ _cairo_atsui_scaled_font_init_glyph_path (cairo_atsui_font_t *scaled_font, cairo_matrix_scale (&unscaled_font_to_device, 1.0/xscale, 1.0/yscale); scaled_path.scale = &unscaled_font_to_device; - scaled_path.path = _cairo_path_fixed_create (); - if (!scaled_path.path) - return CAIRO_STATUS_NO_MEMORY; if (moveProc == NULL) { moveProc = NewATSCubicMoveToUPP(_move_to); @@ -662,7 +678,7 @@ _cairo_atsui_scaled_font_init_glyph_path (cairo_atsui_font_t *scaled_font, } err = ATSUGlyphGetCubicPaths(scaled_font->style, - _cairo_scaled_glyph_index (scaled_glyph), + theGlyph, moveProc, lineProc, curveProc, @@ -696,6 +712,16 @@ _cairo_atsui_scaled_font_init_glyph_surface (cairo_atsui_font_t *scaled_font, CGAffineTransform transform; + if (theGlyph == kATSDeletedGlyphcode) { + surface = (cairo_image_surface_t *)cairo_image_surface_create (CAIRO_FORMAT_A8, 2, 2); + if (!surface) + return CAIRO_STATUS_NO_MEMORY; + _cairo_scaled_glyph_set_surface (scaled_glyph, + &base, + surface); + return CAIRO_STATUS_SUCCESS; + } + /* Compute a box to contain the glyph mask. The vertical * sizes come from the font extents; extra pixels are * added to account for fractional sizes. From 49b9f0c082944029af8dab84da87f7746c5f72b9 Mon Sep 17 00:00:00 2001 From: Brian Ewins Date: Mon, 22 Jan 2007 01:10:52 +0000 Subject: [PATCH 51/53] [ATSUI] out-of-range glyphs should be treated as deleted. (#9530) Glyphs outside the range 0x0-0xffff are not valid in atsui, but scaled_glyph stores unsigned long. Ensure that invalid values do not cause errors. --- src/cairo-atsui-font.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/cairo-atsui-font.c b/src/cairo-atsui-font.c index 8a7c679a5..43cdff687 100644 --- a/src/cairo-atsui-font.c +++ b/src/cairo-atsui-font.c @@ -477,6 +477,14 @@ OSStatus _close_path_for_metrics(void *callback_data) return noErr; } +static GlyphID +_cairo_atsui_scaled_glyph_index (cairo_scaled_glyph_t *scaled_glyph) { + unsigned long index = _cairo_scaled_glyph_index (scaled_glyph); + if (index > 0xffff) + return kATSDeletedGlyphcode; + return index; +} + static cairo_status_t _cairo_atsui_font_init_glyph_metrics (cairo_atsui_font_t *scaled_font, cairo_scaled_glyph_t *scaled_glyph) @@ -489,7 +497,7 @@ _cairo_atsui_font_init_glyph_metrics (cairo_atsui_font_t *scaled_font, static ATSCubicCurveToUPP curveProc = NULL; static ATSCubicClosePathUPP closePathProc = NULL; CGMutablePathRef path; - GlyphID theGlyph = _cairo_scaled_glyph_index (scaled_glyph); + GlyphID theGlyph = _cairo_atsui_scaled_glyph_index (scaled_glyph); double xscale, yscale; CGRect rect; @@ -640,7 +648,7 @@ _cairo_atsui_scaled_font_init_glyph_path (cairo_atsui_font_t *scaled_font, static ATSCubicLineToUPP lineProc = NULL; static ATSCubicCurveToUPP curveProc = NULL; static ATSCubicClosePathUPP closePathProc = NULL; - GlyphID theGlyph = _cairo_scaled_glyph_index (scaled_glyph); + GlyphID theGlyph = _cairo_atsui_scaled_glyph_index (scaled_glyph); OSStatus err; cairo_atsui_scaled_path_t scaled_path; cairo_matrix_t *font_to_device = &scaled_font->base.scale; @@ -704,7 +712,7 @@ _cairo_atsui_scaled_font_init_glyph_surface (cairo_atsui_font_t *scaled_font, cairo_scaled_font_t base = scaled_font->base; cairo_font_extents_t extents = base.extents; - GlyphID theGlyph = _cairo_scaled_glyph_index (scaled_glyph); + GlyphID theGlyph = _cairo_atsui_scaled_glyph_index (scaled_glyph); ATSGlyphScreenMetrics metricsH; double left, bottom, width, height; double xscale, yscale; From c316b7220dcd59653533a487d81c5e3d71729218 Mon Sep 17 00:00:00 2001 From: Brian Ewins Date: Mon, 22 Jan 2007 01:13:50 +0000 Subject: [PATCH 52/53] [ATSUI] Some glyph operations cannot be 'unsupported'. (#9530) The atsui font backend returned the internal 'unsupported' error code for errors in operations that do not have fallbacks. Now that the underlying cause, deleted glyphs, has been fixed, I'm changing the status code returned to the public 'no memory' one; it should be the only condition triggering the failure now. --- src/cairo-atsui-font.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/cairo-atsui-font.c b/src/cairo-atsui-font.c index 43cdff687..8d95b8eb8 100644 --- a/src/cairo-atsui-font.c +++ b/src/cairo-atsui-font.c @@ -515,7 +515,7 @@ _cairo_atsui_font_init_glyph_metrics (cairo_atsui_font_t *scaled_font, 1, &theGlyph, 0, false, false, &metricsH); if (err != noErr) - return CAIRO_INT_STATUS_UNSUPPORTED; + return CAIRO_STATUS_NO_MEMORY; /* Scale down to font units.*/ _cairo_matrix_compute_scale_factors (&scaled_font->base.scale, @@ -544,11 +544,8 @@ _cairo_atsui_font_init_glyph_metrics (cairo_atsui_font_t *scaled_font, (void *)path, &callback_err); if (err != noErr) { - /* This could potentially happen for bitmap fonts, where - * no paths are available. - */ CGPathRelease (path); - return CAIRO_INT_STATUS_UNSUPPORTED; + return CAIRO_STATUS_NO_MEMORY; } rect = CGPathGetBoundingBox (path); @@ -788,7 +785,7 @@ _cairo_atsui_scaled_font_init_glyph_surface (cairo_atsui_font_t *scaled_font, drawingContext = CGBitmapContextCreateWithCairoImageSurface (surface); if (!drawingContext) { cairo_surface_destroy ((cairo_surface_t *)surface); - return CAIRO_INT_STATUS_UNSUPPORTED; + return CAIRO_STATUS_NO_MEMORY; } atsFont = FMGetATSFontRefFromFont (scaled_font->fontID); From 3b7751279c034caf2f86464cd1936d7ce1736ccc Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Mon, 22 Jan 2007 14:42:48 -0500 Subject: [PATCH 53/53] [pixman/src/fbmmx.c] Add comment around M64 /* cast to void* in the middle to shut gcc up warning about * "dereferencing type-punned pointers". */ --- pixman/src/fbmmx.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pixman/src/fbmmx.c b/pixman/src/fbmmx.c index abe52b940..9c263f876 100644 --- a/pixman/src/fbmmx.c +++ b/pixman/src/fbmmx.c @@ -157,6 +157,9 @@ static const MMXData c = #define MC(x) c.mmx_##x #endif +/* cast to void* in the middle to shut gcc up warning about + * "dereferencing type-punned pointers". + */ #define M64(x) (*(__m64*)(void*)(&x)) static __inline__ __m64