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

Commit 25f6f4f5 authored by Romain Guy's avatar Romain Guy Committed by Android Git Automerger
Browse files

am 3c1ad55f: Merge "Update Canvas.getClipBounds to not account for AA clips." into jb-mr2-dev

* commit '3c1ad55f':
  Update Canvas.getClipBounds to not account for AA clips.
parents 46449b8b 3c1ad55f
Loading
Loading
Loading
Loading
+28 −1
Original line number Diff line number Diff line
@@ -960,11 +960,38 @@ static void doDrawTextDecorations(SkCanvas* canvas, jfloat x, jfloat y, jfloat l
        env->ReleaseStringChars(text, text_);
    }


    // This function is a mirror of SkCanvas::getClipBounds except that it does
    // not outset the edge of the clip to account for anti-aliasing. There is
    // a skia bug to investigate pushing this logic into back into skia.
    // (see https://code.google.com/p/skia/issues/detail?id=1303)
    static bool getHardClipBounds(SkCanvas* canvas, SkRect* bounds) {
        SkIRect ibounds;
        if (!canvas->getClipDeviceBounds(&ibounds)) {
            return false;
        }

        SkMatrix inverse;
        // if we can't invert the CTM, we can't return local clip bounds
        if (!canvas->getTotalMatrix().invert(&inverse)) {
            if (bounds) {
                bounds->setEmpty();
            }
            return false;
        }

        if (NULL != bounds) {
            SkRect r = SkRect::Make(ibounds);
            inverse.mapRect(bounds, r);
        }
        return true;
    }

    static bool getClipBounds(JNIEnv* env, jobject, SkCanvas* canvas,
                              jobject bounds) {
        SkRect   r;
        SkIRect ir;
        bool result = canvas->getClipBounds(&r);
        bool result = getHardClipBounds(canvas, &r);

        if (!result) {
            r.setEmpty();