Add a linear variant of the stretch effect
Supports SurfaceViews & everything
Test: setprop debug.hwui.stretch_mode 1
Bug: 187718492
Change-Id: I9a222fa4c1a40e80a74cdaf75becb9524cbeed9b
diff --git a/libs/hwui/effects/StretchEffect.h b/libs/hwui/effects/StretchEffect.h
index 6d517ac..c49d53a 100644
--- a/libs/hwui/effects/StretchEffect.h
+++ b/libs/hwui/effects/StretchEffect.h
@@ -20,6 +20,7 @@
#include <SkImage.h>
#include <SkImageFilter.h>
+#include <SkMatrix.h>
#include <SkPoint.h>
#include <SkRect.h>
#include <SkRuntimeEffect.h>
@@ -99,6 +100,14 @@
const SkVector getStretchDirection() const { return mStretchDirection; }
+ SkMatrix makeLinearStretch(float width, float height) const {
+ SkMatrix matrix;
+ auto [sX, sY] = getStretchDirection();
+ matrix.setScale(1 + std::abs(sX), 1 + std::abs(sY), sX > 0 ? 0 : width,
+ sY > 0 ? 0 : height);
+ return matrix;
+ }
+
private:
static sk_sp<SkRuntimeEffect> getStretchEffect();
mutable SkVector mStretchDirection{0, 0};