Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea104b64 authored by Derek Sollenberger's avatar Derek Sollenberger Committed by Android Git Automerger
Browse files

am 5b6591c1: fix issue when replacement bitmap is larger than original.

* commit '5b6591c1':
  fix issue when replacement bitmap is larger than original.
parents bf50ede4 5b6591c1
Loading
Loading
Loading
Loading
+19 −2
Original line number Diff line number Diff line
@@ -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);