Added a virtual to SkBounder, called by text, that passes
authorreed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Mon, 4 Jan 2010 19:35:33 +0000 (19:35 +0000)
committerreed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Mon, 4 Jan 2010 19:35:33 +0000 (19:35 +0000)
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

include/core/SkBounder.h
src/core/SkDraw.cpp

index f20961d2ed90cab3d262c82ad5fa8e4b11d33a54..00fbbc6b650e566df268c44ba33858093d3e8c29 100644 (file)
@@ -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
index 4f28cfea5d86c234331454e137246e76714509ea..78c282e13dea7df91f8cac7bad08451a5a9f2216 100644 (file)
@@ -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;