diff options
Diffstat (limited to 'libs/hwui/pipeline/skia/RenderNodeDrawable.cpp')
-rw-r--r-- | libs/hwui/pipeline/skia/RenderNodeDrawable.cpp | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp b/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp index 5627a7e27232..77d99a67b602 100644 --- a/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp +++ b/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp @@ -180,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; @@ -262,8 +249,16 @@ void RenderNodeDrawable::drawContent(SkCanvas* canvas) const { TransformCanvas transformCanvas(canvas); displayList->draw(&transformCanvas); } - canvas->drawImageRect(snapshotImage, bounds, bounds, sampling, &paint, - SkCanvas::kStrict_SrcRectConstraint); + + 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; |