Added a virtual to SkBounder, called by text, that passes

the glyph's ID as well as its bounds. Made the universal
doIRect() non-abstract so that a child class can override
either the general flavor or the text flavor.



git-svn-id: http://skia.googlecode.com/svn/trunk@468 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
reed@android.com 2010-01-04 19:35:33 +00:00
Родитель 69975b0fce
Коммит 474a12c497
2 изменённых файлов: 17 добавлений и 3 удалений

Просмотреть файл

@ -38,7 +38,7 @@ public:
Returns the result from onIRect.
*/
bool doIRect(const SkIRect&);
bool doIRect(const SkIRect& , uint16_t glyphID);
protected:
/** Override in your subclass. This is called with the device bounds of an
object (text, geometry, image) just before it is drawn. If your method
@ -46,7 +46,16 @@ protected:
returns true, drawing continues. The bounds your method receives have already
been transformed in to device coordinates, and clipped to the current clip.
*/
virtual bool onIRect(const SkIRect&) = 0;
virtual bool onIRect(const SkIRect&) {
return false;
}
/** Optionally, override in your subclass to receive the glyph ID when
text drawing supplies the device bounds of the object.
*/
virtual bool onIRect(const SkIRect& r, uint16_t glyphID) {
return onIRect(r);
}
/** Called after each shape has been drawn. The default implementation does
nothing, but your override could use this notification to signal itself

Просмотреть файл

@ -1366,7 +1366,7 @@ static void D1G_Bounder(const SkDraw1Glyph& state,
}
}
if (state.fBounder->doIRect(cr)) {
if (state.fBounder->doIRect(cr, glyph.getGlyphID())) {
mask.fRowBytes = glyph.rowBytes();
mask.fFormat = static_cast<SkMask::Format>(glyph.fMaskFormat);
mask.fImage = (uint8_t*)aa;
@ -2244,6 +2244,11 @@ bool SkBounder::doIRect(const SkIRect& r) {
return rr.intersect(fClip->getBounds(), r) && this->onIRect(rr);
}
bool SkBounder::doIRect(const SkIRect& r, uint16_t glyphID) {
SkIRect rr;
return rr.intersect(fClip->getBounds(), r) && this->onIRect(rr, glyphID);
}
bool SkBounder::doHairline(const SkPoint& pt0, const SkPoint& pt1,
const SkPaint& paint) {
SkIRect r;