cairo/src
Chris Wilson ab23c29953 [tessellator] Direct comparison of result in edges_compare_x_for_y.
We need to compare the x-coordinate of a line at a for a particular y,
without loss of precision.

The x-coordinate along an edge for a given y is:
  X = A_x + (Y - A_y) * A_dx / A_dy

So the inequality we wish to test is:
  A_x + (Y - A_y) * A_dx / A_dy -?- B_x + (Y - B_y) * B_dx / B_dy,
where -?- is our inequality operator.

By construction we know that A_dy and B_dy (and (Y - A_y), (Y - B_y)) are
all positive, so we can rearrange it thus without causing a sign
change:
  A_dy * B_dy * (A_x - B_x) -?- (Y - B_y) * B_dx * A_dy
                                - (Y - A_y) * A_dx * B_dy

Given the assumption that all the deltas fit within 32 bits, we can compute
this comparison directly using 128 bit arithmetic.
2008-10-04 10:12:37 +01:00
..
.gitignore [Makefile.am] Only rerun headers-standalone if a header file has changed 2008-09-30 11:11:47 +01:00
cairo-analysis-surface-private.h [analysis] Merge two analysis status codes. 2008-09-26 13:42:28 +01:00
cairo-analysis-surface.c [analysis] Merge two analysis status codes. 2008-09-26 13:42:28 +01:00
cairo-arc-private.h Add cairo_private to several function prototypes that were missing it. 2005-08-09 13:01:14 +00:00
cairo-arc.c Remove some bogus XXX marks 2008-05-28 19:10:09 -04:00
cairo-array.c Fix newly detected doc syntax issues 2008-06-01 18:46:45 -04:00
cairo-atomic-private.h Make sure feature macros are checked using #if, not #ifdef; add a test for it 2008-09-20 17:20:36 -04:00
cairo-atomic.c Make sure feature macros are checked using #if, not #ifdef; add a test for it 2008-09-20 17:20:36 -04:00
cairo-base85-stream.c Fix now-detected doc formatting issues 2008-06-01 19:14:13 -04:00
cairo-bentley-ottmann.c [tessellator] Direct comparison of result in edges_compare_x_for_y. 2008-10-04 10:12:37 +01:00
cairo-beos-surface.cpp Fix now-detected doc formatting issues 2008-06-01 19:14:13 -04:00
cairo-beos.h Use #include "cairo-*." instead of #include <cairo-*.h> 2008-06-23 00:30:04 -04:00
cairo-cache-private.h [doc] Stricter syntax check for type names, update test 2008-01-28 22:10:20 -05:00
cairo-cache.c [cairo-cache] Fixup doc comment. 2008-08-17 12:13:59 +01:00
cairo-cff-subset.c Revamp the build system. 2008-09-02 20:24:08 -04:00
cairo-clip-private.h Revamp the build system. 2008-09-02 20:24:08 -04:00
cairo-clip.c Allow cloning sub-regions of similar surfaces. 2008-09-27 02:20:42 +01:00
cairo-color.c [cairo-color] Only compare the shorts for equality. 2007-05-05 12:33:29 +01:00
cairo-compiler-private.h Make sure (and check) that all private headers include some cairo header first 2008-09-19 17:19:10 -04:00
cairo-debug.c Rename _cairo_font_reset_static_data to _cairo_font_face_reset_static_data 2008-06-22 15:15:44 -04:00
cairo-deflate-stream.c Fix now-detected doc formatting issues 2008-06-01 19:14:13 -04:00
cairo-deprecated.h [cairo-deprecated.h] Remove mention of cairoint.h from public header 2008-05-09 15:54:10 +02:00
cairo-directfb-surface.c clone_similar(): s/device_offset/clone_offset/ 2008-09-27 17:27:21 +01:00
cairo-directfb.h Make sure feature macros are checked using #if, not #ifdef; add a test for it 2008-09-20 17:20:36 -04:00
cairo-features-uninstalled.pc.in Build -uninstalled.pc files 2008-09-11 00:38:30 -04:00
cairo-features.pc.in More fixes for pkgconfig files 2008-09-10 12:41:57 -04:00
cairo-fixed-private.h [cairo-fixed] Implement _cairo_fixed_mul_div() 2008-05-15 20:02:33 -04:00
cairo-fixed-type-private.h Change cairo's fixed-point format from 16.16 to 24.8 2008-02-27 15:08:18 -08:00
cairo-fixed.c [fixpt] Make fixed point methods static inline and generic 2007-07-18 22:45:21 +02:00
cairo-font-face-twin-data.c [twin-font] Clean up font data by joining lines and closing paths 2008-09-25 19:25:11 -04:00
cairo-font-face-twin.c [twin-font] Adjust ascent/descent 2008-09-26 10:04:36 -04:00
cairo-font-face.c Add slim markers to make check-plt.sh happy 2008-09-26 11:07:10 -04:00
cairo-font-options.c Remove all lcd_filter code. 2008-09-25 13:31:20 -07:00
cairo-freelist-private.h Revamp the build system. 2008-09-02 20:24:08 -04:00
cairo-freelist.c [src] Make sure all source files #include "cairoint.h" as their first include 2007-04-03 20:28:11 -04:00
cairo-ft-font.c Remove all lcd_filter code. 2008-09-25 13:31:20 -07:00
cairo-ft-private.h Use #include "cairo-*." instead of #include <cairo-*.h> 2008-06-23 00:30:04 -04:00
cairo-ft.h Use #include "cairo-*." instead of #include <cairo-*.h> 2008-06-23 00:30:04 -04:00
cairo-glitz-private.h [slim] hide cairo_glitz_surface_create() (#8551) 2006-10-08 17:07:17 -04:00
cairo-glitz-surface.c [glitz] Compile fix for typo. 2008-09-29 08:30:25 +01:00
cairo-glitz.h Use #include "cairo-*." instead of #include <cairo-*.h> 2008-06-23 00:30:04 -04:00
cairo-gstate-private.h Remove include of cairoint.h from *-private.h header files. 2007-08-23 16:13:04 -07:00
cairo-gstate.c Actually remove cairo_has_show_text_glyphs 2008-09-25 15:56:57 -07:00
cairo-hash-private.h Move GCC attributes wrapping into a separate header. 2007-09-25 16:29:54 +01:00
cairo-hash.c Fix newly detected doc syntax issues 2008-06-01 18:46:45 -04:00
cairo-hull.c [cairo-hull] Attempt to allocate vertices on stack. 2008-06-13 21:34:41 +01:00
cairo-image-surface.c clone_similar(): s/device_offset/clone_offset/ 2008-09-27 17:27:21 +01:00
cairo-lzw.c [src/check-doc-syntax.sh] Fix some bugs in the check and fix errors found 2008-05-09 15:54:04 +02:00
cairo-malloc-private.h [malloc] Check for integer overflow when realloc'ing. 2007-10-04 00:42:29 +01:00
cairo-matrix.c [pattern] Improve handling of filter radius and optimize when possible. 2008-09-29 09:46:50 +01:00
cairo-meta-surface-private.h [show_text_glyphs] Replace the bool backward with cairo_text_cluster_flags 2008-09-18 00:26:07 -04:00
cairo-meta-surface.c [show_text_glyphs] Replace the bool backward with cairo_text_cluster_flags 2008-09-18 00:26:07 -04:00
cairo-misc.c [show_text_glyphs] Replace the bool backward with cairo_text_cluster_flags 2008-09-18 00:26:07 -04:00
cairo-mutex-impl-private.h [mutex] Fix typo in comments 2008-09-23 19:11:31 -04:00
cairo-mutex-list-private.h Make sure feature macros are checked using #if, not #ifdef; add a test for it 2008-09-20 17:20:36 -04:00
cairo-mutex-private.h [cairo-mutex] Move semicolons out of cairo-mutex-list-private.h 2008-09-19 18:45:44 -04:00
cairo-mutex-type-private.h Revamp the build system. 2008-09-02 20:24:08 -04:00
cairo-mutex.c [cairo-mutex] Move semicolons out of cairo-mutex-list-private.h 2008-09-19 18:45:44 -04:00
cairo-os2-private.h Make sure (and check) that all private headers include some cairo header first 2008-09-19 17:19:10 -04:00
cairo-os2-surface.c Make checks happy again 2008-09-20 18:35:10 -04:00
cairo-os2.h Use #include "cairo-*." instead of #include <cairo-*.h> 2008-06-23 00:30:04 -04:00
cairo-output-stream-private.h Mark private symbol so 2008-09-11 04:23:05 -04:00
cairo-output-stream.c Add null output stream 2008-09-11 08:37:30 +09:30
cairo-paginated-private.h Add paginated surface backend function _set_fallback_images_required 2008-07-08 21:12:54 +09:30
cairo-paginated-surface-private.h Remove include of cairoint.h from *-private.h header files. 2007-08-23 16:13:04 -07:00
cairo-paginated-surface.c [paginated] Set paginated mode before every replay. 2008-09-28 16:57:42 +01:00
cairo-path-bounds.c [cairo-path-bounds] _cairo_path_fixed_bounds() can fail... 2008-02-27 09:47:35 +00:00
cairo-path-fill.c [fill] Check for the most common rectilinear case first. 2008-09-23 23:55:38 +01:00
cairo-path-fixed-private.h Revamp the build system. 2008-09-02 20:24:08 -04:00
cairo-path-fixed.c Fix now-detected doc formatting issues 2008-06-01 19:14:13 -04:00
cairo-path-private.h [cairo-path] Make _cairo_path_nil static. 2007-10-30 10:58:16 +00:00
cairo-path-stroke.c [stroke] Cap trailing segment when skipping invisible segments. 2008-09-24 18:41:24 +01:00
cairo-path.c [doc] Replace 'NOTE' by 'Note' and add it to test 2008-01-28 21:53:44 -05:00
cairo-pattern.c [pattern] Fix up OBO introduced to cloned area 2008-09-29 18:00:57 +01:00
cairo-pdf-operators-private.h [show_text_glyphs] Replace the bool backward with cairo_text_cluster_flags 2008-09-18 00:26:07 -04:00
cairo-pdf-operators.c [pdf] Propagate status 2008-09-26 13:42:28 +01:00
cairo-pdf-surface-private.h [show_text_glyphs] Replace the bool backward with cairo_text_cluster_flags 2008-09-18 00:26:07 -04:00
cairo-pdf-surface.c [analysis] Merge two analysis status codes. 2008-09-26 13:42:28 +01:00
cairo-pdf.h Use #include "cairo-*." instead of #include <cairo-*.h> 2008-06-23 00:30:04 -04:00
cairo-pen.c [matrix] Prefer a return parameter for _compute_determinant(). 2008-08-08 09:11:10 +01:00
cairo-png.c Eliminate paranoid check for PNG_INTERLACE_NONE. 2008-09-24 21:55:53 -07:00
cairo-polygon.c [polygon] Reduce number of branches. 2008-09-18 09:06:29 +01:00
cairo-private.h [cairo] Cache freed gstates. 2008-06-13 21:34:41 +01:00
cairo-ps-surface-private.h [ps] Use a color_t rather than open-code. 2008-09-06 09:10:30 +01:00
cairo-ps-surface.c [ps] Silence compiler warning. 2008-09-17 22:25:16 +01:00
cairo-ps.h Use #include "cairo-*." instead of #include <cairo-*.h> 2008-06-23 00:30:04 -04:00
cairo-quartz-font.c Rename _cairo_matrix_compute_scale_factors to _cairo_matrix_compute_basis_scale_factors 2008-08-27 20:08:49 -04:00
cairo-quartz-image-surface.c [quartz] move _cairo_quartz_create_cgimage to cairo-quartz-surface.c 2008-09-03 15:34:40 -07:00
cairo-quartz-image.h Use #include "cairo-*." instead of #include <cairo-*.h> 2008-06-23 00:30:04 -04:00
cairo-quartz-private.h Make sure feature macros are checked using #if, not #ifdef; add a test for it 2008-09-20 17:20:36 -04:00
cairo-quartz-surface.c clone_similar(): s/device_offset/clone_offset/ 2008-09-27 17:27:21 +01:00
cairo-quartz.h Make sure feature macros are checked using #if, not #ifdef; add a test for it 2008-09-20 17:20:36 -04:00
cairo-rectangle.c [cairo-rectangle] Add new convenience functions for working with cairo_box_t 2008-05-09 15:54:11 +02:00
cairo-reference-count-private.h Make sure (and check) that all private headers include some cairo header first 2008-09-19 17:19:10 -04:00
cairo-region-private.h Make sure (and check) that all private headers include some cairo header first 2008-09-19 17:19:10 -04:00
cairo-region.c Use 32 bit pixman regions for cairo_region_t 2008-06-10 18:09:00 -04:00
cairo-scaled-font-private.h [cairo-scaled-font] Clean up recent locking changes 2008-05-25 01:51:05 -04:00
cairo-scaled-font-subsets-private.h Put user fonts in a separate subset 2008-09-11 08:37:02 +09:30
cairo-scaled-font-subsets.c Replace two boolean args with one enum arg 2008-09-23 22:38:55 +09:30
cairo-scaled-font.c [text_to_glyphs] Further enhance the docs 2008-09-29 11:34:19 -04:00
cairo-skiplist-private.h [cairo-skiplist] Use one random number per insertion, instead of two 2007-04-09 19:39:50 -04:00
cairo-skiplist.c [cairo-error] Clean up all the warnings and missing _cairo_error() calls. 2007-10-04 13:31:44 +01:00
cairo-slope.c Simple perf tweaks for a rectilinear Hilbert curve. 2008-09-19 14:31:33 +01:00
cairo-spline.c [cairo-spline] Eliminate redundant _cairo_fixed_to_double(). 2007-11-01 22:42:34 +00:00
cairo-stroke-style.c Do correct calculation of pen dimensions for stroke optimization 2008-02-06 13:07:13 -08:00
cairo-surface-fallback-private.h clone_similar(): s/device_offset/clone_offset/ 2008-09-27 17:27:21 +01:00
cairo-surface-fallback.c clone_similar(): s/device_offset/clone_offset/ 2008-09-27 17:27:21 +01:00
cairo-surface-private.h [cairo-atomic] Rewrite reference counting using atomic ops. 2007-09-25 16:29:54 +01:00
cairo-surface.c Clean up compile warnings. 2008-09-29 16:40:28 +01:00
cairo-svg-surface-private.h Remove include of cairoint.h from *-private.h header files. 2007-08-23 16:13:04 -07:00
cairo-svg-surface.c Clean up compile warnings. 2008-09-29 16:40:28 +01:00
cairo-svg.h Use #include "cairo-*." instead of #include <cairo-*.h> 2008-06-23 00:30:04 -04:00
cairo-system.c [cairo.h] Don't define cairo_public to __declspec(dllimport) for static build 2008-09-26 13:27:42 -04:00
cairo-traps.c [traps] Discard trivially empty trapezoid. 2008-10-04 10:12:37 +01:00
cairo-truetype-subset-private.h Revamp the build system. 2008-09-02 20:24:08 -04:00
cairo-truetype-subset.c [scaled-fonts] Cleanup a couple of valgrind warnings. 2008-09-03 16:33:49 +01:00
cairo-type1-fallback.c Revamp the build system. 2008-09-02 20:24:08 -04:00
cairo-type1-private.h Revamp the build system. 2008-09-02 20:24:08 -04:00
cairo-type1-subset.c [type1] Allocate the temporary subsetter on the stack. 2008-09-06 08:14:43 +01:00
cairo-type3-glyph-surface-private.h Enable show_glyphs inside of in user-font glyphs 2008-09-11 08:41:39 +09:30
cairo-type3-glyph-surface.c Fix bitmap-font XFAIL 2008-09-26 20:26:55 +09:30
cairo-types-private.h Remove all lcd_filter code. 2008-09-25 13:31:20 -07:00
cairo-unicode.c [unicode] Add _cairo_utf8_get_char_validated() 2008-08-08 03:01:16 -04:00
cairo-uninstalled.pc.in Build -uninstalled.pc files 2008-09-11 00:38:30 -04:00
cairo-user-font-private.h Revamp the build system. 2008-09-02 20:24:08 -04:00
cairo-user-font.c [text_to_glyphs] Further enhance the docs 2008-09-29 11:34:19 -04:00
cairo-version.c Some nasty tracks to make changing version number not cause a total rebuild 2008-08-28 18:18:23 -04:00
cairo-version.h Some nasty tracks to make changing version number not cause a total rebuild 2008-08-28 18:18:23 -04:00
cairo-wideint-private.h [tessellator] Direct comparison of result in edges_compare_x_for_y. 2008-10-04 10:12:37 +01:00
cairo-wideint-type-private.h Make sure (and check) that all private headers include some cairo header first 2008-09-19 17:19:10 -04:00
cairo-wideint.c cairo-wideint: Fix to eliminate comparison of signed and unsigned values 2007-01-20 02:01:29 -08:00
cairo-win32-font.c Rename _cairo_matrix_compute_scale_factors to _cairo_matrix_compute_basis_scale_factors 2008-08-27 20:08:49 -04:00
cairo-win32-printing-surface.c [pattern] Remove the hack to support cloning surface patterns. 2008-09-29 09:46:49 +01:00
cairo-win32-private.h clone_similar(): s/device_offset/clone_offset/ 2008-09-27 17:27:21 +01:00
cairo-win32-surface.c clone_similar(): s/device_offset/clone_offset/ 2008-09-27 17:27:21 +01:00
cairo-win32.h Make sure feature macros are checked using #if, not #ifdef; add a test for it 2008-09-20 17:20:36 -04:00
cairo-xcb-surface.c [xcb] Return false from _cairo_xcb_surface_is_similar(). 2008-10-04 08:16:45 +01:00
cairo-xcb-xrender.h Use #include "cairo-*." instead of #include <cairo-*.h> 2008-06-23 00:30:04 -04:00
cairo-xcb.h Use #include "cairo-*." instead of #include <cairo-*.h> 2008-06-23 00:30:04 -04:00
cairo-xlib-display.c [xlib] Keep a pointer to the cairo_xlib_display_t on the surface. 2008-09-02 10:49:12 +01:00
cairo-xlib-private.h [xlib] Keep a pointer to the cairo_xlib_display_t on the surface. 2008-09-02 10:49:12 +01:00
cairo-xlib-screen.c Remove all lcd_filter code. 2008-09-25 13:31:20 -07:00
cairo-xlib-surface-private.h [xlib] Keep a pointer to the cairo_xlib_display_t on the surface. 2008-09-02 10:49:12 +01:00
cairo-xlib-surface.c [xlib] Share the common conditions for starting a new xGlyphElt using a macro. 2008-10-04 10:10:52 +01:00
cairo-xlib-visual.c [xlib] Implement dithering 2008-06-19 21:54:23 -04:00
cairo-xlib-xrender-private.h Revamp the build system. 2008-09-02 20:24:08 -04:00
cairo-xlib-xrender.h Use #include "cairo-*." instead of #include <cairo-*.h> 2008-06-23 00:30:04 -04:00
cairo-xlib.h Use #include "cairo-*." instead of #include <cairo-*.h> 2008-06-23 00:30:04 -04:00
cairo.c Add slim markers to make check-plt.sh happy 2008-09-26 11:07:10 -04:00
cairo.h [text_to_glyphs] Further enhance the docs 2008-09-29 11:34:19 -04:00
cairo.pc.in Improve backend .pc files generation: 2006-07-12 04:27:55 -04:00
cairoint.h [pattern] Improve handling of filter radius and optimize when possible. 2008-09-29 09:46:50 +01:00
check-def.sh [check-*.sh] Redirect error reports to stderr 2008-09-26 11:08:22 -04:00
check-doc-syntax.sh [check-*.sh] Redirect error reports to stderr 2008-09-26 11:08:22 -04:00
check-has-hidden-symbols.c [check] Move the hidden symbol check into check-{def,plt}.sh 2008-01-11 21:21:34 +00:00
check-headers.sh [check-*.sh] Redirect error reports to stderr 2008-09-26 11:08:22 -04:00
check-link.c [src/check-link.c] Simple test to check we can link to the built cairo.so 2008-09-02 21:31:43 -04:00
check-plt.sh [check-*.sh] Redirect error reports to stderr 2008-09-26 11:08:22 -04:00
check-preprocessor-syntax.sh [check-*.sh] Redirect error reports to stderr 2008-09-26 11:08:22 -04:00
Makefile.am [Makefile.win32] Add makefile rules to generate cairo-features.h 2008-09-22 23:41:07 -04:00
Makefile.am.analysis [Makefile.am] Only rerun headers-standalone if a header file has changed 2008-09-30 11:11:47 +01:00
Makefile.sources Fix residues of the Makefile.*.config Makefile.*.features renaming 2008-09-29 11:49:50 -04:00
Makefile.win32 [win32] Use -MDd and -LDd instead of -MD and -LD for debug build 2008-10-04 00:35:43 -04:00
README [src/README] s/Source.mk/Makefile.sources/ 2008-09-15 14:50:29 -04:00
test-fallback-surface.c clone_similar(): s/device_offset/clone_offset/ 2008-09-27 17:27:21 +01:00
test-fallback-surface.h [test-surfaces] Prefix public symbols with _cairo 2007-03-13 05:14:19 -04:00
test-meta-surface.c [test-meta] Use real meta-surface snapshot. 2008-09-23 23:35:53 +01:00
test-meta-surface.h [test-surfaces] Prefix public symbols with _cairo 2007-03-13 05:14:19 -04:00
test-paginated-surface.c [show_text_glyphs] Replace the bool backward with cairo_text_cluster_flags 2008-09-18 00:26:07 -04:00
test-paginated-surface.h [test-surfaces] Prefix public symbols with _cairo 2007-03-13 05:14:19 -04:00

Cairo Library Source Code
=========================

This directory contains the source code to the cairo library.


Source Code Listing
-------------------

The canonical list of source files is the file Makefile.sources.  See that
file for how it works.


New Backends
------------

The rule of the thumb for adding new backends is to see how other
backends are integrated.  Pick one of the simpler, unsupported, backends
and search the entire tree for it, and go from there.

To add new backends you need to basically:

  * Modify $(top_srcdir)/configure.in to add checks for your backend.

  * Modify Makefile.sources to add source files for your backend,

  * Modify $(top_srcdir)/boilerplate/ to add boilerplate code for
    testing your new backend.


New API
-------

After adding new API, run "make check" in this directory and fix any
reported issues.  Also add new API to the right location in
$(top_srcdir)/doc/public/cairo-sections.txt and run "make check"
in $(top_builddir)/doc/public to make sure that any newly added
documentation is correctly hooked up.

Do not forget to add tests for the new API.  See next section.


Tests
-----

There are some tests in this directory that check the source code and
the build for various issues.  The tests are very quick to run, and
particularly should be run after any documentation or API changes.  It
does not hurt to run them after any source modification either.  Run
them simply by calling:

	make check

There are also extensive regression tests in $(top_srcdir)/test.  It is
a good idea to run that test suite for any changes made to the source
code.  Moreover, for any new feature, API, or bug fix, new tests should
be added to the regression test suite to test the new code.


Bibliography
------------

A detailed list of academic publications used in cairo code is availagle
in the file $(top_srcdir)/BIBLIOGRAPHY.  Feel free to update as you
implement more papers.

For more technical publications (eg. Adobe technical reports) just
point them out in a comment in the header of the file implementing them.