diff options
| author | John Reck <jreck@google.com> | 2021-02-02 14:49:42 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2021-02-02 14:49:42 +0000 |
| commit | 7cf75f0b150f1a2b99a74671b578f2889a2e5e3b (patch) | |
| tree | 7f9f04e7c34dc5c6b346b28f500664e2f1159024 /libs/hwui/pipeline/skia/RenderNodeDrawable.cpp | |
| parent | fa00d3293a947240328c2c327fe7d1ff9e2ea073 (diff) | |
| parent | 5cb290bf54fb3453d1a0af98d4de35ef4a809a85 (diff) | |
Merge "Add stretch plumbing" into sc-dev
Diffstat (limited to 'libs/hwui/pipeline/skia/RenderNodeDrawable.cpp')
| -rw-r--r-- | libs/hwui/pipeline/skia/RenderNodeDrawable.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp b/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp index 75815bb6e63d..c01021221f37 100644 --- a/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp +++ b/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp @@ -20,6 +20,8 @@ #include "SkiaDisplayList.h" #include "utils/TraceUtils.h" +#include <include/effects/SkImageFilters.h> + #include <optional> namespace android { @@ -171,11 +173,25 @@ static bool layerNeedsPaint(const LayerProperties& properties, float alphaMultip SkPaint* paint) { if (alphaMultiplier < 1.0f || properties.alpha() < 255 || properties.xferMode() != SkBlendMode::kSrcOver || properties.getColorFilter() != nullptr || - properties.getImageFilter() != nullptr) { + properties.getImageFilter() != nullptr || !properties.getStretchEffect().isEmpty()) { paint->setAlpha(properties.alpha() * alphaMultiplier); paint->setBlendMode(properties.xferMode()); paint->setColorFilter(sk_ref_sp(properties.getColorFilter())); - paint->setImageFilter(sk_ref_sp(properties.getImageFilter())); + + sk_sp<SkImageFilter> imageFilter = sk_ref_sp(properties.getImageFilter()); + sk_sp<SkImageFilter> stretchFilter = properties.getStretchEffect().getImageFilter(); + 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)); return true; } return false; |
