aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2010-01-04 19:35:33 +0000
committerGravatar reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2010-01-04 19:35:33 +0000
commit474a12c4976b3000174cad5df74c498cd723c5e2 (patch)
tree7775c1e828dd2e9692a6fa20a91889799f109e75
parent69975b0fce6c950a0481a2ddaec3ce0aaa03f90d (diff)
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
-rw-r--r--include/core/SkBounder.h13
-rw-r--r--src/core/SkDraw.cpp7
2 files changed, 17 insertions, 3 deletions
diff --git a/include/core/SkBounder.h b/include/core/SkBounder.h
index f20961d2ed..00fbbc6b65 100644
--- a/include/core/SkBounder.h
+++ b/include/core/SkBounder.h
@@ -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
diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp
index 4f28cfea5d..78c282e13d 100644
--- a/src/core/SkDraw.cpp
+++ b/src/core/SkDraw.cpp
@@ -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;