diff options
-rw-r--r-- | core/jni/android/graphics/Canvas.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/core/jni/android/graphics/Canvas.cpp b/core/jni/android/graphics/Canvas.cpp index 6410bc3..6640555 100644 --- a/core/jni/android/graphics/Canvas.cpp +++ b/core/jni/android/graphics/Canvas.cpp @@ -54,6 +54,21 @@ static uint32_t get_thread_msec() { namespace android { +class ClipCopier : public SkCanvas::ClipVisitor { +public: + ClipCopier(SkCanvas* dstCanvas) : m_dstCanvas(dstCanvas) {} + + virtual void clipRect(const SkRect& rect, SkRegion::Op op, bool antialias) { + m_dstCanvas->clipRect(rect, op, antialias); + } + virtual void clipPath(const SkPath& path, SkRegion::Op op, bool antialias) { + m_dstCanvas->clipPath(path, op, antialias); + } + +private: + SkCanvas* m_dstCanvas; +}; + class SkCanvasGlue { public: @@ -68,13 +83,15 @@ public: static void copyCanvasState(JNIEnv* env, jobject clazz, SkCanvas* srcCanvas, SkCanvas* dstCanvas) { if (srcCanvas && dstCanvas) { + dstCanvas->setMatrix(srcCanvas->getTotalMatrix()); if (NULL != srcCanvas->getDevice() && NULL != dstCanvas->getDevice()) { - dstCanvas->clipRegion(srcCanvas->getTotalClip()); + ClipCopier copier(dstCanvas); + srcCanvas->replayClips(&copier); } - dstCanvas->setMatrix(srcCanvas->getTotalMatrix()); } } + static void freeCaches(JNIEnv* env, jobject) { // these are called in no particular order SkImageRef_GlobalPool::SetRAMUsed(0); |