1
* Clean up the API in preparation for freezing and release.
3
* Implement a PDF backend.
5
* Make a more interesting PS backend, (other than the current
6
"giant-image for every page" approach).
8
* Figure out what to do with DPI for image/png backends.
10
* Change stroke code to go through one giant polygon. This will fix
11
problems with stroking self-intersecting paths.
13
* Implement cairo_stroke_path, (very easy to do after the above change
16
* Re-work the backend clipping interface to use geometry rather than
19
* Fix the intersection problem, (see reference to Hobby's paper
20
mentioned in cairo_traps.c).
22
* Add a new cairo_text_glyphs function (a sort of bridge between the
23
toy and the real text API):
26
> cairo_text_glyphs (cairo_t *cr, const unsigned char *utf8,
27
> cairo_glyph_t *glyphs, int *num_glyphs);
29
> with num_glyphs as an input-output parameter. The behavior of this
30
> function would be such that calling:
32
> cairo_text_glyphs (cr, string, glyphs, &num_glyphs);
33
> cairo_show_glyphs (cr, glyphs, num_glyphs);
35
> would be equivalent too:
37
> cairo_show_text (cr, string);
39
> as long as the original size of glyphs/num_glyphs was large
42
* Implement dashing for cairo_curve_to.
44
* Implement support for programmatic patterns, (ie. figure out how to
45
do gradients the Right Way).
47
* Implement cairo_arc_to.
49
* Fix support for old X servers so that it is not swamped with image
50
transport. The key idea is to assume that nothing external to cairo
51
will be drawing to the same drawable after it is handed to
52
cairo. Beyond that, we might actually provide support for cooperating
53
with external entities by adding one or more of the following
60
* Re-implement the trapezoid rasterization algorithm according to the
63
* Stroking closed, degenerate paths should still draw caps. Round
64
caps are easy; square should probably draw an axis aligned square.
66
* Verification, profiling, optimization.
68
A comparison with PostScript
69
============================
71
Here's a list of several classes of PostScript operators indicating
72
which operators have rough equivalents in cairo and which do not. In
73
general, the name of a cairo function corresponding to a PostScript
74
operator can be obtained by inserting a '_' between each word and
75
prefixing it with "cairo_". For example, "cairo_move_to" corresponds
76
to the PostScript "moveto".
78
In cases where the name of the cairo function deviates from this
79
convention, or when the behavior of the cairo function is
80
significantly different, the change is noted in parentheses below.
82
This list is not exhaustive, (there are definitely some minor (major?)
83
semantic deviations that are not noted below). Also, this list is
84
almost certainly out of date with respect to the current cairo
85
implementation. Caveat lector.
87
Operators that are not yet in cairo, but probably should be: arcto,
88
strokepath, rectclip?, clipsave/restore?, setstrokeadjust?,
89
currentdash, grestoreall?, initgraphics?, currentgstate?, setgstate?,
90
erasepage?, setsmoothness?
94
in cairo: stroke, fill, eofill (set_fill_rule/fill), image
97
not in cairo: erasepage, rectstroke, rectfill, shfill, colorimage,
100
Path construction operators
101
---------------------------
102
in cairo: arc, arcn (arc_negative), newpath, moveto, rmoveto
103
(rel_move_to), lineto, rlineto (rel_line_to), curveto, rcurveto
104
(rel_curve_to), closepath, currentpoint, charpath (text_path),
105
pathforall (current_path), flattenpath (current_path_flat)
107
not in cairo: arct, arcto, reversepath, strokepath, clippath, pathbbox
111
in cairo: clip, eoclip (set_fill_rule/clip)
113
not in cairo: initclip, rectclip, clipsave, cliprestore
115
Graphics state operators
116
------------------------
117
in cairo: setlinewidth, currentlinewidth, setlinecap, currentlinecap,
118
setlinejoin, currentlinejoin, setmiterlimit, currentmiterlimit,
121
not in cairo: setstrokeadjust, currentstrokeadjust, currentdash
123
Color specification operators
124
-----------------------------
125
in cairo: setrgbcolor, currentcolor
127
not in cairo: setcolor, setgray, currentgray, currentrgbcolor,
128
sethsbcolor, currenthsbcolor, setcmykcolor, currentcmykcolor,
129
setcolorspace, currentcolorspace
131
Form and pattern operators
132
--------------------------
133
in cairo: setpattern, makepattern (lock_pattern)
135
not in cairo: execform
137
Whole-state manipulation
138
------------------------
139
in cairo: gsave (save), grestore (restore)
141
not in cairo: grestoreall, initgraphics, gstate, currentgstate,
144
Coordinate system and matrix operators
145
--------------------------------------
146
in cairo: identmatrix (identity_matrix), initmatrix (default_matrix),
147
setmatrix, translate, scale, rotate, concatmatrix, currentmatrix,
148
transform (transform_point), dtransform (transform_distance)
150
not in cairo: matrix, defaultmatrix, concat, itransform, idtransform,
155
in cairo: infill, instroke, ineofill (set_fill_rule/in_fill)
157
not in cairo: inufill, inustroke, inueofill
161
in cairo: showpage, copypage
163
not in cairo: setpagedevice, currentpagedevice, nulldevice
165
Glyph and font operators
166
------------------------
167
in cairo: currentfont, definefont (font_create_for_ft_face),
168
undefine_font (font_destroy), findfont (font_create), makefont
169
(transform_font), setfont, scalefont, selectfont, show (show_text),
170
stringwidth (x/y in text_extents), xyshow (glyph_show -- but ignoring
171
current_point and using absolute positions)
173
not in cairo, (and likely not needed): composefont, rootfont, ashow,
174
widthshow, awidthshow, xshow, xyshow, yshow, glyphshow, cshow, kshow,
175
FontDirectory, GlobalFontDirectory, StandardEncoding,
176
ISOLatin1Encoding, findencoding, setcachedevice, setcachedevice2,
179
Graphics state operators (device-dependent)
180
-------------------------------------------
181
in cairo: setflat (set_tolerance), currentflat (current_tolerance)
183
not in cairo: sethalftone, currenthalftone, setscreen, currentscreen,
184
setcolorscreen, currentcolorscreen, settransfer, currenttransfer,
185
setcolortransfer, currentcolortransfer, setblackgeneration,
186
currentblackgeneration, setundercolorremoval,
187
currentundercolorremoval, setcolorrendering, currentcolorrendering,
188
setoverprint, currentoverprint, setsmoothness, currentsmoothness
190
PostScript operators never to be in cairo
191
-----------------------------------------
192
Operator Stack Manipulation Operators, Arithmetic and Math Operators,
193
Array Operators, Packed Array Operators, Dictionary Operators, String
194
Operators, Rational,Boolean,and Bitwise Operators, Control Operators,
195
Type,Attribute,and Conversion Operators, File Operators, Resource
196
Operators, Virtual Memory Operators, Miscellaneous Operators,
197
Interpreter Parameter Operators, Errors, User Path Operators