head 1.58; access; symbols RELEASE_1_0_2:1.58 BRANCH_1_0:1.58.0.4 RELEASE_1_0_0:1.58 BRANCH_SCALED_GLYPH:1.58.0.2 RELEASE_0_9_2:1.58 RELEASE_0_9_0:1.58 SNAPSHOT_0_6_0:1.56 SNAPSHOT_0_5_2:1.56 SNAPSHOT_0_5_1:1.56 SNAPSHOT_0_5_0:1.51 SNAPSHOT_0_4_0:1.32 SNAPSHOT_0_3_0:1.28 SNAPSHOT_0_2_0:1.23 LGPL_CHANGE_AFTER:1.22 LGPL_CHANGE_BEFORE:1.22 SNAPSHOT_0_1_23:1.22 SNAPSHOT_0_1_22:1.20 SNAPSHOT_0_1_21:1.20 SNAPSHOT_0_1_20:1.20 SNAPSHOT_0_1_16:1.14; locks; strict; comment @# @; 1.58 date 2005.08.09.01.35.22; author vektor; state Exp; branches; next 1.57; commitid 20ac42f8079c4567; 1.57 date 2005.08.06.23.57.14; author cworth; state Exp; branches; next 1.56; commitid 25d542f54e574567; 1.56 date 2005.06.17.17.48.47; author krh; state Exp; branches; next 1.55; commitid 637142b30cf64567; 1.55 date 2005.06.15.23.52.11; author cworth; state Exp; branches; next 1.54; commitid 28f942b0bf294567; 1.54 date 2005.06.15.17.54.00; author cworth; state Exp; branches; next 1.53; commitid 4fb142b06b364567; 1.53 date 2005.06.10.20.19.45; author cworth; state Exp; branches; next 1.52; commitid 7fbb42a9f5df4567; 1.52 date 2005.05.22.16.08.23; author cworth; state Exp; branches; next 1.51; commitid 3a74290ae754567; 1.51 date 2005.05.06.20.42.45; author cworth; state Exp; branches; next 1.50; commitid 5f1b427bd6c14567; 1.50 date 2005.05.03.15.16.47; author cworth; state Exp; branches; next 1.49; commitid 415a427795da4567; 1.49 date 2005.04.28.20.41.00; author otaylor; state Exp; branches; next 1.48; commitid cd642714a584567; 1.48 date 2005.04.26.20.05.51; author cworth; state Exp; branches; next 1.47; commitid 24b1426e9f184567; 1.47 date 2005.04.26.19.38.06; author cworth; state Exp; branches; next 1.46; commitid 1a30426e98924567; 1.46 date 2005.04.19.13.38.07; author cworth; state Exp; branches; next 1.45; 1.45 date 2005.04.14.22.02.47; author cworth; state Exp; branches; next 1.44; 1.44 date 2005.04.13.20.01.54; author cworth; state Exp; branches; next 1.43; 1.43 date 2005.04.08.20.44.22; author cworth; state Exp; branches; next 1.42; 1.42 date 2005.04.07.17.01.49; author cworth; state Exp; branches; next 1.41; 1.41 date 2005.04.04.16.25.47; author cworth; state Exp; branches; next 1.40; 1.40 date 2005.04.02.02.00.00; author cworth; state Exp; branches; next 1.39; 1.39 date 2005.03.28.22.06.40; author cworth; state Exp; branches; next 1.38; 1.38 date 2005.03.23.22.02.36; author cworth; state Exp; branches; next 1.37; 1.37 date 2005.03.18.22.31.11; author cworth; state Exp; branches; next 1.36; 1.36 date 2005.03.18.19.15.25; author cworth; state Exp; branches; next 1.35; 1.35 date 2005.03.10.17.02.41; author cworth; state Exp; branches; next 1.34; 1.34 date 2005.03.09.21.56.37; author cworth; state Exp; branches; next 1.33; 1.33 date 2005.03.09.20.53.01; author cworth; state Exp; branches; next 1.32; 1.32 date 2005.03.01.23.04.48; author cworth; state Exp; branches; next 1.31; 1.31 date 2005.02.25.22.06.19; author cworth; state Exp; branches; next 1.30; 1.30 date 2005.02.24.16.07.39; author cworth; state Exp; branches; next 1.29; 1.29 date 2005.02.23.22.56.55; author cworth; state Exp; branches; next 1.28; 1.28 date 2005.01.12.22.40.14; author cworth; state Exp; branches; next 1.27; 1.27 date 2005.01.07.05.28.07; author cworth; state Exp; branches; next 1.26; 1.26 date 2005.01.06.18.28.10; author cworth; state Exp; branches; next 1.25; 1.25 date 2005.01.06.16.51.48; author cworth; state Exp; branches; next 1.24; 1.24 date 2004.12.23.21.49.56; author cworth; state Exp; branches; next 1.23; 1.23 date 2004.10.21.15.55.46; author cworth; state Exp; branches; next 1.22; 1.22 date 2004.05.08.01.52.01; author cworth; state Exp; branches; next 1.21; 1.21 date 2004.04.29.14.26.53; author cworth; state Exp; branches; next 1.20; 1.20 date 2004.04.02.16.01.09; author cworth; state Exp; branches; next 1.19; 1.19 date 2004.03.31.01.24.29; author cworth; state Exp; branches; next 1.18; 1.18 date 2004.02.26.16.54.42; author cworth; state Exp; branches; next 1.17; 1.17 date 2004.02.24.18.45.26; author cworth; state Exp; branches; next 1.16; 1.16 date 2004.02.13.14.13.19; author cworth; state Exp; branches; next 1.15; 1.15 date 2003.12.16.14.15.53; author cworth; state Exp; branches; next 1.14; 1.14 date 2003.12.01.18.59.57; author keithp; state Exp; branches; next 1.13; 1.13 date 2003.11.17.15.04.16; author cworth; state Exp; branches; next 1.12; 1.12 date 2003.11.10.16.16.34; author cworth; state Exp; branches; next 1.11; 1.11 date 2003.11.04.16.36.03; author cworth; state Exp; branches; next 1.10; 1.10 date 2003.10.23.14.51.41; author cworth; state Exp; branches; next 1.9; 1.9 date 2003.10.01.01.56.22; author jamey; state Exp; branches; next 1.8; 1.8 date 2003.09.29.18.55.56; author cworth; state Exp; branches; next 1.7; 1.7 date 2003.09.29.15.36.29; author cworth; state Exp; branches; next 1.6; 1.6 date 2003.09.17.15.48.41; author cworth; state Exp; branches; next 1.5; 1.5 date 2003.09.17.15.41.30; author cworth; state Exp; branches; next 1.4; 1.4 date 2003.09.15.14.55.10; author cworth; state Exp; branches; next 1.3; 1.3 date 2003.09.12.17.53.04; author cworth; state Exp; branches; next 1.2; 1.2 date 2002.12.03.20.37.59; author cworth; state Exp; branches; next 1.1; 1.1 date 2002.10.26.15.00.39; author cworth; state Exp; branches; next ; desc @@ 1.58 log @ reviewed by: cworth, otaylor * src/cairo.c: (cairo_set_antialias), (cairo_get_antialias): * src/cairo.h: Add a new API for disabling antialiasing of shapes drawn by cairo. This is a hint and is not supported by all backends. * src/cairoint.h: * src/cairo-gstate-private.h: * src/cairo-gstate.c: (_cairo_gstate_init), (_composite_traps_draw_func), (_cairo_surface_clip_and_composite_trapezoids), (_cairo_gstate_clip_and_composite_trapezoids), (_cairo_gstate_clip), (_cairo_gstate_set_antialias), (_cairo_gstate_get_antialias): Store the antialiasing mode in the gstate and pass it to the backend for trapezoid rendering and for clipping. * src/cairo-clip-private.h: * src/cairo-clip.c: (_cairo_clip_intersect_path), (_cairo_clip_intersect_mask), (_cairo_clip_clip): Pass the antialiasing parameter down to the backend where appropriate. * src/cairo-surface.c: (_fallback_composite_trapezoids), (_cairo_surface_composite_trapezoids), (_cairo_surface_reset_clip), (_cairo_surface_intersect_clip_path), (_cairo_surface_set_clip_path_recursive), (_cairo_surface_set_clip_path): Pass the antialiasing parameter down to the backend where appropriate. * src/cairo-image-surface.c: (_cairo_image_surface_composite_trapezoids): Add support for A1 format trapezoid rendering, and remove the _create_mask_image function, creating a temporary image from memory we allocate and clear. * src/cairo-xcb-surface.c: (_cairo_xcb_surface_composite_trapezoids): Support A1 masks to disable antialiasing using the RENDER extension when requested. * src/cairo-xlib-surface.c: (_create_trapezoid_mask), (_cairo_xlib_surface_composite_trapezoids): Support A1 masks to disable antialiasing using the RENDER extension when requested. * src/cairo-meta-surface-private.h: * src/cairo-meta-surface.c: (_cairo_meta_surface_composite_trapezoids), (_cairo_meta_surface_intersect_clip_path), (_cairo_meta_surface_replay): Blindly pass through the antialising parameter. * src/cairo-glitz-surface.c: (_cairo_glitz_surface_composite_trapezoids): * src/cairo-pdf-surface.c: (_cairo_pdf_surface_composite_trapezoids), (_cairo_pdf_surface_intersect_clip_path): * src/cairo-ps-surface.c: (_cairo_ps_surface_composite_trapezoids), (_cairo_ps_surface_intersect_clip_path), (_ps_output_composite_trapezoids), (_ps_output_intersect_clip_path): Add the antialiasing parameter but don't support it. * test/Makefile.am: * test/unantialiased-shapes-ref.png: * test/unantialiased-shapes.c: (big_star_path), (draw), (main): Add a test case and a reference image from the latest libpixman. * doc/public/tmpl/cairo-font.sgml: * doc/public/tmpl/cairo.sgml: * doc/public/cairo-sections.txt: Add the new antialiasing disabling API to the docs. * TODO: Update progress on a parameter to disable antialiasing. @ text @Changes that are expected to impact the public API ================================================== Patch submitted to mailing list? / Documentation included in patch? |/ Review of patch completed? ||/ Test case included? |||/ Committed. ||||/ Backwards compatible (API additions only) ----------------------------------------- cairo_begin_group, cairo_end_group, cairo_get_group PDR C cairo_surface_mark_dirty (see below for details) PDRTC Add support for non-antialiased rendering + API Add CAIRO_FILL_RULE_INVERSE_WINDING and CAIRO_FILL_RULE_INVERSE_EVEN_ODD Add cairo_text_glyphs (see below for details) Add support for programmatic patterns, (ie. arbitrary gradients) P Add cairo_arc_to. Add support for custom caps (see below for details) Add support for getting at image data from image surface Add CAIRO_STATUS_DESTROYED Add cairo_finish Backwards incompatible (API deletions or changes) ------------------------------------------------- PDR C cairo_surface_finish, cairo_surface_flush PDR C A hidden offset for the xlib backend PDR C Consistent error handling for all objects PDRTC Split cairo_format_t (see below for details) P---C Remove cairo_status_string in favor of cairo_status_to_string Details on some of the above changes ------------------------------------ * cairo_text_glyphs: It would function as a sort of bridge between the toy and the real text APIs: > void > cairo_text_glyphs (cairo_t *cr, const unsigned char *utf8, > cairo_glyph_t *glyphs, int *num_glyphs); > > with num_glyphs as an input-output parameter. The behavior of this > function would be such that calling: > > cairo_text_glyphs (cr, string, glyphs, &num_glyphs); > cairo_show_glyphs (cr, glyphs, num_glyphs); > > would be equivalent too: > > cairo_show_text (cr, string); > > as long as the original size of glyphs/num_glyphs was large > enough. * support for custom caps: It would be nice if the user had a mechanism to reliably draw custom caps. One approach here would be to provide the coordinates of the butt cap faces so that the user can append seamless caps to the current path. We may also need to provide the coordinates of the faces of every dash as well. Changes that do not affect the public API ========================================= * Fix clipping to work for all operators. The equation we have come up with is: ((src Op dest) In clip) Add (dest Out clip) * Change stroke code to go through one giant polygon. This will fix problems with stroking self-intersecting paths. * Fix the intersection problem, (see reference to Hobby's paper mentioned in cairo_traps.c). * Implement dashing for cairo_curve_to. * Stroking closed, degenerate paths should still draw caps. Round caps are easy; square should probably draw an axis-aligned square. * Should add geometry pruning as appropriate. * Verification, profiling, optimization. centi_unfinished.svg may provide a good test case. @ 1.57 log @ 2005-08-06 Carl Worth * BUGS: Remove several bugs that have been fixed. * ROADMAP: Slip group support off of the 1.0 roadmap. Update status of clipping work which otaylor is working on. * TODO: Update for progress on cairo_surface_mark_dirty (committed), non-antialiased rendering (patch), cairo_arc_to (patch), consistent error handling (committed), cairo_content_t (committed). Remove details for some completed items. * src/cairo-gstate.c (_cairo_gstate_set_font_face): Don't crash if font_face is NULL, (this is a documented mechanism for returning to the default font_face). @ text @d14 1 a14 1 PDR Add support for non-antialiased rendering. API ? @ 1.56 log @2005-06-17 Kristian Høgsberg * TODO: Remove the path clipping entry from the list. @ text @d13 2 a14 2 cairo_surface_mark_dirty (see below for details) Add support for non-antialiased rendering. API ? d18 1 a18 1 Add cairo_arc_to. d28 2 a29 2 P Consistent error handling for all objects Split cairo_format_t (see below for details) a33 17 * cairo_surface_mark_dirty One question is what the function should accept. A single device-space rectangle seems like a consistent approach. That would allow us to avoid needing backend-specific functions with backend-specific region datatypes, (cf. clipping support) In order to get the intended efficiency benefits, we'll need to make two changes: 1) In the fallback code, never fetch any data from the clean region. 2) Mark clean any region drawn with device-pixel aligned rectangles, (cairo_paint with no clip is the most iportant one here). a63 32 * split cairo_format_t into two things: - An enumeration that determines the "capabilities" of a surface - A vs. ARGB. vs. RGB - An enumeration that determines a specific in-memory representation of data. (A1/A8/ARGB32/etc.. Could be extensible to things like RGBA32_BYTES_NONPREMULTIPLIED. Some consistent naming convention would be be good.) One issue here is that some interfaces, like cairo_surface_create_similar() might be useful with either one. We might want to create an A1 surface compatible with the backend (are there examples other than A1? Should bilevel just be another "capability"?), or we might want to just create an alpha surface without caring about the depth. If we want to support this, we could do something like: typedef enum cairo_pixel_format_t { CAIRO_PIXEL_FORMAT_A8 = CAIRO_FORMAT_ALPHA, CAIRO_PIXEL_FORMAT_RGB24 = CAIRO_FORMAT_RGB, CAIRO_PIXEL_FORMAT_A1, }; To allow passing either in. (I don't particularly like this idea for create_similar() because then you aren't really saying ALPHA-dont-care, you are saying ALPHA-8. I think it would be better to have a separate path for create_similar_with_pixel_format() if we need that. But it might be useful for cairo_image_surface_create() ... people are going to screw up and pass CAIRO_FORMAT_RGB into that, and if it "just worked" that would save people trouble....) a65 3 * Clean up the cache code a bit, (there is at least one redundant level of cacheing, and there are some minor style issues). a70 3 * Make a more interesting PS backend, (other than the current "giant-image for every page" approach). @ 1.55 log @ * TODO: Add CAIRO_STATUS_DESTROYED to TODO list. * ROADMAP: Note progress on consistent error handling. * src/cairo-surface.c: Fix typo in documentation comment for _cairo_surface_get_current_clip_serial. @ text @a128 3 * Re-work the backend clipping interface to use geometry rather than images, (krh has posted a patch for this) @ 1.54 log @ * TODO: Add cairo_finish to TODO list. Note that cairo_satus_string has now been removed. @ text @d21 1 @ 1.53 log @ * TODO: Big cleanup to remove finished items. Also, split the file up to separate TODO items that affect the API from items that do not. @ text @d21 1 d29 1 a29 1 Remove cairo_status_string in favor of cairo_status_to_string ? @ 1.52 log @ * TODO: Not that a patch has been submitted for consistent error handling. * src/cairo.c: Fix documentation string for cairo_create so that it might actualyl appear in the manual. @ text @d1 3 a3 2 API Shakeup planning -------------------- d10 2 a11 2 New functionality (more-or-less) -------------------------------- d13 8 a20 2 cairo__surface_mark_dirty P Consistent error handling for all objects d22 2 a23 6 Somewhat backwards-compatible changes ----------------------------------- PDRTC user data (was Re: [cairo] Patch improving fallbacks) PDRTC setters and getters PDRTC cairo_output_stream_t and cairo_surface_finish() PDRTC cairo_current_path -> cairo_copy_path_data a24 9 PDRTC Abbreviation hunt: cairo_init_clip and cairo_concat_matrix PDRTC Renaming the terms of the rendering equation PDRTC default matrix PDRTC cairo_paint PDRTC Making set_source consistent PDRTC cairo_stroke_path -> cairo_stroke_to_path PDRTC cairo_current_matrix PDRTC cairo_mask PDRTC cairo_fill_preserve, cairo_stroke_preserve, cairo_clip_preserve d26 12 d39 2 a40 7 Backwards incompatible ---------------------- PDRTC Simplifying the operator set PDRTC cairo_create and eliminating cairo_set_target_surface PDRTC Eliminating cairo_copy PDRTC Eliminating cairo_surface_set_repeat/matrix/filter PDRTC Eliminating cairo_show_surface d42 2 a43 1 * Add support for non-antialiased rendering. API ? d45 5 a49 2 * Clean up the cache code a bit, (there is at least one redundant level of cacheing, and there are some minor style issues). d51 2 a52 1 * Add CAIRO_FILL_RULE_INVERSE_WINDING and CAIRO_FILL_RULE_INVERSE_EVEN_ODD d54 18 a71 2 * Fix clipping to work for all operators. The equation we have come up with is: d73 5 a77 1 ((src Op dest) In clip) Add (dest Out clip) d79 1 a79 1 * Split cairo_format_t into two things: d111 9 a119 1 * Clean up the API in preparation for freezing and release. d122 1 a122 3 "giant-image for every page" approach). * Figure out what to do with DPI for image/png backends. d125 1 a125 1 problems with stroking self-intersecting paths. d128 1 a128 1 images. d131 1 a131 21 mentioned in cairo_traps.c). * Add a new cairo_text_glyphs function (a sort of bridge between the toy and the real text API): > void > cairo_text_glyphs (cairo_t *cr, const unsigned char *utf8, > cairo_glyph_t *glyphs, int *num_glyphs); > > with num_glyphs as an input-output parameter. The behavior of this > function would be such that calling: > > cairo_text_glyphs (cr, string, glyphs, &num_glyphs); > cairo_show_glyphs (cr, glyphs, num_glyphs); > > would be equivalent too: > > cairo_show_text (cr, string); > > as long as the original size of glyphs/num_glyphs was large > enough. a134 5 * Implement support for programmatic patterns, (ie. figure out how to do gradients the Right Way). * Implement cairo_arc_to. a137 6 * It would be nice if the user had a mechanism to reliably draw custom caps. One approach here would be to provide the coordinates of the butt cap faces so that the user can append seamless caps to the current path. We may also need to provide the coordinates of the faces of every dash as well. a139 28 * We need a way to get at the image data after something like cairo_surface_create_similar with the image backend. * Three suggestions from Owen that will help GTK+ performance: - The ability have an additional rectangle-list clip in the Xlib surface. Frequently during an expose event, GTK+ is drawing L shaped areas XXXXXX X..... X..... And passing the real clip to the server is going to save a lot of pixel operations that will be thrown away. - The ability to pass in a width/height to cairo_xlib_surface_create() to avoid a round-trip. (Round-trips are bad to the point where querying the the server is something you don't want to do in production software) - More of a future thing, the ability to hint to to cairo that the contents of the Xlib surface passed to cairo_xlib_surface_create() are a solid fill ... this is very much the normal case for GTK+ usage and allows for big optimization in the no-RENDER case. (see http://mail.gnome.org/archives/gtk-devel-list/2003-March/msg00045.html a142 4 * Implement copy-on-write regions in pixman as a more complete solution than the BAD_NESTING stuff to Owen's "Clip region problems" thread. @ 1.51 log @ * ROADMAP: Note that cairo_mask, and "just eliminate a bunch of functions are now done". * TODO: Note that all backwards-compatible and backwards-incompatible cahnges for the API Shakeup are now done. Sort "new functionality" of API Shakeup into its own category. @ text @d13 1 a13 1 Consistent error handling for all objects @ 1.50 log @ * TODO: Add suggestion for copy-on-write regions to fix clip region problems. * src/Makefile.am (install-data-local): Fix check for old headers to respect DESTDIR, (to work better when cross-compiling, etc.). Thanks to Luke-Jr . @ text @d9 6 d19 1 a19 1 PDR C cairo_output_stream_t and cairo_surface_finish() d22 3 a24 3 PDR C Abbreviation hunt: cairo_init_clip and cairo_concat_matrix ----- Renaming the terms of the rendering equation PDR C default matrix a25 1 cairo_begin_group, cairo_end_group, cairo_get_group d27 1 a27 1 ----- cairo_stroke_path -> cairo_stroke_to_path d29 1 a29 2 cairo_mask cairo_create and eliminating cairo_set_target_surface a30 1 cairo__surface_mark_dirty a31 2 Simplifying the operator set Consistent error handling for all objects d35 5 a39 3 Eliminating cairo_copy Eliminating cairo_surface_set_repeat/matrix/filter Eliminating cairo_show_surface @ 1.49 log @2005-04-28 Owen Taylor * TODO, ROADMAP: Add a item about reworking cairo_format_t. @ text @d167 4 @ 1.48 log @ * ROADMAP: * TODO: Note that cairo_paint and cairo_clip/fill/stroke_preserve are all done now. @ text @d50 32 @ 1.47 log @ Originally: 2005-04-19 Carl Worth * src/cairo.h: Add cairo_stroke_preserve, cairo_fill_preserve, and cairo_clip_preserve. * src/cairoint.h: * src/cairo-gstate-private.h: * src/cairo-gstate.c: Rip the path out of cairo_gstate_t. * src/cairo-private.h: Add path to cairo_t. * src/cairo.c: Bring in most of the path code that used to live in cairo-gstate.c * src/Makefile.am: * src/cairo-arc-private.h: * src/cairo-arc.c: Move arc generation code into its own file. * src/cairo-path-data-private.h: * src/cairo-path-data.c: Accept path+ctm_inverse+tolerance instead of gstate. Absorb flattening and device space->user space conversion that used to be in _cairo_gstate_intepret_path. * src/cairo-path.c: Prefer cairo_fixed_t parameters over ciaro_point_t for cross-file interfaces. * src/cairo-ft-font.c: Track changes in _cairo_path_fixed interfaces. * test/fill-and-stroke.c: (draw): Port to use cairo_fill_preserve rather than cairo_save/cairo_restore which no longer work for saving the path. * test/get-and-set.c: (settings_set), (settings_get), (settings_equal): Remove get and set of current point since it is no longer affected by cairo_save and cairo_restore. Add get and set testing for cairo_matrix_t. @ text @d19 1 a19 1 PD T cairo_paint @ 1.46 log @ * TODO: Update API Shakeup chart to indicate that cairo_paint and cairo_fill_preserve patches have been sent. @ text @d26 1 a26 1 PD T cairo_fill_preserve, cairo_stroke_preserve, cairo_clip_preserve @ 1.45 log @ * TODO: Update API Shakeup chart to indicate that cairo_set_source is done. @ text @d19 1 a19 1 cairo_paint d26 1 a26 1 cairo_fill_preserve, cairo_stroke_preserve, cairo_clip_preserve @ 1.44 log @Fix typo @ text @d21 1 a21 1 Making set_source consistent @ 1.43 log @ * ROADMAP: Add ROADMAP file with an initial stab at 1.0 items. @ text @d9 1 a9 1 Somwhat backwards-compatible changes @ 1.42 log @ * src/cairo.h: Rework the cairo_matrix_t interface in several ways. Expose a struct for cairo_matrix_t. Add new function to return current matrix: cairo_get_matrix Deprecate the following functions (in documentation): cairo_matrix_create cairo_matrix_destroy cairo_matrix_get_affine Rename: cairo_matrix_set_affine -> cairo_matrix_init cairo_matrix_set_identity -> cairo_matrix_init_identity Add other new matrix initialization functions: cairo_matrix_init_translate cairo_matrix_init_scale cairo_matrix_init_rotate Change return type of almost all cairo_matrix functions from cairo_status_t to void. * src/cairo-atsui-font.c: * src/cairo-ft-font.c: * src/cairo-gstate.c: * src/cairo-image-surface.c: * src/cairo-matrix.c: * src/cairo-pattern.c: * src/cairo-pdf-surface.c: * src/cairo-pen.c: * src/cairo-surface.c: * src/cairo-win32-font.c: * src/cairo-xlib-surface.c: * src/cairo.c: * src/cairoint.h: Track changes to cairo_matrix_t interface. * test/.cvsignore: * test/Makefile.am: * test/transforms-ref.png: * test/transforms.c: Add a test case showing the same path drawn under various transforms, (including skews set directly by initializing a cairo_matrix_t). @ text @d16 1 a16 1 PD C Abbreviation hunt: cairo_init_clip and cairo_concat_matrix d18 1 a18 1 PD default matrix d23 1 a23 1 PD T cairo_current_matrix d28 1 a28 1 A hidden offset for the xlib backend @ 1.41 log @ * TODO: Remove items for PNG backend removal and trapezoid reasterization re-implementation since they have been completed. @ text @d23 1 a23 1 cairo_current_matrix @ 1.40 log @ * TODO: Update API shakeup chart. * src/cairo.h: * src/cairo.c: (cairo_set_target_image_no_data): Add a standin for the function that should be cairo_set_target_image which should then have some other name. We can straighten that mess out when we eliminate the set_target functions. Add deprecation alias for cairo_current_pattern. * src/cairoint.h: * src/cairo-image-surface.c: * src/cairo-surface.c: Deprecate cairo_surface_create_for_image in favor of cairo_image_surface_create_for_data. @ text @a49 3 * Replace PNG backend with an image_surface function to save a PNG image. a92 3 * Re-implement the trapezoid rasterization algorithm according to the new "specification". @ 1.39 log @ * TODO: Sorted API shakeup chart. @ text @d18 1 a18 1 Making set_source consistent d21 2 a22 2 cairo_stroke_path -> cairo_stroke_to_path default matrix @ 1.38 log @ * TODO: More updates to the API Shakeup chart. @ text @d9 2 d12 7 d20 3 a22 1 PDRTC setters and getters a23 3 Renaming the terms of the rendering equation Making set_source consistent Eliminating cairo_show_surface a24 2 cairo_begin_group, cairo_end_group, cairo_get_group PDR C cairo_output_stream_t and cairo_surface_finish() a26 3 default matrix PDRTC cairo_current_path -> cairo_copy_path_data PDR C cairo_surface_finish, cairo_surface_flush a27 2 Eliminating cairo_copy Eliminating cairo_surface_set_repeat/matrix/filter a28 1 cairo_stroke_path -> cairo_stroke_to_path a29 1 PD C Abbreviation hunt: cairo_init_clip and cairo_concat_matrix d32 6 @ 1.37 log @ * TODO: Update API shakeup chart. @ text @d18 1 a18 1 PDR cairo_output_stream_t and cairo_surface_finish() d30 1 a30 1 PD Abbreviation hunt: cairo_init_clip and cairo_concat_matrix @ 1.36 log @ * src/Makefile.am (libcairo_la_SOURCES): Remove unused libcairo_freetype_sources (thanks to Damien Carbery). Closes bug #2673. @ text @d22 2 a23 2 cairo_current_path -> cairo_copy_path_data cairo_surface_finish, cairo_surface_flush d30 1 a30 1 Abbreviation hunt: cairo_init_clip and cairo_concat_matrix @ 1.35 log @ * TODO: API Shakeup status update. @ text @d6 1 a6 1 ||/ Test case added? @ 1.34 log @ fix typos. @ text @d4 6 a9 5 / Review of patch completed? |/ Test case added? ||/ Committed. |||/ PR user data (was Re: [cairo] Patch improving fallbacks) d11 1 a11 1 PR C setters and getters d18 1 a18 1 PR cairo_output_stream_t and cairo_surface_finish() @ 1.33 log @ * TODO: Update API Shakeup planning chart. @ text @d3 2 a4 2 Patch exists for functionality? / Review completed for patch? d6 1 a6 1 ||/ Commited. d17 1 a17 1 P R cairo_output_stream_t and cairo_surface_finish() @ 1.32 log @ * TODO: Note that cairo_output_stream_t patch has been reviewed. @ text @d1 30 a30 26 API Shakeup work ---------------- Patch? Reviewed? yes yes user data (was Re: [cairo] Patch improving fallbacks) cairo_paint yes yes setters and getters cairo_current_matrix Renaming the terms of the rendering equation Making set_source consistent Eliminating cairo_show_surface cairo_mask cairo_begin_group, cairo_end_group, cairo_get_group yes yes cairo_output_stream_t and cairo_surface_finish() cairo_create and eliminating cairo_set_target_surface cairo_fill_preserve, cairo_stroke_preserve, cairo_clip_preserve default matrix cairo_current_path -> cairo_copy_path_data cairo_surface_finish, cairo_surface_flush cairo__surface_mark_dirty Eliminating cairo_copy Eliminating cairo_surface_set_repeat/matrix/filter A hidden offset for the xlib backend cairo_stroke_path -> cairo_stroke_to_path Simplifying the operator set Abbreviation hunt: cairo_init_clip and cairo_concat_matrix Consistent error handling for all objects @ 1.31 log @ * TODO: Note that "user data" and "setters and getters" patches have been reviewed. Remove a few more TODO notes: cleanup cairo_snippets: DONE cairo_surface_finish: Now in API Shakeup snapping code: Decided against this @ text @d13 1 a13 1 yes cairo_output_stream_t and cairo_surface_finish() @ 1.30 log @ * TODO: Remove many TODO items that have now been absorbed by the API shakeup. Remove comparison with PostScript as there's nothing interesting there left unimplemented, (and cairo is already establishing its own conventions in naming and behavior that deviate from PostScript). @ text @d4 1 a4 1 yes user data (was Re: [cairo] Patch improving fallbacks) d6 1 a6 1 yes setters and getters a29 9 * Cleanup cairo_snippets so they operate in a more default cairo environment, (particularly with a default CTM). * Add one of cairo_surface_finish/_finalize/_close to resolve the "reference counting vs garbage collection" thread. * Shove experimental snapping code from libsvg-cairo down int cairo proper. @ 1.29 log @ * TODO: Add entries from API Shakeup. @ text @a41 3 * Implement the parallel install stuff, (most importantly, push cairo.h down into into one directory below $(includedir)). a43 2 * Simplifying the operator set? a48 15 * Resolve the rest of the rendering equation. We need a fundamental equation upon which more convenient operations are based, (at least formally). Some of the common operations that should be convenient: * display surface * display surface multiplied by constant alpha * display pattern masked by surface So this involves deciding whether to expose a new mask object in the graphics state, and deciding exactly what set_alpha means. It almost certainly means adding cairo_show_surface_mask. * Implement a hidden transform, (as per the result of the hidden offset thread on the mailing list). a53 2 * Implement a PDF backend. a61 3 * Implement cairo_stroke_path, (very easy to do after the above change is done). a94 11 * Fix support for old X servers so that it is not swamped with image transport. The key idea is to assume that nothing external to cairo will be drawing to the same drawable after it is handed to cairo. Beyond that, we might actually provide support for cooperating with external entities by adding one or more of the following functions: cairo_flush cairo_erase cairo_mark_dirty a139 131 A comparison with PostScript ============================ Here's a list of several classes of PostScript operators indicating which operators have rough equivalents in cairo and which do not. In general, the name of a cairo function corresponding to a PostScript operator can be obtained by inserting a '_' between each word and prefixing it with "cairo_". For example, "cairo_move_to" corresponds to the PostScript "moveto". In cases where the name of the cairo function deviates from this convention, or when the behavior of the cairo function is significantly different, the change is noted in parentheses below. This list is not exhaustive, (there are definitely some minor (major?) semantic deviations that are not noted below). Also, this list is almost certainly out of date with respect to the current cairo implementation. Caveat lector. Operators that are not yet in cairo, but probably should be: arcto, strokepath, rectclip?, clipsave/restore?, setstrokeadjust?, currentdash, grestoreall?, initgraphics?, currentgstate?, setgstate?, erasepage?, setsmoothness? Painting operators ------------------ in cairo: stroke, fill, eofill (set_fill_rule/fill), image (show_surface) not in cairo: erasepage, rectstroke, rectfill, shfill, colorimage, imagemask Path construction operators --------------------------- in cairo: arc, arcn (arc_negative), newpath, moveto, rmoveto (rel_move_to), lineto, rlineto (rel_line_to), curveto, rcurveto (rel_curve_to), closepath, currentpoint, charpath (text_path), pathforall (current_path), flattenpath (current_path_flat) not in cairo: arct, arcto, reversepath, strokepath, clippath, pathbbox Clipping -------- in cairo: clip, eoclip (set_fill_rule/clip) not in cairo: initclip, rectclip, clipsave, cliprestore Graphics state operators ------------------------ in cairo: setlinewidth, currentlinewidth, setlinecap, currentlinecap, setlinejoin, currentlinejoin, setmiterlimit, currentmiterlimit, setdash not in cairo: setstrokeadjust, currentstrokeadjust, currentdash Color specification operators ----------------------------- in cairo: setrgbcolor, currentcolor not in cairo: setcolor, setgray, currentgray, currentrgbcolor, sethsbcolor, currenthsbcolor, setcmykcolor, currentcmykcolor, setcolorspace, currentcolorspace Form and pattern operators -------------------------- in cairo: setpattern, makepattern (lock_pattern) not in cairo: execform Whole-state manipulation ------------------------ in cairo: gsave (save), grestore (restore) not in cairo: grestoreall, initgraphics, gstate, currentgstate, setgstate Coordinate system and matrix operators -------------------------------------- in cairo: identmatrix (identity_matrix), initmatrix (default_matrix), setmatrix, translate, scale, rotate, concatmatrix, currentmatrix, transform (transform_point), dtransform (transform_distance) not in cairo: matrix, defaultmatrix, concat, itransform, idtransform, invertmatrix Insideness testing ------------------ in cairo: infill, instroke, ineofill (set_fill_rule/in_fill) not in cairo: inufill, inustroke, inueofill Device setup ------------ in cairo: showpage, copypage not in cairo: setpagedevice, currentpagedevice, nulldevice Glyph and font operators ------------------------ in cairo: currentfont, definefont (font_create_for_ft_face), undefine_font (font_destroy), findfont (font_create), makefont (transform_font), setfont, scalefont, selectfont, show (show_text), stringwidth (x/y in text_extents), xyshow (glyph_show -- but ignoring current_point and using absolute positions) not in cairo, (and likely not needed): composefont, rootfont, ashow, widthshow, awidthshow, xshow, xyshow, yshow, glyphshow, cshow, kshow, FontDirectory, GlobalFontDirectory, StandardEncoding, ISOLatin1Encoding, findencoding, setcachedevice, setcachedevice2, setcharwidth Graphics state operators (device-dependent) ------------------------------------------- in cairo: setflat (set_tolerance), currentflat (current_tolerance) not in cairo: sethalftone, currenthalftone, setscreen, currentscreen, setcolorscreen, currentcolorscreen, settransfer, currenttransfer, setcolortransfer, currentcolortransfer, setblackgeneration, currentblackgeneration, setundercolorremoval, currentundercolorremoval, setcolorrendering, currentcolorrendering, setoverprint, currentoverprint, setsmoothness, currentsmoothness PostScript operators never to be in cairo ----------------------------------------- Operator Stack Manipulation Operators, Arithmetic and Math Operators, Array Operators, Packed Array Operators, Dictionary Operators, String Operators, Rational,Boolean,and Bitwise Operators, Control Operators, Type,Attribute,and Conversion Operators, File Operators, Resource Operators, Virtual Memory Operators, Miscellaneous Operators, Interpreter Parameter Operators, Errors, User Path Operators @ 1.28 log @ * src/cairo.c (cairo_sane_state): A NULL cairo_t * is not sane. * cairo.pc.in (Libs,Cflags): Add freetype flags so that things work with freetype in a non-standard location, (a little extra work here since freetype doesn't use pkg-config). * TODO: Add several items culled from recent mailing list discussions. * BUGS: Add bugs on cache locking and surface pattern scaling. @ text @d1 27 @ 1.27 log @ * TODO: Add Owen's new equation to fix clipping: ((src Op dest) In clip) Add (dest Out clip) @ text @d1 21 @ 1.26 log @ Added cairo_show_surface_mask and note about clipping problems. @ text @d1 2 a2 2 * Add cairo_show_surface_mask, and make everything respect current alpha. This means the equation should be something like: d4 1 a4 1 ((PATTERN IN ALPHA) IN (SHAPE IN CLIP)) OP DEST d6 11 a16 5 Except where IN may not be the right operator for clipping for some choices of OP. * Fix the rendering equation (or implementation) so that clipping works as expected. @ 1.25 log @ * TODO: Added some TODO items from mailing list traffic. @ text @d1 14 @ 1.24 log @ * src/cairo_traps.c: Remove unused CAIRO_TRAPS_GROWTH_INC. * src/cairo_spline.c (_cairo_spline_add_point): * src/cairo_polygon.c (_cairo_polygon_add_edge): Resize arrays by doubling rather than by linear increments. * BUGS: Add new bug exposed centi_unfinished.svg. @ text @d1 3 d75 2 d80 25 @ 1.23 log @ * TODO: Add items on custom caps and getting access to hidden image data @ text @d77 2 @ 1.22 log @ * src/cairo_ft_font.c (_utf8_to_ucs4): Bail on NULL utf8 string. * src/cairo_spline.c (_cairo_spline_add_point): Don't add two consecutive, identical points when decomposing the spline, (which was leading to an infinte loop in the stroke algorithm when it found a slope of (0,0)). @ text @d61 1 a61 1 new "specification". d64 10 a73 1 caps are easy; square should probably draw an axis aligned square. @ 1.21 log @Added a BUG and a TODO item @ text @d63 2 a64 2 * Stroking degenerate paths should still draw caps. Round caps are easy; square should probably draw an axis aligned square. @ 1.20 log @ * src/cairo.h: Move weight after slant to match the order in cairo_select_font. * TODO: Added notes on DPI for image-based backends and on proposal for new cairo_text_glyphs function. * BUGS: Added BUG about cairo_show_text not advancing the current point. @ text @d16 3 @ 1.19 log @ * src/cairo.h: Add proposal for cairo_xlib_surface_set_size. * BUGS: Added note about problem with cairo_scale_font. @ text @d8 2 d19 20 @ 1.18 log @ * AUTHORS: Add Jordi and Olvier to the AUTHORS file. * src/cairo_ft_font.c (_utf8_to_ucs4): Fix broken return value for nchars (thanks to Jordi Mas ). @ text @d22 1 a22 1 * Implement cairo_stroke_path and cairo_arc_to. d24 6 a29 3 * Investigate what needs to be done so that old X servers aren't swamped with image transport. This may involve adding one or more of the following functions: @ 1.17 log @ * AUTHORS: Add attribution for many people who have made generous contributions to cairo. This list was generated by sifting through the ChangeLog. Please let me know if I have missed anyone. * NEWS: Add some historical notes on cairo development, prior to when we began to maintain this NEWS file. * README (http): Add pointer to cairographics.org. Fix to use cairo rather than Cairo when not at the beginning of a sentence. * TODO: Remove cairo_current_path, cairo_current_path_flat, cairo_text_extents, cairo_glyph_extents, cairo_text_path, and cairo_glyph_path from the TODO list as they have all been implemented now. @ text @d76 2 a77 1 (rel_curve_to), closepath, currentpoint, charpath (text_path) d79 1 a79 2 not in cairo: arct, arcto, flattenpath, reversepath, strokepath, clippath, pathbbox, pathforall @ 1.16 log @ * TODO: Add some notes from JG's TODO list on the wiki: http://cairographics.org/CairoToDoList. (Also testing automated mailing to cairo-commit list). @ text @a2 2 * Add cairo_current_path and cairo_current_path_flat. d22 1 a22 2 * Implement cairo_text_extents, cairo_glyph_extents, cairo_text_path, cairo_glyph_path, and cairo_stroke_path, cairo_arc_to. @ 1.15 log @ * TODO: Change instances of Cairo to cairo where necessary. Add note about broken dashing on splines. @ text @d1 9 d21 2 a22 1 * Implement support for programmatic patterns. @ 1.14 log @ * TODO: Add note about degenerate path caps being broken @ text @d10 2 d37 2 a38 2 which operators have rough equivalents in Cairo and which do not. In general, the name of a Cairo function corresponding to a PostScript d43 2 a44 2 In cases where the name of the Cairo function deviates from this convention, or when the behavior of the Cairo function is d49 1 a49 1 almost certainly out of date with respect to the current Cairo d52 1 a52 1 Oerators that are not yet in Cairo, but probably should be: arcto, d59 1 a59 1 in Cairo: stroke, fill, eofill (set_fill_rule/fill), image d62 1 a62 1 not in Cairo: erasepage, rectstroke, rectfill, shfill, colorimage, d67 1 a67 1 in Cairo: arc, arcn (arc_negative), newpath, moveto, rmoveto d71 1 a71 1 not in Cairo: arct, arcto, flattenpath, reversepath, strokepath, d76 1 a76 1 in Cairo: clip, eoclip (set_fill_rule/clip) d78 1 a78 1 not in Cairo: initclip, rectclip, clipsave, cliprestore d82 1 a82 1 in Cairo: setlinewidth, currentlinewidth, setlinecap, currentlinecap, d86 1 a86 1 not in Cairo: setstrokeadjust, currentstrokeadjust, currentdash d90 1 a90 1 in Cairo: setrgbcolor, currentcolor d92 1 a92 1 not in Cairo: setcolor, setgray, currentgray, currentrgbcolor, d98 1 a98 1 in Cairo: setpattern, makepattern (lock_pattern) d100 1 a100 1 not in Cairo: execform d104 1 a104 1 in Cairo: gsave (save), grestore (restore) d106 1 a106 1 not in Cairo: grestoreall, initgraphics, gstate, currentgstate, d111 1 a111 1 in Cairo: identmatrix (identity_matrix), initmatrix (default_matrix), d115 1 a115 1 not in Cairo: matrix, defaultmatrix, concat, itransform, idtransform, d120 1 a120 1 in Cairo: infill, instroke, ineofill (set_fill_rule/in_fill) d122 1 a122 1 not in Cairo: inufill, inustroke, inueofill d126 1 a126 1 in Cairo: showpage, copypage d128 1 a128 1 not in Cairo: setpagedevice, currentpagedevice, nulldevice d132 1 a132 1 in Cairo: currentfont, definefont (font_create_for_ft_face), d138 1 a138 1 not in Cairo, (and likely not needed): composefont, rootfont, ashow, d146 1 a146 1 in Cairo: setflat (set_tolerance), currentflat (current_tolerance) d148 1 a148 1 not in Cairo: sethalftone, currenthalftone, setscreen, currentscreen, d155 1 a155 1 PostScript operators never to be in Cairo @ 1.13 log @ * Remove infinite looping when stroking with a line width at or close to 0.0. Thanks to Rob Buis and Noah Levitt for providing in-the-wild examples of SVG files with stroke-width:0 that demonstrated the problem, (cowboy.svg and albania.svg). * src/cairo_pen.c (_cairo_pen_stroke_spline): Do nothing if the pen is a degenerate, single point. This happens when the line width is a very small, non-zero value. * src/cairo_gstate.c (_cairo_gstate_stroke): Do nothing when asked to stroke a path with a line_width of 0.0. Previously, this would lead to an infinite loop. * src/cairo.c (cairo_set_line_width): Force negative line width to 0.0. * TODO: Updated TODO list. @ text @d26 3 @ 1.12 log @ * configure.in: Fix typo (thanks to John Ellson ) * TODO: Add TODO items for intersection problem, programmatic patterns, missing text functions. @ text @d1 6 d8 1 a8 1 mentioned in cairo_traps.c) d10 1 a10 1 * Implement support for programmatic patterns d15 3 a17 1 * Add a few new, needed functions? a22 2 * Verification, profiling, optimization. d26 2 @ 1.11 log @TODO: Note that cairo_show_page, cairo_copy_page, PostScript backend, real text API, and text support for the image backend have now all been implemented. @ text @d1 9 a9 1 * Add a few new, needed functions: a14 2 * Re-implement pattern support with a more PostScript-like API. d42 1 a42 1 insideness testing?, erasepage?, setsmoothness? d107 3 a109 2 not in Cairo: infill, instroke, inufill, inustroke, ineofill, inueofill @ 1.10 log @Updated TODO file @ text @a0 2 * Write a PostScript backend. a2 2 cairo_show_page cairo_copy_page a6 4 * Add a "real" text API in addition to the current "toy" API. * Implement text support for the image backend. d36 1 a36 1 insideness testing?, showpage, copypage?, erasepage?, setsmoothness? d106 3 a108 2 not in Cairo: showpage, copypage, setpagedevice, currentpagedevice, nulldevice @ 1.9 log @Virtualized the font and surface backend implementations. @ text @d1 10 d19 3 d41 4 a44 5 Oerators that are not yet in Cairo, but probably should be: arc, arcto, strokepath, user path operators, rectclip?, clipsave/restore?, setstrokeadjust?, currentdash, grestoreall?, initgraphics?, currentgstate?, setgstate?, insideness testing?, showpage, copypage?, erasepage?, setsmoothness? d56 6 a61 11 in Cairo: newpath, moveto, rmoveto (rel_move_to), lineto, rlineto (rel_line_to), curveto, rcurveto (rel_curve_to), closepath, currentpoint, charpath (text_path) not in Cairo: arc, arcn, arct, arcto, flattenpath, reversepath, strokepath, clippath, pathbbox, pathforall User path operators ------------------- not in Cairo: ustroke, ufill, ueofill, uappend, upath, ustrokepath, setbbox, ucache d149 1 a149 1 Interpreter Parameter Operators, Errors @ 1.8 log @Bugfix from Graydon Hoare. @ text @a6 3 * Virtualize the backend interface so that the various backends can be compiled conditionally. @ 1.7 log @Added cairo_arc and cairo_arc_negative. @ text @a4 2 * Add arc support. a11 82 Some notes on arc support ========================= Some general notions -------------------- This is from "Approximation of circular arcs by cubic poynomials", Michael Goldapp, Computer Aided Geometric Design 8 (1991) 227-238. To draw a unit arc from 0 to A with 0 < A < pi/2: Y | . | / . | / . |/A . +------.-- X 0 1 The deviation in radius is given by: rho(t) = sqrt ( x^2(t) + y^2(t) ) - 1 A simpler error function to work with is: e(t) = x^2(t) + y^2(t) - 1 And from "Good approximation of circles by curvature-continuous Bezier curves", Tor Dokken and Morten Daehlen, Computer Aided Geometric Design 8 (1990) 22-41, we learn: e(t) ~ 2 abs( rho(t) ) Continuing with Goldapp's analysis, a single cubic Bezier spline approximation must have the 4 control points: (1, 0) (1, h) (cos(A) + h * sin(A), sin(A) - h * cos(A)) (cos(A), sin(A)) Various approximations can be determined by selecting the value of h. A convenient value, (though not optimal in terms of error), is: h = 4/3 * tan(A/4) From which we can determine the maximum error: abs( max(e(t)) ) = 4/27 * (sin^6 (A/4)) / (cos^2 (A/4)) t in [0,1] ----- Now, for Cairo we want to draw an arc of radius R from an angle A to an angle B, (where B > A). So the equations above have trivial modifications: The spline control points become (R * cos(A), R * sin(A)) (R * cos(A) - h * sin(A), R * sin(A) + h * cos (A)) (R * cos(B) + h * sin(B), R * sin(B) - h * cos (B)) (R * cos(B), R * sin(B)) where h = 4/3 * R * tan ((B-A)/4) And the maximum deviation in radius is approximately: 2/27 * (sin^6 ((B-A)/4) / cos^2 ((B-A)/4)) So now we can get down to writing some C code: double _arc_error_normalized (double angle) { return 2/27 * pow (sin (angle / 4), 6) / pow (cos (angle / 4), 2); } And for accurate drawing the following must hold in device space: tolerance/radius >= _arc_error_normalized (B-A) @ 1.6 log @Updated description of PostScript comparison @ text @a13 1 d15 1 a15 1 ------------------------- d17 4 a20 2 "Approximation of circular arcs by cubic poynomials", Michael Goldapp, Computer Aided Geometric Design 8 (1991) 227-238. d41 5 a45 1 And from Dokken[cite]: e(t) ~ 2 abs( rho(t) ) d47 2 a48 1 A single cubic Bezier spline approximation must have the 4 control points: d64 32 a95 1 a229 1 @ 1.5 log @Added "A comparison with PostScript" to TODO @ text @d61 1 d63 14 a76 1 which operators have equivalents in Cairo and which do not. If the Cairo @ 1.4 log @Fix for invalid restore from keithp. Began adding notes on arc support. @ text @d59 121 @ 1.3 log @Added a few items to BUGS/TODO @ text @d13 46 @ 1.2 log @Fixed holes in self-intersecting splines, (from change to winding rule parameter interface) @ text @d1 1 a1 51 * Add text support. For reference, here are the text-related PS operators: Probably needed --------------- charpath findfont setfont show scalefont transformfont (not in postscript) Perhaps needed? =============== Relative Offsets ---------------- ashow show with x/y displacement added to each character widthshow show with x/y displacement added to specified character awidthshow same as ashow plus widthshow glyphshow show with name-based rather than encoded lookup of glyph cshow show with a callback for drawing each glyph kshow show with a callback between drawing each glyph Absolute offsets ---------------- xyshow show with array of x/y displacements substituted xshow same as xyshow with y==0 yshow same as xyshow with x==0 rootfont currentfont stringwidth Probably not needed ------------------- definefont composefont undefinefont makefont selectfont FontDirectory GlobalFontDirectory StandardEncoding ISOLatin1Encoding findencoding setcachedevice setcachedevice2 setcharwidth d3 1 d5 1 d7 1 d9 2 d12 1 @ 1.1 log @Added TODO, README, and .cvsignore @ text @d14 4 a17 1 --------------- d20 3 a22 1 xyshow show with array of x/y displacements substituted d26 4 a29 1 awidthshow same as ashow plus widthshow @