summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDeepanshu Gupta <deepanshu@google.com>2015-05-07 00:20:53 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-05-07 00:20:53 +0000
commit88b193d717bb73cbe555e4e621f7b6efdf49cdaa (patch)
tree7c4f8eafa99be1fe4dfc9c3f66cafd4b9947ba0f
parent34e0f6401e66df33ec71df7f76196bbe0eca3183 (diff)
parent047a28ec506bb40081eef6eaf8434884157709ce (diff)
downloadframeworks_base-88b193d717bb73cbe555e4e621f7b6efdf49cdaa.zip
frameworks_base-88b193d717bb73cbe555e4e621f7b6efdf49cdaa.tar.gz
frameworks_base-88b193d717bb73cbe555e4e621f7b6efdf49cdaa.tar.bz2
am 047a28ec: am 96437fb4: am 9aa600e7: Merge "LayoutLib: fix crash when shadow size <=0." into lmp-mr1-dev
* commit '047a28ec506bb40081eef6eaf8434884157709ce': LayoutLib: fix crash when shadow size <=0.
-rw-r--r--tools/layoutlib/bridge/src/android/view/RectShadowPainter.java15
1 files changed, 15 insertions, 0 deletions
diff --git a/tools/layoutlib/bridge/src/android/view/RectShadowPainter.java b/tools/layoutlib/bridge/src/android/view/RectShadowPainter.java
index ec3a8d6..30512aa 100644
--- a/tools/layoutlib/bridge/src/android/view/RectShadowPainter.java
+++ b/tools/layoutlib/bridge/src/android/view/RectShadowPainter.java
@@ -19,6 +19,7 @@ package android.view;
import com.android.layoutlib.bridge.impl.ResourceHelper;
import android.graphics.Canvas;
+import android.graphics.Canvas_Delegate;
import android.graphics.LinearGradient;
import android.graphics.Outline;
import android.graphics.Paint;
@@ -125,6 +126,9 @@ public class RectShadowPainter {
private static void sideShadow(Canvas canvas, Paint edgePaint,
RectF edgeShadowRect, float dx, float dy, int rotations) {
+ if (isRectEmpty(edgeShadowRect)) {
+ return;
+ }
int saved = canvas.save();
canvas.translate(dx, dy);
canvas.rotate(rotations * PERPENDICULAR_ANGLE);
@@ -153,4 +157,15 @@ public class RectShadowPainter {
canvas.drawPath(path, paint);
canvas.restoreToCount(saved);
}
+
+ /**
+ * Differs from {@link RectF#isEmpty()} as this first converts the rect to int and then checks.
+ * <p/>
+ * This is required because {@link Canvas_Delegate#native_drawRect(long, float, float, float,
+ * float, long)} casts the co-ordinates to int and we want to ensure that it doesn't end up
+ * drawing empty rectangles, which results in IllegalArgumentException.
+ */
+ private static boolean isRectEmpty(RectF rect) {
+ return (int) rect.left >= (int) rect.right || (int) rect.top >= (int) rect.bottom;
+ }
}