From ad254fee73ad70a45acba69dccb9b65f88c3a92a Mon Sep 17 00:00:00 2001 From: "bsalomon@google.com" Date: Tue, 22 Oct 2013 13:19:12 +0000 Subject: If the path is a rect, call drawRect to raster the geometry in SkCanvas::drawPath to get better performance. Committed: http://code.google.com/p/skia/source/detail?r=11842 R=bsalomon@google.com Review URL: https://codereview.chromium.org/23484007 git-svn-id: http://skia.googlecode.com/svn/trunk@11904 2bbb7eff-a529-9590-31e7-b0007b416f81 --- include/core/SkCanvas.h | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'include/core/SkCanvas.h') diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h index dc3953ed4b..6869585419 100644 --- a/include/core/SkCanvas.h +++ b/include/core/SkCanvas.h @@ -575,16 +575,20 @@ public: will be filled or stroked based on the Style in the paint. @param rect The rect to be drawn @param paint The paint used to draw the rect + + Overriding this function is deprecated. It will be made non-virtual + soon. Instead override onDrawRect. */ - virtual void drawRect(const SkRect& rect, const SkPaint& paint); + virtual void drawRect(const SkRect& rect, const SkPaint& paint) { + this->onDrawRect(rect, paint); + } /** Draw the specified rectangle using the specified paint. The rectangle will be filled or framed based on the Style in the paint. @param rect The rect to be drawn @param paint The paint used to draw the rect */ - void drawIRect(const SkIRect& rect, const SkPaint& paint) - { + void drawIRect(const SkIRect& rect, const SkPaint& paint) { SkRect r; r.set(rect); // promotes the ints to scalars this->drawRect(r, paint); @@ -656,8 +660,18 @@ public: filled or framed based on the Style in the paint. @param path The path to be drawn @param paint The paint used to draw the path + + Overriding this function is deprecated. It will be made non-virtual + soon. Instead override onDrawRect. */ - virtual void drawPath(const SkPath& path, const SkPaint& paint); + virtual void drawPath(const SkPath& path, const SkPaint& paint) { + SkRect rect; + if (path.isRect(&rect) && !path.isInverseFillType()) { + this->onDrawRect(rect, paint); + } else { + this->onDrawPath(path, paint); + } + } /** Draw the specified bitmap, with its top/left corner at (x,y), using the specified paint, transformed by the current matrix. Note: if the paint @@ -1034,6 +1048,10 @@ protected: // can perform copy-on-write or invalidate any cached images void predrawNotify(); + virtual void onDrawRect(const SkRect& rect, const SkPaint& paint); + + virtual void onDrawPath(const SkPath& path, const SkPaint& paint); + /** DEPRECATED -- use constructor(device) Marked as 'protected' to avoid new clients using this before we can -- cgit v1.2.3