Commit graph

49 commits

Author SHA1 Message Date
Carl Worth
6ff2439b33 Implement _cairo_traps_tessellate_triangle with _cairo_traps_tessellate_convex_quad
The newly rewritten convex_quad code is actually simpler than the
triangle code being replaced here. This also allows us to throw
away the problematic _compute_x function which can't handle
horizontal lines, (divide by zero). So the cairo world becomes a
better place.
2007-03-14 17:20:33 -07:00
Carl Worth
53ae6ea957 Fix _cairo_traps_tessellate_convex_quad to handle a == b
This case was found in an attempt to use the convex_quad function
for tessellating triangles as well. Fortunately the fix is very
easy.
2007-03-14 17:20:27 -07:00
Carl Worth
5d23d0c90c Remove dead-code remnants of old tessellator 2007-03-14 15:23:01 -07:00
Carl Worth
1f3a5b4e12 Fix bugs in _cairo_traps_tessellate_convex_quad
The previous code was not handling all cases correctly, (yes,
even something as simple as a quadrilateral can exhibit a
remarkably large number of different cases when tessellation
is attempted).

This fix now introduces slope comparison which handles several
cases that were mis-handled with the previous implementation which
only used independent sorting of the X and Y values of the
coordinates.

This fixes the skew-extreme test case and the bug reported here:

	Skew transforms were broken by the cairo update in December
	https://bugzilla.mozilla.org/show_bug.cgi?id=373632
2007-03-14 15:06:36 -07:00
Behdad Esfahbod
deed0f4734 [polygon,spline,traps] Avoid free(NULL) 2007-03-13 06:09:09 -04:00
Behdad Esfahbod
24aec99ffb [cairo-traps] Add a cache of one trapezoid to cairo_traps_t
Seems like half the time, we just need one trap.  This avoids
calling malloc() for those cases.
2007-03-13 05:14:19 -04:00
Behdad Esfahbod
4737416c6e [cairo-traps] Clean-up realloc algorithm for clarity 2007-03-13 05:14:19 -04:00
Behdad Esfahbod
a9d8cb3e8a [cairo-traps] Use INT32_MIN/MAX instead of INT16_MIN/MAX << 16 2007-03-13 05:14:19 -04:00
Carl Worth
4cd871b6f3 Switch from old tessellator to new tessellator 2006-11-22 16:56:51 -08:00
Behdad Esfahbod
f3f6ea3092 Fix typo. 2006-11-14 17:58:09 -05:00
Carl Worth
fefa7d9b99 Rewrite tessellate_rectangle as tessellate_convex_quad to make it more useful
Currently there aren't even any users of this code, (they had
stopped using it when they realized what they really wanted
was tessellate_convex_quad).
2006-11-13 15:57:50 -08:00
Carl Worth
e324bbcbc6 Add a status field to cairo_traps_t to enable less error checking 2006-11-13 14:44:21 -08:00
Carl Worth
7f2cf378d5 Fix MAX vs. MIN bug introduced with rename away from CAIRO_MINSHORT 2006-06-07 02:56:45 -07:00
Carl Worth
c1855f1762 Remove CAIRO_{MIN,MAX}SHORT which did not distinguish signed vs. unsigned.
Instead, use the standard INT16_{MIN,MAX} and UINT16_{MIN,MAX} as
appropriate.
2006-06-06 16:59:59 -07:00
Carl Worth
ef10a0403a Remove initial, final, and duplicate blank lines.
This patch was produced by running git-stripspace on all *.[ch] files
within cairo. Note that this script would have also created all the changes
from the previous commits to remove trailing whitespace.
2006-06-06 15:50:33 -07:00
Carl Worth
5278de0997 Remove all remaining trailing whitespace.
This patch was produced with the following (GNU) sed script:

	sed -i -r -e 's/[ \t]+$//'

run on all *.[ch] files within cairo.

Note that the above script would have also created all the changes
from the previous commits to remove trailing whitespace.
2006-06-06 15:41:31 -07:00
Carl Worth
4670366ede Remove trailing whitespace from lines that look like comments.
This patch was produced with the following (GNU) sed script:

	sed -i -r -e '/^[ \t]*\/?\*/ s/[ \t]+$//'

run on all *.[ch] files within cairo, (though I manually excluded
src/cairo-atsui-font.c which has a code line that appears as a comment
to this script).
2006-06-06 15:35:48 -07:00
Carl Worth
80b8deb1e4 Remove extraneous whitespace from "blank" lines.
This patch was produced with the following (GNU) sed script:

	sed -i -r -e 's/^[ \t]+$//'

run on all *.[ch] files within cairo.
2006-06-06 15:25:49 -07:00
Carl Worth
a6b1b014bb Implement the device_offset functionality at surface, not gstate layer
This is a mega-patch that has the advantage that the entire test suite
passes both immediately before and immediately after this commit.

The disadvantage of the mega-patch is that it does not reflect the
development history of the device-offset branch, (with its various
fumblings and flailings). To capture that history, we will next merge
in that branch.
2006-05-04 01:45:41 -07:00
Owen Taylor
96342fe7be Make the check for rectangular trapezoids simpler and more accurate. (#4220, found using test case from Richard Stellingwerff)
reviewed by: cworth
2005-08-27 18:54:03 +00:00
Kristian Høgsberg
ebf985c876 New files. Move code for manipulating cairo_clip_t out into cairo_clip_* functions and put them in cairo-clip.c.
Rewrite to use new cairo_clip_t functions for manipulating the clip state, change the clip_and_composite_trapezoids call tree to use cairo_clip_t instead of cairo_gstate_t.
Use new cairo_clip_t function to maintain clip state while replaying.
Pass fill rule and tolerance directly, to break gstate dependency.
New function. Set the clip for a surface as specified by the cairo_clip_t.
Move translate_traps() from cairo-gstate.c to here and rename it.
Reviewed by: otaylor
2005-08-04 22:45:59 +00:00
Carl Worth
37a48e674c Fix bug in converting box to rectangle that left clip_rect.height uninitialized, (leading to unpredictable, intermittent test failures). 2005-06-01 00:29:24 +00:00
Owen Taylor
c382f9daf0 src/cairo-traps.c src/cairoint.h (_cairo_traps_init_box): New function to create a single trapezoid box.
src/cairo.c src/cairo-gstate.c src/cairoint.h: Move the implementation of cairo_paint() into cairo-gstate.c for a better fix for the problem with backend/user coordinate confusion. Also no longer clear the current path on cairo_paint()
2005-04-27 10:16:47 +00:00
Owen Taylor
21268bc359 Fix a comment from last commit 2005-04-13 14:04:33 +00:00
Owen Taylor
542e6c8c90 Work around a pair of libpixman bugs (denegerate trapezoids from tesellator, pixman_region_union_rect() failing on width/height zero rectangles) 2005-04-13 14:01:50 +00:00
Owen Taylor
a16a634f97 src/cairoint.h src/cairo-traps.c: Add _cairo_traps_extract_region for converting trapezoids into a pixman region.
Represent all rectangular pixel-aligned regions as regions, not just single rectangles.
Split into manageable pieces, optimize rectangular pixel- aligned regions by using _cairo_surface_fill_rectangles() or _cairo_surface_set_clip_region() as appropriate.
tests/trap-clip.c tests/trap-clip-ref.png tests/Makefile.am: Add a test for trapezoids clipping.
Add an index.
2005-04-13 11:23:43 +00:00
Carl Worth
c4697bc572 Disable the "new" intersection code so that the incorrect fill problems (test/fill_rule) go away. 2005-03-07 14:23:07 +00:00
Carl Worth
dcfb0d8a2b Switch from broken cworth@isi.edu address to canonical cworth@cworth.org address. 2005-02-22 11:35:03 +00:00
Owen Taylor
711d7965c8 src/cairo_unicode.c src/cairoint.h src/Makefile.am: Add _cairo_utf8_to_utf16(), _cairo_utf8_to_ucs4() based on code from GLib.
Add CAIRO_STATUS_INVALID_STRING
Use _cairo_utf8_to_ucs4().
Add cairo_bool_t
Add TRUE/FALSE definitions.
src/cairo.[ch] src/cairoint.h src/cairo_gstate.c: switch cairo_in_stroke/cairo_in_fill and all the functions used to implement them over to cairo_bool_t.
2005-02-01 15:06:33 +00:00
Carl Worth
7a5a3cb208 Remove unused CAIRO_TRAPS_GROWTH_INC.
Resize arrays by doubling rather than by linear increments.
Add new bug exposed centi_unfinished.svg.
2004-12-23 13:49:56 +00:00
Carl Worth
bf8374dba2 Convert all files to utf-8. Add copyright information to cairo_png_surface.c. 2004-10-21 18:40:50 +00:00
Keith Packard
f9b0020850 Compute extents of cairo_traps_t on the fly using approximate method which is correct given the way cairo generates trapezoids.
Avoid zero-dimensioned pixmaps
2004-10-12 14:17:23 +00:00
Keith Packard
41f549a870 Add WARN_CFLAGS, autodetection for 64/128 bit ints and cairo_wideint.[ch]
Check status return from _cairo_gstate_glyph_extents
Quiet compiler warnings about uninitialized variables
Switch to alternate exact line intersection code.
Add 64/128-bit wide integer arithmetic.
Switch to stdint.h types (and new wide types).
2004-05-28 12:37:15 +00:00
David Reveman
c15c7b9364 Fixed missing limits.h includes 2004-04-20 12:35:44 +00:00
David Reveman
e309090d2a Added new pattern API 2004-04-06 09:36:12 +00:00
Carl Worth
b55f107679 Add typedefs for new callbacks to be used by cairo_current_path: cairo_move_to_func, cairo_line_to_func, cairo_curve_to_func, and cairo_close_path_func.
cairo_path.last_move_point and cairo_path.current_point are now fixed-point not doubles for consistency.
Now accept 4 explicit function pointers rather than a structure. Eliminate unnecessary done_path callback.
Track change in _cairo_path_interpret. Code previously in done_path callback is now here immediately after call to _cairo_path_interpret.
Internal _cairo_path API modified to accept fixed-point data everywhere. Much cleaner this way.
Have to convert doubles to fixed-point to track changes in _cairo_path API.
Keep data in fixed-point rather than going through intermediate doubles. Track changes in _cairo_path API.
New function to help when working with freetype.
2004-02-12 19:02:33 +00:00
Richard Worth
5c490d2160 Add '-no-undefined' to end of libcairo_la_LDFLAGS to enable building shared library under cygwin.
Remove all 'extern ' and ' __external_linkage' (macro for __declspec(dllexport) and __declspec(dllimport)) from function declarations. These are no longer needed for cygwin.
Changed type of _line_segs_intersect_ceil from 'static cairo_fixed_t' to 'static int' to match definition. This was necessary to compile under cygwin.
2004-01-22 20:47:24 +00:00
Carl Worth
f86a979b49 Bumped version to 0.1.12 for new cairo_in_stroke and cairo_in_fill functions.
Added new cairo_in_stroke and cairo_in_fill.
* src/cairo_gstate.c (_cairo_gstate_in_stroke): (_cairo_gstate_in_fill): New functions to support for cairo_in_stroke and cairo_in_fill. Many thanks to Thomas Hunger <info@teh-web.de> for the initial implementation which demonstrated how easy this would be and pushed me to go and write it already.
Fixed to use _cairo_fixed_from_double instead of XDoubleToFixed.
2003-11-06 18:33:28 +00:00
Carl Worth
5b5c172803 Preliminary support for running Cairo with X servers without the Render extension. This is still horribly slow. Removed many uses of X-specific macros, (eg. XDoubleToFixed) 2003-09-05 15:29:49 +00:00
Carl Worth
0ed4d32d87 Fixed to use fabs not abs. Added pointer to Hobby's intersection paper. 2003-08-29 17:48:48 +00:00
Carl Worth
4d399b9aca Added missing underscores to several internal functions. 2003-08-26 07:40:17 +00:00
Richard Henderson
9289e8a77a Depend on slim.
Check for slim.
Include slim_{export,import}.h as needed; mark all symbols __external_linkage.
Include slim_internal.h; mark all symbols __internal_linkage. Provide slim_hidden_proto symbols as needed.
Provide slim_hidden_def symbols as needed.
Mark static. (cairo_traps_add_trap_from_points): Likewise.
2003-07-31 22:41:44 +00:00
Carl Worth
e97cfd5eae Made all changes necessary to abandon the Xc library, (sucking the functionality up into cairo_surface_t instead). Eliminated most of the remaining X datatypes (XFixed, XPointFixed, XLineFixed, XTrapezoid). Fixed some numerical problems relating to pen initialization and intersection calculation. 2003-07-30 08:30:50 +00:00
Carl Worth
91739aa148 Fix error correction on intersection test to avoid needless spinning. 2003-07-25 13:29:07 +00:00
Carl Worth
cf24f32a51 Massive cleanup of polygon tessellation 2003-07-24 01:40:16 +00:00
Carl Worth
ee146c4740 Introduced cairo_fixed_*_t types. Converted several functions from floating to fixed point. 2003-07-23 21:20:24 +00:00
Carl Worth
6ef8b5cdf4 Better fix for the previous bug. More complete and more efficient. 2003-07-19 14:02:43 +00:00
Carl Worth
92284e4ac8 Fixed polygon tesselattion for some cases of incorrect sorting when two intersections are very near the same vertical position. 2003-07-19 05:19:32 +00:00
Carl Worth
dc1e96ae35 Renamed everything from Xr* to cairo_* 2003-07-18 11:34:19 +00:00
Renamed from src/xrtraps.c (Browse further)