summaryrefslogtreecommitdiff
path: root/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp
diff options
context:
space:
mode:
authorScott Lobdell <slobdell@google.com>2021-04-23 22:36:54 +0000
committerScott Lobdell <slobdell@google.com>2021-04-23 22:36:54 +0000
commit81abbc1d7858f29d3344ff6f1702ece80eab8341 (patch)
treeb06d90c8277a04e4f8156d9b20d1611a974156e0 /libs/hwui/pipeline/skia/RenderNodeDrawable.cpp
parent857ef130fbeed8d0eb46cc1bfc9f75138f11c4e6 (diff)
parentbd33c1d7942f5aad3e313cbd447056b720d1149b (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.cpp33
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;