diff options
author | Scott Lobdell <slobdell@google.com> | 2021-04-23 22:36:54 +0000 |
---|---|---|
committer | Scott Lobdell <slobdell@google.com> | 2021-04-23 22:36:54 +0000 |
commit | 81abbc1d7858f29d3344ff6f1702ece80eab8341 (patch) | |
tree | b06d90c8277a04e4f8156d9b20d1611a974156e0 /libs/hwui/pipeline/skia/RenderNodeDrawable.cpp | |
parent | 857ef130fbeed8d0eb46cc1bfc9f75138f11c4e6 (diff) | |
parent | bd33c1d7942f5aad3e313cbd447056b720d1149b (diff) |
Merge SP1A.210412.001
Change-Id: I0e1c2f5679d5f721cd605b7da785959763311698
Diffstat (limited to 'libs/hwui/pipeline/skia/RenderNodeDrawable.cpp')
-rw-r--r-- | libs/hwui/pipeline/skia/RenderNodeDrawable.cpp | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp b/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp index cb0ff8d871d4..77d99a67b602 100644 --- a/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp +++ b/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp @@ -18,6 +18,7 @@ #include <SkPaintFilterCanvas.h> #include "RenderNode.h" #include "SkiaDisplayList.h" +#include "TransformCanvas.h" #include "utils/TraceUtils.h" #include <include/effects/SkImageFilters.h> @@ -179,20 +180,7 @@ static bool layerNeedsPaint(const sk_sp<SkImage>& snapshotImage, const LayerProp paint->setColorFilter(sk_ref_sp(properties.getColorFilter())); sk_sp<SkImageFilter> imageFilter = sk_ref_sp(properties.getImageFilter()); - sk_sp<SkImageFilter> stretchFilter = - properties.getStretchEffect().getImageFilter(snapshotImage); - sk_sp<SkImageFilter> filter; - if (imageFilter && stretchFilter) { - filter = SkImageFilters::Compose( - std::move(stretchFilter), - std::move(imageFilter) - ); - } else if (stretchFilter) { - filter = std::move(stretchFilter); - } else { - filter = std::move(imageFilter); - } - paint->setImageFilter(std::move(filter)); + paint->setImageFilter(std::move(imageFilter)); return true; } return false; @@ -256,8 +244,21 @@ void RenderNodeDrawable::drawContent(SkCanvas* canvas) const { canvas->drawAnnotation(bounds, String8::format( "SurfaceID|%" PRId64, renderNode->uniqueId()).c_str(), nullptr); } - canvas->drawImageRect(snapshotImage, bounds, bounds, sampling, &paint, - SkCanvas::kStrict_SrcRectConstraint); + + if (renderNode->hasHolePunches()) { + TransformCanvas transformCanvas(canvas); + displayList->draw(&transformCanvas); + } + + const StretchEffect& stretch = properties.layerProperties().getStretchEffect(); + if (stretch.isEmpty()) { + canvas->drawImageRect(snapshotImage, bounds, bounds, sampling, &paint, + SkCanvas::kStrict_SrcRectConstraint); + } else { + sk_sp<SkShader> stretchShader = stretch.getShader(snapshotImage); + paint.setShader(stretchShader); + canvas->drawRect(bounds, paint); + } if (!renderNode->getSkiaLayer()->hasRenderedSinceRepaint) { renderNode->getSkiaLayer()->hasRenderedSinceRepaint = true; |