[webkit-dev] Changes to GraphicsContext
hyatt at apple.com
Tue Dec 19 03:42:31 PST 2006
I changed how the graphics context works today to avoid updating
CoreGraphics's fill and stroke colors in every drawGlyphs call.
Basically I changed GraphicsContextCG to be more like
GraphicsContextQt, which was already behaving the way I wanted CG to
behave. Now when you set a fill or stroke color on a
GraphicsContext, it is updated immediately in the underlying native
context (in both CG and Qt).
What was formerly known as the Pen has now been broken down into
stroke style, color and thickness. Thickness was changed to a float
so that arc drawing could take a float-based thickness when
stroking. drawArc was reworked and renamed to strokeArc and its
false concept of filling was removed (it was not really using filling).
Text in HTML is now being drawn using the fill color and not the pen
(stroke) color. This allows for SVG to fill and stroke separately
and for text drawing to do either.
A new textDrawingMode API has been added to reflect filling, stroking
and clipping of text. The API allows for bits and lets you set any
combination of those three bits. SVG is now using this API to
distinguish between filling and stroking of text.
For those of you working with native CG and Qt code directly (as is
sometimes the case in RenderTheme*** classes), you will need to be
especially careful now. Fill and stroke colors (for speed) are held
as Colors in GraphicsContext's cross-platform state, and so if you
set the CG fill color directly (and don't go through the cross-
platform API), you will now be out of sync. To avoid any issues you
should either use the cross-platform API everywhere you can, or
simply bracket your uses of native CG code with save and restore calls.
Anyone working on ports other than CG and Qt (I patched those two)
will need to replace your uses of Pen with the new stroke APIs. In
addition you will need to make sure your font rendering code uses the
fill color now and not the pen (stroke) color. If you plan on
supporting SVG, you will also need to support stroking of text using
the stroke color.
(hyatt at apple.com)
More information about the webkit-dev