diff options
author | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-10-17 16:29:21 +0000 |
---|---|---|
committer | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-10-17 16:29:21 +0000 |
commit | 521a46750d87d3d206617d05d917ad6aad242ca4 (patch) | |
tree | 772cb406835c8fe36895c0c13624b51a43904a8b /include | |
parent | 627f66283b16dab30b31b381e35795104b70a56b (diff) |
If the path is a rect, call drawRect to raster the geometry in SkCanvas::drawPath to get better performance.
R=bsalomon@google.com, robertphillips@google.com, reed@google.com
Author: yunchao.he@intel.com
Review URL: https://codereview.chromium.org/23484007
git-svn-id: http://skia.googlecode.com/svn/trunk@11842 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'include')
-rw-r--r-- | include/core/SkCanvas.h | 26 | ||||
-rw-r--r-- | include/utils/SkDeferredCanvas.h | 5 | ||||
-rw-r--r-- | include/utils/SkDumpCanvas.h | 6 | ||||
-rw-r--r-- | include/utils/SkLuaCanvas.h | 6 | ||||
-rw-r--r-- | include/utils/SkNWayCanvas.h | 4 | ||||
-rw-r--r-- | include/utils/SkProxyCanvas.h | 6 |
6 files changed, 38 insertions, 15 deletions
diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h index dc3953ed4b..8c09a9c91e 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)) { + 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 diff --git a/include/utils/SkDeferredCanvas.h b/include/utils/SkDeferredCanvas.h index c0613ed544..052c667123 100644 --- a/include/utils/SkDeferredCanvas.h +++ b/include/utils/SkDeferredCanvas.h @@ -162,10 +162,7 @@ public: virtual void drawPoints(PointMode mode, size_t count, const SkPoint pts[], const SkPaint& paint) SK_OVERRIDE; virtual void drawOval(const SkRect&, const SkPaint& paint) SK_OVERRIDE; - virtual void drawRect(const SkRect& rect, const SkPaint& paint) SK_OVERRIDE; virtual void drawRRect(const SkRRect&, const SkPaint& paint) SK_OVERRIDE; - virtual void drawPath(const SkPath& path, const SkPaint& paint) - SK_OVERRIDE; virtual void drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top, const SkPaint* paint) SK_OVERRIDE; @@ -234,6 +231,8 @@ public: }; protected: + virtual void onDrawRect(const SkRect& rect, const SkPaint& paint) SK_OVERRIDE; + virtual void onDrawPath(const SkPath& path, const SkPaint& paint) SK_OVERRIDE; virtual SkCanvas* canvasForDrawIter(); DeferredDevice* getDeferredDevice() const; diff --git a/include/utils/SkDumpCanvas.h b/include/utils/SkDumpCanvas.h index 96b45e7ba2..d3ff9a1c18 100644 --- a/include/utils/SkDumpCanvas.h +++ b/include/utils/SkDumpCanvas.h @@ -93,9 +93,7 @@ public: virtual void drawPoints(PointMode mode, size_t count, const SkPoint pts[], const SkPaint& paint) SK_OVERRIDE; virtual void drawOval(const SkRect&, const SkPaint& paint) SK_OVERRIDE; - virtual void drawRect(const SkRect&, const SkPaint& paint) SK_OVERRIDE; virtual void drawRRect(const SkRRect&, const SkPaint& paint) SK_OVERRIDE; - virtual void drawPath(const SkPath& path, const SkPaint& paint) SK_OVERRIDE; virtual void drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top, const SkPaint* paint) SK_OVERRIDE; virtual void drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src, @@ -126,6 +124,10 @@ public: virtual void addComment(const char* kywd, const char* value) SK_OVERRIDE; virtual void endCommentGroup() SK_OVERRIDE; +protected: + virtual void onDrawRect(const SkRect&, const SkPaint& paint) SK_OVERRIDE; + virtual void onDrawPath(const SkPath& path, const SkPaint& paint) SK_OVERRIDE; + private: Dumper* fDumper; int fNestLevel; // for nesting recursive elements like pictures diff --git a/include/utils/SkLuaCanvas.h b/include/utils/SkLuaCanvas.h index c34d134423..b604d3c92c 100644 --- a/include/utils/SkLuaCanvas.h +++ b/include/utils/SkLuaCanvas.h @@ -42,9 +42,7 @@ public: virtual void drawPoints(PointMode mode, size_t count, const SkPoint pts[], const SkPaint& paint) SK_OVERRIDE; virtual void drawOval(const SkRect&, const SkPaint& paint) SK_OVERRIDE; - virtual void drawRect(const SkRect&, const SkPaint& paint) SK_OVERRIDE; virtual void drawRRect(const SkRRect&, const SkPaint& paint) SK_OVERRIDE; - virtual void drawPath(const SkPath& path, const SkPaint& paint) SK_OVERRIDE; virtual void drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top, const SkPaint* paint) SK_OVERRIDE; virtual void drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src, @@ -72,6 +70,10 @@ public: const SkPaint& paint) SK_OVERRIDE; virtual void drawData(const void* data, size_t length) SK_OVERRIDE; +protected: + virtual void onDrawRect(const SkRect&, const SkPaint& paint) SK_OVERRIDE; + virtual void onDrawPath(const SkPath& path, const SkPaint& paint) SK_OVERRIDE; + private: lua_State* fL; SkString fFunc; diff --git a/include/utils/SkNWayCanvas.h b/include/utils/SkNWayCanvas.h index c48bcab3c4..6791c51d58 100644 --- a/include/utils/SkNWayCanvas.h +++ b/include/utils/SkNWayCanvas.h @@ -43,9 +43,7 @@ public: virtual void drawPoints(PointMode mode, size_t count, const SkPoint pts[], const SkPaint&) SK_OVERRIDE; virtual void drawOval(const SkRect&, const SkPaint&) SK_OVERRIDE; - virtual void drawRect(const SkRect&, const SkPaint&) SK_OVERRIDE; virtual void drawRRect(const SkRRect&, const SkPaint&) SK_OVERRIDE; - virtual void drawPath(const SkPath& path, const SkPaint&) SK_OVERRIDE; virtual void drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top, const SkPaint*) SK_OVERRIDE; virtual void drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src, @@ -80,6 +78,8 @@ public: virtual void endCommentGroup() SK_OVERRIDE; protected: + virtual void onDrawRect(const SkRect&, const SkPaint&) SK_OVERRIDE; + virtual void onDrawPath(const SkPath& path, const SkPaint&) SK_OVERRIDE; SkTDArray<SkCanvas*> fList; class Iter; diff --git a/include/utils/SkProxyCanvas.h b/include/utils/SkProxyCanvas.h index 383e532fbf..54cdc3b2b0 100644 --- a/include/utils/SkProxyCanvas.h +++ b/include/utils/SkProxyCanvas.h @@ -48,9 +48,7 @@ public: virtual void drawPoints(PointMode mode, size_t count, const SkPoint pts[], const SkPaint& paint) SK_OVERRIDE; virtual void drawOval(const SkRect&, const SkPaint& paint) SK_OVERRIDE; - virtual void drawRect(const SkRect&, const SkPaint& paint) SK_OVERRIDE; virtual void drawRRect(const SkRRect&, const SkPaint& paint) SK_OVERRIDE; - virtual void drawPath(const SkPath& path, const SkPaint& paint) SK_OVERRIDE; virtual void drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top, const SkPaint* paint = NULL) SK_OVERRIDE; virtual void drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src, @@ -85,6 +83,10 @@ public: virtual SkBounder* setBounder(SkBounder* bounder) SK_OVERRIDE; virtual SkDrawFilter* setDrawFilter(SkDrawFilter* filter) SK_OVERRIDE; +protected: + virtual void onDrawRect(const SkRect&, const SkPaint& paint) SK_OVERRIDE; + virtual void onDrawPath(const SkPath& path, const SkPaint& paint) SK_OVERRIDE; + private: SkCanvas* fProxy; |