diff options
author | Xavier Ducrohet <xav@android.com> | 2011-04-06 19:08:11 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-04-06 19:08:11 -0700 |
commit | 4754c79a77dc09259dee7e018710a96fe167bb8e (patch) | |
tree | f26fcd18d855e08a3af0e42231d45d0e727b4c44 /tools | |
parent | efa98a29e01dbb4c700fd6af3353413afcb344d9 (diff) | |
parent | 59aad78eae14939c169876b2f632d005f382cf7d (diff) | |
download | frameworks_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.java | 9 | ||||
-rw-r--r-- | tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/GcSnapshot.java | 44 |
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)); } } |