summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@android.com>2011-04-06 17:03:31 -0700
committerXavier Ducrohet <xav@android.com>2011-04-07 12:02:31 -0700
commit515a08b01851a1ab9386f85dee6d9fd7b65ee7ad (patch)
tree549fcb535c70f46ac97e0a369ef507c05323aa68 /tools
parentb25181aaccb00fee405251bf3575ce1d40badf46 (diff)
downloadframeworks_base-515a08b01851a1ab9386f85dee6d9fd7b65ee7ad.zip
frameworks_base-515a08b01851a1ab9386f85dee6d9fd7b65ee7ad.tar.gz
frameworks_base-515a08b01851a1ab9386f85dee6d9fd7b65ee7ad.tar.bz2
Merge 59aad78e from master. do not merge.
LayoutLib: don't render when shader's local matrix is set to 0 scale. Change-Id: I02c0ddd856026357f468dcc8b81e0520470118de
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.java46
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));
}
}