From 1dc14ba388cc37908c73d75ec31547c9c6f59d4e Mon Sep 17 00:00:00 2001 From: Florin Malita Date: Wed, 4 Jun 2014 19:49:13 -0400 Subject: [PATCH] Implement SkCanvasGlue::clipRegion() using clipPath(). (Canvas clipRegion() public API is scheduled for deprecation) The SkCanvas clip stack does not support clipRegion() ops. Implementing these in terms of clipPath() makes persisting clips for SaveFlags emulation purposes a whole lot simpler. Change-Id: I41d1eb9e292ce370fba224338f9071d5e4068621 --- core/jni/android/graphics/Canvas.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/core/jni/android/graphics/Canvas.cpp b/core/jni/android/graphics/Canvas.cpp index bdaf3a03ea245..cf63dfbace650 100644 --- a/core/jni/android/graphics/Canvas.cpp +++ b/core/jni/android/graphics/Canvas.cpp @@ -298,7 +298,16 @@ public: jlong deviceRgnHandle, jint op) { SkCanvas* canvas = getNativeCanvas(canvasHandle); SkRegion* deviceRgn = reinterpret_cast(deviceRgnHandle); - canvas->clipRegion(*deviceRgn, static_cast(op)); + SkPath rgnPath; + if (deviceRgn->getBoundaryPath(&rgnPath)) { + // The region is specified in device space. + SkMatrix savedMatrix = canvas->getTotalMatrix(); + canvas->resetMatrix(); + canvas->clipPath(rgnPath, static_cast(op)); + canvas->setMatrix(savedMatrix); + } else { + canvas->clipRect(SkRect::MakeEmpty(), static_cast(op)); + } return hasNonEmptyClip(*canvas); }