summaryrefslogtreecommitdiff
path: root/TODO
diff options
context:
space:
mode:
authorCarl Worth <cworth@cworth.org>2005-06-10 13:19:45 +0000
committerCarl Worth <cworth@cworth.org>2005-06-10 13:19:45 +0000
commit2a1c88064508938124c0700b8939303c579df188 (patch)
treec61f5493a9290b424c93bf088fd581e798f14622 /TODO
parent6cd484a4c0d6a6a67c1922746a2c21b5f46bff38 (diff)
Big cleanup to remove finished items. Also, split the file up to separate TODO items that affect the API from items that do not.
Diffstat (limited to 'TODO')
-rw-r--r--TODO183
1 files changed, 76 insertions, 107 deletions
diff --git a/TODO b/TODO
index b0afea6b..3cf285e7 100644
--- a/TODO
+++ b/TODO
@@ -1,56 +1,82 @@
-API Shakeup planning
---------------------
+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.
||||/
-New functionality (more-or-less)
---------------------------------
+Backwards compatible (API additions only)
+-----------------------------------------
cairo_begin_group, cairo_end_group, cairo_get_group
- cairo_<device>_surface_mark_dirty
-P Consistent error handling for all objects
-
-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
+ cairo_surface_mark_dirty (see below for details)
+ 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)
+ Add cairo_arc_to.
+ Add support for custom caps (see below for details)
+ Add support for getting at image data from image surface
+
+Backwards incompatible (API deletions or changes)
+-------------------------------------------------
PDR C cairo_surface_finish, cairo_surface_flush
-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
PDR C A hidden offset for the xlib backend
+P Consistent error handling for all objects
+ Split cairo_format_t (see below for details)
+ Remove cairo_status_string in favor of cairo_status_to_string ?
-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
+Details on some of the above changes
+------------------------------------
+* cairo_surface_mark_dirty
-* Add support for non-antialiased rendering. API ?
+ 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)
-* Clean up the cache code a bit, (there is at least one redundant
- level of cacheing, and there are some minor style issues).
+ In order to get the intended efficiency benefits, we'll need to make
+ two changes:
-* Add CAIRO_FILL_RULE_INVERSE_WINDING and CAIRO_FILL_RULE_INVERSE_EVEN_ODD
+ 1) In the fallback code, never fetch any data from the clean
+ region.
-* Fix clipping to work for all operators. The equation we have come up
- with is:
+ 2) Mark clean any region drawn with device-pixel aligned
+ rectangles, (cairo_paint with no clip is the most iportant
+ one here).
- ((src Op dest) In clip) Add (dest Out clip)
+* cairo_text_glyphs:
-* Split cairo_format_t into two things:
+ 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.
+
+* split cairo_format_t into two things:
- An enumeration that determines the "capabilities" of a surface -
A vs. ARGB. vs. RGB
@@ -82,92 +108,35 @@ PDRTC Eliminating cairo_show_surface
people are going to screw up and pass CAIRO_FORMAT_RGB into that, and if it
"just worked" that would save people trouble....)
-* Clean up the API in preparation for freezing and release.
+Changes that do not affect the public API
+=========================================
+* Clean up the cache code a bit, (there is at least one redundant
+ level of cacheing, and there are some minor style issues).
-* Make a more interesting PS backend, (other than the current
-"giant-image for every page" approach).
+* Fix clipping to work for all operators. The equation we have come up
+ with is:
-* Figure out what to do with DPI for image/png backends.
+ ((src Op dest) In clip) Add (dest Out clip)
+
+* Make a more interesting PS backend, (other than the current
+ "giant-image for every page" approach).
* Change stroke code to go through one giant polygon. This will fix
-problems with stroking self-intersecting paths.
+ problems with stroking self-intersecting paths.
* Re-work the backend clipping interface to use geometry rather than
-images.
+ images, (krh has posted a patch for this)
* Fix the intersection problem, (see reference to Hobby's paper
-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.
+ mentioned in cairo_traps.c).
* Implement dashing for cairo_curve_to.
-* Implement support for programmatic patterns, (ie. figure out how to
-do gradients the Right Way).
-
-* Implement cairo_arc_to.
-
* Stroking closed, degenerate paths should still draw caps. Round
caps are easy; square should probably draw an axis-aligned square.
-* 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.
-
* Should add geometry pruning as appropriate.
-* 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
-
* Verification, profiling, optimization.
centi_unfinished.svg may provide a good test case.
-
-* Implement copy-on-write regions in pixman as a more complete
- solution than the BAD_NESTING stuff to Owen's "Clip region problems"
- thread.