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

Commit 7994a312 authored by Mike Reed's avatar Mike Reed
Browse files

Modernize calls to drawImage

1. drawBitmap --> drawImage
2. drawImage now always requires sampling parameter

Bug:178700363

Test: make

Change-Id: I96f610a180b3774ba955cc334949fd62b1cf4d69
parent 7ee87037
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -362,13 +362,8 @@ static SkBitmap makeHwCompatible(const FormatInfo& format, const SkBitmap& sourc
        return source;
    } else {
        SkBitmap bitmap;
        const SkImageInfo& info = source.info();
        bitmap.allocPixels(info.makeColorType(kN32_SkColorType));

        SkCanvas canvas(bitmap);
        canvas.drawColor(0);
        canvas.drawBitmap(source, 0.0f, 0.0f, nullptr);

        bitmap.allocPixels(source.info().makeColorType(kN32_SkColorType));
        bitmap.writePixels(source.pixmap());
        return bitmap;
    }
}
+3 −2
Original line number Diff line number Diff line
@@ -127,10 +127,11 @@ void Layer::draw(SkCanvas* canvas) {
        const SkMatrix& totalMatrix = canvas->getTotalMatrix();

        SkRect imageRect = SkRect::MakeIWH(layerImage->width(), layerImage->height());
        SkSamplingOptions sampling;
        if (getForceFilter() || shouldFilterRect(totalMatrix, imageRect, imageRect)) {
            paint.setFilterQuality(kLow_SkFilterQuality);
            sampling = SkSamplingOptions(SkFilterMode::kLinear);
        }
        canvas->drawImage(layerImage.get(), 0, 0, &paint);
        canvas->drawImage(layerImage.get(), 0, 0, sampling, &paint);
        // restore the original matrix
        if (nonIdentityMatrix) {
            canvas->restore();
+3 −1
Original line number Diff line number Diff line
@@ -487,7 +487,9 @@ struct DrawVectorDrawable final : Op {
        tree->getPaintFor(&paint, tree->stagingProperties());
    }

    void draw(SkCanvas* canvas, const SkMatrix&) const { mRoot->draw(canvas, mBounds, paint); }
    void draw(SkCanvas* canvas, const SkMatrix&) const {
        mRoot->draw(canvas, mBounds, paint);
    }

    sp<VectorDrawableRoot> mRoot;
    SkRect mBounds;
+25 −11
Original line number Diff line number Diff line
@@ -565,7 +565,8 @@ void SkiaCanvas::drawVertices(const SkVertices* vertices, SkBlendMode mode, cons
void SkiaCanvas::drawBitmap(Bitmap& bitmap, float left, float top, const Paint* paint) {
    auto image = bitmap.makeImage();
    apply_looper(paint, [&](const SkPaint& p) {
        mCanvas->drawImage(image, left, top, &p);
        auto sampling = SkSamplingOptions(p.getFilterQuality());
        mCanvas->drawImage(image, left, top, sampling, &p);
    });
}

@@ -574,7 +575,8 @@ void SkiaCanvas::drawBitmap(Bitmap& bitmap, const SkMatrix& matrix, const Paint*
    SkAutoCanvasRestore acr(mCanvas, true);
    mCanvas->concat(matrix);
    apply_looper(paint, [&](const SkPaint& p) {
        mCanvas->drawImage(image, 0, 0, &p);
        auto sampling = SkSamplingOptions(p.getFilterQuality());
        mCanvas->drawImage(image, 0, 0, sampling, &p);
    });
}

@@ -586,10 +588,17 @@ void SkiaCanvas::drawBitmap(Bitmap& bitmap, float srcLeft, float srcTop, float s
    SkRect dstRect = SkRect::MakeLTRB(dstLeft, dstTop, dstRight, dstBottom);

    apply_looper(paint, [&](const SkPaint& p) {
        mCanvas->drawImageRect(image, srcRect, dstRect, &p, SkCanvas::kFast_SrcRectConstraint);
        auto sampling = SkSamplingOptions(p.getFilterQuality());
        mCanvas->drawImageRect(image, srcRect, dstRect, sampling, &p,
                               SkCanvas::kFast_SrcRectConstraint);
    });
}

static SkFilterMode paintToFilter(const Paint* paint) {
    return paint && paint->isFilterBitmap() ? SkFilterMode::kLinear
                                            : SkFilterMode::kNearest;
}

void SkiaCanvas::drawBitmapMesh(Bitmap& bitmap, int meshWidth, int meshHeight,
                                const float* vertices, const int* colors, const Paint* paint) {
    const int ptCount = (meshWidth + 1) * (meshHeight + 1);
@@ -664,18 +673,25 @@ void SkiaCanvas::drawBitmapMesh(Bitmap& bitmap, int meshWidth, int meshHeight,
    }
#endif

    auto image = bitmap.makeImage();

    // cons-up a shader for the bitmap
    Paint pnt;
    if (paint) {
        pnt = *paint;
    }
    SkSamplingOptions sampling(pnt.isFilterBitmap() ? SkFilterMode::kLinear
                                                    : SkFilterMode::kNearest,
                               SkMipmapMode::kNone);
    pnt.setShader(bitmap.makeImage()->makeShader(sampling));
    SkSamplingOptions sampling(paintToFilter(&pnt));
    pnt.setShader(image->makeShader(sampling));

    auto v = builder.detach();
    apply_looper(&pnt, [&](const SkPaint& p) {
        mCanvas->drawVertices(v, SkBlendMode::kModulate, p);
        SkPaint copy(p);
        auto s = SkSamplingOptions(p.getFilterQuality());
        if (s != sampling) {
            // apply_looper changed the quality?
            copy.setShader(image->makeShader(s));
        }
        mCanvas->drawVertices(v, SkBlendMode::kModulate, copy);
    });
}

@@ -700,13 +716,11 @@ void SkiaCanvas::drawNinePatch(Bitmap& bitmap, const Res_png_9patch& chunk, floa
        NinePatchUtils::SetLatticeFlags(&lattice, flags.get(), numFlags, chunk, colors.get());
    }

    SkFilterMode filter = paint && paint->isFilterBitmap() ? SkFilterMode::kLinear
                                                           : SkFilterMode::kNearest;

    lattice.fBounds = nullptr;
    SkRect dst = SkRect::MakeLTRB(dstLeft, dstTop, dstRight, dstBottom);
    auto image = bitmap.makeImage();
    apply_looper(paint, [&](const SkPaint& p) {
        auto filter = SkSamplingOptions(p.getFilterQuality()).filter;
        mCanvas->drawImageLattice(image.get(), lattice, dst, filter, &p);
    });
}
+3 −1
Original line number Diff line number Diff line
@@ -507,10 +507,12 @@ void Tree::draw(SkCanvas* canvas, const SkRect& bounds, const SkPaint& inPaint)

    sk_sp<SkImage> cachedBitmap = getBitmapUpdateIfDirty().makeImage();

    // HWUI always draws VD with bilinear filtering.
    auto sampling = SkSamplingOptions(SkFilterMode::kLinear);
    int scaledWidth = SkScalarCeilToInt(mProperties.getScaledWidth());
    int scaledHeight = SkScalarCeilToInt(mProperties.getScaledHeight());
    canvas->drawImageRect(cachedBitmap, SkRect::MakeWH(scaledWidth, scaledHeight), bounds,
                           &paint, SkCanvas::kFast_SrcRectConstraint);
                          sampling, &paint, SkCanvas::kFast_SrcRectConstraint);
}

void Tree::updateBitmapCache(Bitmap& bitmap, bool useStagingData) {
Loading