summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@android.com>2011-04-06 19:08:11 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2011-04-06 19:08:11 -0700
commit4754c79a77dc09259dee7e018710a96fe167bb8e (patch)
treef26fcd18d855e08a3af0e42231d45d0e727b4c44 /tools
parentefa98a29e01dbb4c700fd6af3353413afcb344d9 (diff)
parent59aad78eae14939c169876b2f632d005f382cf7d (diff)
downloadframeworks_base-4754c79a77dc09259dee7e018710a96fe167bb8e.zip
frameworks_base-4754c79a77dc09259dee7e018710a96fe167bb8e.tar.gz
frameworks_base-4754c79a77dc09259dee7e018710a96fe167bb8e.tar.bz2
am 59aad78e: LayoutLib: don\'t render when shader\'s local matrix is set to 0 scale.
* commit '59aad78eae14939c169876b2f632d005f382cf7d': LayoutLib: don't render when shader's local matrix is set to 0 scale.
Diffstat (limited to 'tools')
-rw-r--r--tools/layoutlib/bridge/src/android/graphics/Shader_Delegate.java9
-rw-r--r--tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/GcSnapshot.java44
2 files changed, 35 insertions, 18 deletions
diff --git a/tools/layoutlib/bridge/src/android/graphics/Shader_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Shader_Delegate.java
index c6dd54b..472fc80 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Shader_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Shader_Delegate.java
@@ -73,6 +73,14 @@ public abstract class Shader_Delegate {
public abstract boolean isSupported();
public abstract String getSupportMessage();
+ public boolean isValid() {
+ if (mLocalMatrix != null && mLocalMatrix.getAffineTransform().getDeterminant() == 0) {
+ return false;
+ }
+
+ return true;
+ }
+
// ---- native methods ----
@LayoutlibDelegate
@@ -126,5 +134,4 @@ public abstract class Shader_Delegate {
return new java.awt.geom.AffineTransform();
}
-
}
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/GcSnapshot.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/GcSnapshot.java
index 1cf64a8..2abe56c 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/GcSnapshot.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/GcSnapshot.java
@@ -603,11 +603,13 @@ public class GcSnapshot {
createCustomGraphics(originalGraphics, paint, compositeOnly, forceSrcMode) :
(Graphics2D) originalGraphics.create();
- try {
- drawable.draw(configuredGraphics2D, paint);
- } finally {
- // dispose Graphics2D object
- configuredGraphics2D.dispose();
+ if (configuredGraphics2D != null) {
+ try {
+ drawable.draw(configuredGraphics2D, paint);
+ } finally {
+ // dispose Graphics2D object
+ configuredGraphics2D.dispose();
+ }
}
}
@@ -680,11 +682,13 @@ public class GcSnapshot {
Graphics2D g = createCustomGraphics(baseGfx, mLocalLayerPaint,
true /*alphaOnly*/, false /*forceSrcMode*/);
- g.drawImage(mLocalLayer.getImage(),
- mLayerBounds.left, mLayerBounds.top, mLayerBounds.right, mLayerBounds.bottom,
- mLayerBounds.left, mLayerBounds.top, mLayerBounds.right, mLayerBounds.bottom,
- null);
- g.dispose();
+ if (g != null) {
+ g.drawImage(mLocalLayer.getImage(),
+ mLayerBounds.left, mLayerBounds.top, mLayerBounds.right, mLayerBounds.bottom,
+ mLayerBounds.left, mLayerBounds.top, mLayerBounds.right, mLayerBounds.bottom,
+ null);
+ g.dispose();
+ }
baseGfx.dispose();
}
@@ -714,11 +718,17 @@ public class GcSnapshot {
Shader_Delegate shaderDelegate = paint.getShader();
if (shaderDelegate != null) {
if (shaderDelegate.isSupported()) {
- java.awt.Paint shaderPaint = shaderDelegate.getJavaPaint();
- assert shaderPaint != null;
- if (shaderPaint != null) {
- g.setPaint(shaderPaint);
- customShader = true;
+ // shader could have a local matrix that's not valid (for instance 0 scaling).
+ if (shaderDelegate.isValid()) {
+ java.awt.Paint shaderPaint = shaderDelegate.getJavaPaint();
+ assert shaderPaint != null;
+ if (shaderPaint != null) {
+ g.setPaint(shaderPaint);
+ customShader = true;
+ }
+ } else {
+ g.dispose();
+ return null;
}
} else {
Bridge.getLog().fidelityWarning(LayoutLog.TAG_SHADER,
@@ -742,7 +752,7 @@ public class GcSnapshot {
if (forceSrcMode) {
g.setComposite(AlphaComposite.getInstance(
- AlphaComposite.SRC, (float) alpha / 255.f));
+ AlphaComposite.SRC, alpha / 255.f));
} else {
boolean customXfermode = false;
Xfermode_Delegate xfermodeDelegate = paint.getXfermode();
@@ -766,7 +776,7 @@ public class GcSnapshot {
// that will handle the alpha.
if (customXfermode == false && alpha != 0xFF) {
g.setComposite(AlphaComposite.getInstance(
- AlphaComposite.SRC_OVER, (float) alpha / 255.f));
+ AlphaComposite.SRC_OVER, alpha / 255.f));
}
}