diff options
author | Xavier Ducrohet <xav@android.com> | 2011-04-07 13:38:13 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-04-07 13:38:13 -0700 |
commit | 96ac85607b1462508981936b1be29ae5f9e4271d (patch) | |
tree | f515b26ea4f8a4cfec73583fda12a4f01b59e5bc | |
parent | 70c3d1c23b5d4398cc561ec9ddbe868b3182cc74 (diff) | |
parent | 515a08b01851a1ab9386f85dee6d9fd7b65ee7ad (diff) | |
download | frameworks_base-96ac85607b1462508981936b1be29ae5f9e4271d.zip frameworks_base-96ac85607b1462508981936b1be29ae5f9e4271d.tar.gz frameworks_base-96ac85607b1462508981936b1be29ae5f9e4271d.tar.bz2 |
am 515a08b0: Merge 59aad78e from master. do not merge.
* commit '515a08b01851a1ab9386f85dee6d9fd7b65ee7ad':
Merge 59aad78e from master. do not merge.
-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 | 46 |
2 files changed, 36 insertions, 19 deletions
diff --git a/tools/layoutlib/bridge/src/android/graphics/Shader_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Shader_Delegate.java index 368c0384..65919ad 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 @@ -101,5 +109,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 21d6b1a..89ef18e 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 @@ -609,12 +609,14 @@ public class GcSnapshot { createCustomGraphics(originalGraphics, paint, compositeOnly, forceSrcMode) : (Graphics2D) originalGraphics.create(); - try { - drawable.draw(configuredGraphics2D, paint); - layer.change(); - } finally { - // dispose Graphics2D object - configuredGraphics2D.dispose(); + if (configuredGraphics2D != null) { + try { + drawable.draw(configuredGraphics2D, paint); + layer.change(); + } finally { + // dispose Graphics2D object + configuredGraphics2D.dispose(); + } } } @@ -687,11 +689,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(); } @@ -721,11 +725,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, @@ -749,7 +759,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(); @@ -773,7 +783,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)); } } |