From eb4889c0003a285f21798eeacc0b32e562bbe166 Mon Sep 17 00:00:00 2001 From: Jakub Grzywacz Date: Mon, 28 Oct 2024 14:55:22 +0100 Subject: [PATCH] fix: negative dx/dy in feOffset (#2515) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Summary While working on #2514 I've noticed that negative dx/dy were treated as positive. ## Test Plan Add FeOffset filter with negative dx/dy to an element. It should move closer to upper left corner. ## Compatibility | OS | Implemented | | ------- | :---------: | | Android | ✅ | --- android/src/main/java/com/horcrux/svg/FeOffsetView.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/horcrux/svg/FeOffsetView.java b/android/src/main/java/com/horcrux/svg/FeOffsetView.java index 8dac0a37..5e01b385 100644 --- a/android/src/main/java/com/horcrux/svg/FeOffsetView.java +++ b/android/src/main/java/com/horcrux/svg/FeOffsetView.java @@ -44,8 +44,10 @@ class FeOffsetView extends FilterPrimitiveView { float dy = this.mDy != null ? (float) this.relativeOnHeight(this.mDy) : 0; RectF frame = new RectF(0, 0, dx, dy); this.getSvgView().getCtm().mapRect(frame); + dx = frame.left < 0 ? frame.left : frame.width(); + dy = frame.top < 0 ? frame.top : frame.height(); - canvas.drawBitmap(source, frame.width(), frame.height(), null); + canvas.drawBitmap(source, dx, dy, null); return result; }