aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2017-01-19 11:36:41 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-01-19 18:31:28 +0000
commit3726a4ac68821deea7ef4d5472a42f7d35ec4b4e (patch)
tree1caa4c84140921e0a90157a65bca6cf5ebb20942 /src
parentfbff3297876a7c9c77a48be9a6fe62274a58bd8c (diff)
new hacky api to get cliprgn for android
BUG=skia: Change-Id: I42711a474906084adb3c888a599ae02505726484 Reviewed-on: https://skia-review.googlesource.com/7220 Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Mike Reed <reed@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/core/SkCanvas.cpp12
-rw-r--r--src/utils/SkCanvasStateUtils.cpp7
2 files changed, 15 insertions, 4 deletions
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index e3374dde52..0375ab738d 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -1819,8 +1819,16 @@ const SkMatrix& SkCanvas::getTotalMatrix() const {
return fMCRec->fMatrix;
}
-const SkRegion& SkCanvas::internal_private_getTotalClip() const {
- return fMCRec->fRasterClip.forceGetBW();
+void SkCanvas::temporary_internal_getRgnClip(SkRegion* rgn) {
+ // we know that ganesh doesn't track the rgn, so ask for its clipstack
+ if (this->getGrContext()) {
+ SkPath path;
+ this->getClipStack()->asPath(&path);
+ SkISize size = this->getBaseLayerSize();
+ rgn->setPath(path, SkRegion(SkIRect::MakeWH(size.width(), size.height())));
+ } else {
+ *rgn = fMCRec->fRasterClip.forceGetBW();
+ }
}
GrRenderTargetContext* SkCanvas::internal_private_accessTopLayerRenderTargetContext() {
diff --git a/src/utils/SkCanvasStateUtils.cpp b/src/utils/SkCanvasStateUtils.cpp
index 6dd0ca337b..a78f3435a4 100644
--- a/src/utils/SkCanvasStateUtils.cpp
+++ b/src/utils/SkCanvasStateUtils.cpp
@@ -202,8 +202,11 @@ SkCanvasState* SkCanvasStateUtils::CaptureCanvasState(SkCanvas* canvas) {
std::unique_ptr<SkCanvasState_v1> canvasState(new SkCanvasState_v1(canvas));
// decompose the total matrix and clip
- setup_MC_state(&canvasState->mcState, canvas->getTotalMatrix(),
- canvas->internal_private_getTotalClip());
+ {
+ SkRegion rgn;
+ canvas->temporary_internal_getRgnClip(&rgn);
+ setup_MC_state(&canvasState->mcState, canvas->getTotalMatrix(), rgn);
+ }
/*
* decompose the layers