diff options
author | 2022-08-16 19:08:18 +0000 | |
---|---|---|
committer | 2022-08-16 19:08:18 +0000 | |
commit | 258ded61cdeafe20136f3450536675b6f518dca3 (patch) | |
tree | 568ded592a8dad9b4206c213a78ed48f0d952d22 /libs/hwui/SkiaCanvas.cpp | |
parent | 3d98002eab0fb0783eea44a20b0d01eb6c8730ec (diff) | |
parent | 98bb5a14bb2adf2d02822c0089b1f45f6b2e2950 (diff) |
Merge "DO NOT MERGE - Merge Android 13"
Diffstat (limited to 'libs/hwui/SkiaCanvas.cpp')
-rw-r--r-- | libs/hwui/SkiaCanvas.cpp | 55 |
1 files changed, 31 insertions, 24 deletions
diff --git a/libs/hwui/SkiaCanvas.cpp b/libs/hwui/SkiaCanvas.cpp index d032e2b00649..53c6db0cdf3a 100644 --- a/libs/hwui/SkiaCanvas.cpp +++ b/libs/hwui/SkiaCanvas.cpp @@ -182,7 +182,7 @@ int SkiaCanvas::saveUnclippedLayer(int left, int top, int right, int bottom) { return SkAndroidFrameworkUtils::SaveBehind(mCanvas, &bounds); } -void SkiaCanvas::restoreUnclippedLayer(int restoreCount, const SkPaint& paint) { +void SkiaCanvas::restoreUnclippedLayer(int restoreCount, const Paint& paint) { while (mCanvas->getSaveCount() > restoreCount + 1) { this->restore(); @@ -396,6 +396,22 @@ bool SkiaCanvas::clipPath(const SkPath* path, SkClipOp op) { return !mCanvas->isClipEmpty(); } +bool SkiaCanvas::replaceClipRect_deprecated(float left, float top, float right, float bottom) { + SkRect rect = SkRect::MakeLTRB(left, top, right, bottom); + + // Emulated clip rects are not recorded for partial saves, since + // partial saves have been removed from the public API. + SkAndroidFrameworkUtils::ResetClip(mCanvas); + mCanvas->clipRect(rect, SkClipOp::kIntersect); + return !mCanvas->isClipEmpty(); +} + +bool SkiaCanvas::replaceClipPath_deprecated(const SkPath* path) { + SkAndroidFrameworkUtils::ResetClip(mCanvas); + mCanvas->clipPath(*path, SkClipOp::kIntersect, true); + return !mCanvas->isClipEmpty(); +} + // ---------------------------------------------------------------------------- // Canvas state operations: Filters // ---------------------------------------------------------------------------- @@ -439,13 +455,13 @@ void SkiaCanvas::drawColor(int color, SkBlendMode mode) { mCanvas->drawColor(color, mode); } -void SkiaCanvas::onFilterPaint(SkPaint& paint) { +void SkiaCanvas::onFilterPaint(Paint& paint) { if (mPaintFilter) { - mPaintFilter->filter(&paint); + mPaintFilter->filterFullPaint(&paint); } } -void SkiaCanvas::drawPaint(const SkPaint& paint) { +void SkiaCanvas::drawPaint(const Paint& paint) { mCanvas->drawPaint(filterPaint(paint)); } @@ -552,9 +568,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(); - applyLooper(paint, [&](const SkPaint& p) { - auto sampling = SkSamplingOptions(p.getFilterQuality()); - mCanvas->drawImage(image, left, top, sampling, &p); + applyLooper(paint, [&](const Paint& p) { + mCanvas->drawImage(image, left, top, p.sampling(), &p); }); } @@ -562,9 +577,8 @@ void SkiaCanvas::drawBitmap(Bitmap& bitmap, const SkMatrix& matrix, const Paint* auto image = bitmap.makeImage(); SkAutoCanvasRestore acr(mCanvas, true); mCanvas->concat(matrix); - applyLooper(paint, [&](const SkPaint& p) { - auto sampling = SkSamplingOptions(p.getFilterQuality()); - mCanvas->drawImage(image, 0, 0, sampling, &p); + applyLooper(paint, [&](const Paint& p) { + mCanvas->drawImage(image, 0, 0, p.sampling(), &p); }); } @@ -575,18 +589,12 @@ void SkiaCanvas::drawBitmap(Bitmap& bitmap, float srcLeft, float srcTop, float s SkRect srcRect = SkRect::MakeLTRB(srcLeft, srcTop, srcRight, srcBottom); SkRect dstRect = SkRect::MakeLTRB(dstLeft, dstTop, dstRight, dstBottom); - applyLooper(paint, [&](const SkPaint& p) { - auto sampling = SkSamplingOptions(p.getFilterQuality()); - mCanvas->drawImageRect(image, srcRect, dstRect, sampling, &p, + applyLooper(paint, [&](const Paint& p) { + mCanvas->drawImageRect(image, srcRect, dstRect, p.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); @@ -668,13 +676,13 @@ void SkiaCanvas::drawBitmapMesh(Bitmap& bitmap, int meshWidth, int meshHeight, if (paint) { pnt = *paint; } - SkSamplingOptions sampling(paintToFilter(&pnt)); + SkSamplingOptions sampling = pnt.sampling(); pnt.setShader(image->makeShader(sampling)); auto v = builder.detach(); - applyLooper(&pnt, [&](const SkPaint& p) { + applyLooper(&pnt, [&](const Paint& p) { SkPaint copy(p); - auto s = SkSamplingOptions(p.getFilterQuality()); + auto s = p.sampling(); if (s != sampling) { // applyLooper changed the quality? copy.setShader(image->makeShader(s)); @@ -707,9 +715,8 @@ void SkiaCanvas::drawNinePatch(Bitmap& bitmap, const Res_png_9patch& chunk, floa lattice.fBounds = nullptr; SkRect dst = SkRect::MakeLTRB(dstLeft, dstTop, dstRight, dstBottom); auto image = bitmap.makeImage(); - applyLooper(paint, [&](const SkPaint& p) { - auto filter = SkSamplingOptions(p.getFilterQuality()).filter; - mCanvas->drawImageLattice(image.get(), lattice, dst, filter, &p); + applyLooper(paint, [&](const Paint& p) { + mCanvas->drawImageLattice(image.get(), lattice, dst, p.filterMode(), &p); }); } |