PS/PDF API Change Proposal: (Re: [cairo] Semantics of
transparent objects)
Owen Taylor
otaylor at redhat.com
Wed Jan 18 20:07:14 PST 2006
I can't really object too strongly to this change, since the the model
where a PS/PDF surface matches a CAIRO_CONTENT_COLOR surface is still
available.
But I'm really not very comfortable with the with the idea of a
CAIRO_CONTENT_COLOR_ALPHA PS/PDF surface; I have concerns about
efficiency, concerns about consistency with the rest of cairo,
and concerns about utility.
What is destination alpha good for?
A) It's good if you want to end up with an object with
destination alpha. You want to draw a transparent
clock that you'll combine with the rest of your
desktop. This doesn't really seem relevant to printing
to me. In the end, you are going to end up with an
opaque piece of paper.
B) It's good for slicing and dicing objects - cutting one
object out of another, and so forth. This is basically
always done in a group rather than on the final destination
surface (Because, other than in A) above, we need to
end up with an opaque surface in the end, so cutting
something out of your destination is a bad idea...)
C) Related to B) is using ADD to prevent seams. Again, in
the normal screen case we are always doing this in
a group, since you can't end up with a transparent
backdrop.
D) Using SATURATE and front-to-back drawing to prevent seams
is a somewhat different in the end result is an opaque
image. Being able to recycle such drawing code and use it for
a printer would be nice, certainly.
But the PS/PDF model is a painter's model. We need advanced
code to try and detect when we can reverse the drawing order
and use OVER, and/or we are going to generate a gigantic
bitmap. The second is the much more probable case.
In the end, the reason why people want to use the PS/PDF model
is not to produce printouts of the Cairo test cases, but
to create and print documents; word processor documents, photos
of their kids, and so forth.
We're going to have enough trouble producing good high-quality
output for the normal case where they do that by simply drawing
objects with OVER, that introducing a whole other code path
of questionable utility that probably will never be optimized
seems dubious to me.
And especially without such optimization, the extra parameter
to cairo_ps/pdf_surface_create() just becomes a FAQ trap.
For normal uses, CAIRO_CONTENT_COLOR and CAIRO_CONTENT_COLOR_ALPHA
will give exactly the same result, but CAIRO_CONTENT_COLOR_ALPHA
will likely be considerably less efficient.
Plus, I'd argue that CAIRO_CONTENT_COLOR_ALPHA here really
doesn't mean the same thing here as it does in the rest of the
API. You say that you think we should be able to create Win32
surfaces with alpha... you certainly don't mean that you should
be able to create Win32 surfaces that magically composite
against white, do you?
The final result of drawing to a PS/PDF surface does *not*
have alpha, no matter what your best intention. (Even you print
to overhead slides, the alpha there is just the color white,
and has no relation to the alpha of your surface.) What would
be the analogy elsewhere? If I create a ARGB surface for an
xRGB X window that doesn't have transparency, then areas I leave
with alpha < 1.0 come out black not white. for their printer or for
redistribution.
As I said at the beginning, I don't object strenuously here,
but it is a parameter to confuse users, and a code path to
confuse implementers that in the end doesn't seem useful
to me, except for making our test cases look more orthogonal
and consistent. PS and PDF don't have transparency.
Regards,
Owen
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
Url : http://lists.freedesktop.org/archives/cairo/attachments/20060118/cc6bd58e/attachment-0001.pgp
More information about the cairo
mailing list