aboutsummaryrefslogtreecommitdiffstats
path: root/assetstudio/src
diff options
context:
space:
mode:
authorRoman Nurik <romannurik@google.com>2012-01-23 15:51:23 -0800
committerRoman Nurik <romannurik@google.com>2012-01-23 15:51:23 -0800
commitc83ea5b06bf11d511ea26de1ec0ac1e9023732ea (patch)
treebb9f0ae25dd1e5bf199ee898cd36bb1cf8de4a4f /assetstudio/src
parent15863d56ac9a7bd2079fd1c2d68a14a9ecbcafc8 (diff)
downloadsdk-c83ea5b06bf11d511ea26de1ec0ac1e9023732ea.zip
sdk-c83ea5b06bf11d511ea26de1ec0ac1e9023732ea.tar.gz
sdk-c83ea5b06bf11d511ea26de1ec0ac1e9023732ea.tar.bz2
ADT: Asset Studio library updates for ICS
Updates the action bar and status bar icon generators to better conform to the design guidelines. Also switches scaling logic to use an MDPI baseline rather than an HDPI baseline. Change-Id: I21c23d308f57157f1d2c02ddded143a5da188f85
Diffstat (limited to 'assetstudio/src')
-rw-r--r--assetstudio/src/com/android/assetstudiolib/ActionBarIconGenerator.java24
-rw-r--r--assetstudio/src/com/android/assetstudiolib/GraphicGenerator.java23
-rw-r--r--assetstudio/src/com/android/assetstudiolib/LauncherIconGenerator.java24
-rw-r--r--assetstudio/src/com/android/assetstudiolib/MenuIconGenerator.java10
-rw-r--r--assetstudio/src/com/android/assetstudiolib/NotificationIconGenerator.java22
-rw-r--r--assetstudio/src/com/android/assetstudiolib/TabIconGenerator.java20
-rw-r--r--assetstudio/src/com/android/assetstudiolib/Util.java19
7 files changed, 58 insertions, 84 deletions
diff --git a/assetstudio/src/com/android/assetstudiolib/ActionBarIconGenerator.java b/assetstudio/src/com/android/assetstudiolib/ActionBarIconGenerator.java
index b54aad5..9ed88e9 100644
--- a/assetstudio/src/com/android/assetstudiolib/ActionBarIconGenerator.java
+++ b/assetstudio/src/com/android/assetstudiolib/ActionBarIconGenerator.java
@@ -17,7 +17,6 @@ package com.android.assetstudiolib;
import com.android.assetstudiolib.Util.Effect;
import com.android.assetstudiolib.Util.FillEffect;
-import com.android.assetstudiolib.Util.ShadowEffect;
import java.awt.Color;
import java.awt.Graphics2D;
@@ -35,11 +34,11 @@ public class ActionBarIconGenerator extends GraphicGenerator {
@Override
public BufferedImage generate(GraphicGeneratorContext context, Options options) {
- Rectangle iconSizeHdpi = new Rectangle(0, 0, 48, 48);
- Rectangle targetRectHdpi = new Rectangle(6, 6, 36, 36);
- final float scaleFactor = GraphicGenerator.getHdpiScaleFactor(options.density);
- Rectangle imageRect = Util.scaleRectangle(iconSizeHdpi, scaleFactor);
- Rectangle targetRect = Util.scaleRectangle(targetRectHdpi, scaleFactor);
+ Rectangle iconSizeMdpi = new Rectangle(0, 0, 32, 32);
+ Rectangle targetRectMdpi = new Rectangle(4, 4, 24, 24);
+ final float scaleFactor = GraphicGenerator.getMdpiScaleFactor(options.density);
+ Rectangle imageRect = Util.scaleRectangle(iconSizeMdpi, scaleFactor);
+ Rectangle targetRect = Util.scaleRectangle(targetRectMdpi, scaleFactor);
BufferedImage outImage = Util.newArgbBufferedImage(imageRect.width, imageRect.height);
Graphics2D g = (Graphics2D) outImage.getGraphics();
@@ -51,21 +50,12 @@ public class ActionBarIconGenerator extends GraphicGenerator {
ActionBarOptions actionBarOptions = (ActionBarOptions) options;
if (actionBarOptions.theme == Theme.HOLO_LIGHT) {
Util.drawEffects(g, tempImage, 0, 0, new Effect[] {
- new FillEffect(new Color(0x898989)),
+ new FillEffect(new Color(0x333333), 0.6),
});
} else {
assert actionBarOptions.theme == Theme.HOLO_DARK;
Util.drawEffects(g, tempImage, 0, 0, new Effect[] {
- // TODO: should be white @ 60% opacity, but
- // the fill then blends with the drop shadow
- new FillEffect(new Color(0x909090)),
- new ShadowEffect(
- 0,
- 0,
- 3 * scaleFactor,
- Color.BLACK,
- 0.85,
- false),
+ new FillEffect(new Color(0xFFFFFF), 0.8)
});
}
diff --git a/assetstudio/src/com/android/assetstudiolib/GraphicGenerator.java b/assetstudio/src/com/android/assetstudiolib/GraphicGenerator.java
index 0269c74..fa81392 100644
--- a/assetstudio/src/com/android/assetstudiolib/GraphicGenerator.java
+++ b/assetstudio/src/com/android/assetstudiolib/GraphicGenerator.java
@@ -183,29 +183,14 @@ public abstract class GraphicGenerator {
}
/**
- * Returns the scale factor to apply for a given HDPI density to compute the
+ * Returns the scale factor to apply for a given MDPI density to compute the
* absolute pixel count to use to draw an icon of the given target density
*
* @param density the density
- * @return a factor to multiple hdpi distances with to compute the target density
+ * @return a factor to multiple mdpi distances with to compute the target density
*/
- public static float getHdpiScaleFactor(Density density) {
- // We used to do this:
- //return density.getDpiValue() / (float) Density.DEFAULT_DENSITY;
- // However, the HTML5 version of the AssetStudio would end up with different
- // sizes for the assets, because it uses this table:
- // studio.util.getMultBaseHdpi = function(density) {
- // switch (density) {
- // case 'xhdpi': return 1.333333;
- // case 'hdpi': return 1.0;
- // case 'mdpi': return 0.666667;
- // case 'ldpi': return 0.5;
- // }
- // return 1.0;
- // };
- // This corresponds to dividing the dpi value not by Density.MEDIUM but
- // Density.HIGH:
- return density.getDpiValue() / (float) Density.HIGH.getDpiValue();
+ public static float getMdpiScaleFactor(Density density) {
+ return density.getDpiValue() / (float) Density.MEDIUM.getDpiValue();
}
/**
diff --git a/assetstudio/src/com/android/assetstudiolib/LauncherIconGenerator.java b/assetstudio/src/com/android/assetstudiolib/LauncherIconGenerator.java
index 2f76b2d..4e0534d 100644
--- a/assetstudio/src/com/android/assetstudiolib/LauncherIconGenerator.java
+++ b/assetstudio/src/com/android/assetstudiolib/LauncherIconGenerator.java
@@ -28,20 +28,8 @@ import java.util.Map;
* A {@link GraphicGenerator} that generates Android "launcher" icons.
*/
public class LauncherIconGenerator extends GraphicGenerator {
- private static final Rectangle IMAGE_SIZE_HDPI = new Rectangle(0, 0, 72, 72);
- /* TODO: Adapt from html version:
- 'square-web-targetRect': { x: 21, y: 21, w: 470, h: 470 },
- 'circle-web-targetRect': { x: 21, y: 21, w: 470, h: 470 },
- 'square-xhdpi-targetRect': { x: 4, y: 4, w: 88, h: 88 },
- 'circle-xhdpi-targetRect': { x: 4, y: 4, w: 88, h: 88 },
- 'square-hdpi-targetRect': { x: 3, y: 3, w: 66, h: 66 },
- 'circle-hdpi-targetRect': { x: 3, y: 3, w: 66, h: 66 }, <====
- 'square-mdpi-targetRect': { x: 2, y: 2, w: 44, h: 44 },
- 'circle-mdpi-targetRect': { x: 2, y: 2, w: 44, h: 44 },
- 'square-ldpi-targetRect': { x: 1, y: 1, w: 34, h: 34 },
- 'circle-ldpi-targetRect': { x: 1, y: 1, w: 34, h: 34 }
- */
- private static final Rectangle TARGET_RECT_HDPI = new Rectangle(3, 3, 66, 66);
+ private static final Rectangle IMAGE_SIZE_MDPI = new Rectangle(0, 0, 48, 48);
+ private static final Rectangle TARGET_RECT_MDPI = new Rectangle(2, 2, 44, 44);
@Override
public BufferedImage generate(GraphicGeneratorContext context, Options options) {
@@ -61,13 +49,13 @@ public class LauncherIconGenerator extends GraphicGenerator {
BufferedImage mMaskImage = context.loadImageResource("/images/launcher_stencil/"
+ shape + "/" + density + "/mask.png");
- float scaleFactor = GraphicGenerator.getHdpiScaleFactor(launcherOptions.density);
+ float scaleFactor = GraphicGenerator.getMdpiScaleFactor(launcherOptions.density);
if (launcherOptions.isWebGraphic) {
// Target size for the web graphic is 512
- scaleFactor = 512 / (float) IMAGE_SIZE_HDPI.height;
+ scaleFactor = 512 / (float) IMAGE_SIZE_MDPI.height;
}
- Rectangle imageRect = Util.scaleRectangle(IMAGE_SIZE_HDPI, scaleFactor);
- Rectangle targetRect = Util.scaleRectangle(TARGET_RECT_HDPI, scaleFactor);
+ Rectangle imageRect = Util.scaleRectangle(IMAGE_SIZE_MDPI, scaleFactor);
+ Rectangle targetRect = Util.scaleRectangle(TARGET_RECT_MDPI, scaleFactor);
BufferedImage outImage = Util.newArgbBufferedImage(imageRect.width, imageRect.height);
Graphics2D g = (Graphics2D) outImage.getGraphics();
diff --git a/assetstudio/src/com/android/assetstudiolib/MenuIconGenerator.java b/assetstudio/src/com/android/assetstudiolib/MenuIconGenerator.java
index 8fdbddf..33b9c34 100644
--- a/assetstudio/src/com/android/assetstudiolib/MenuIconGenerator.java
+++ b/assetstudio/src/com/android/assetstudiolib/MenuIconGenerator.java
@@ -36,9 +36,9 @@ public class MenuIconGenerator extends GraphicGenerator {
@Override
public BufferedImage generate(GraphicGeneratorContext context, Options options) {
- Rectangle imageSizeHdpi = new Rectangle(0, 0, 72, 72);
- Rectangle targetRectHdpi = new Rectangle(12, 12, 48, 48);
- float scaleFactor = GraphicGenerator.getHdpiScaleFactor(options.density);
+ Rectangle imageSizeHdpi = new Rectangle(0, 0, 48, 48);
+ Rectangle targetRectHdpi = new Rectangle(8, 8, 32, 32);
+ float scaleFactor = GraphicGenerator.getMdpiScaleFactor(options.density);
Rectangle imageRect = Util.scaleRectangle(imageSizeHdpi, scaleFactor);
Rectangle targetRect = Util.scaleRectangle(targetRectHdpi, scaleFactor);
@@ -59,8 +59,8 @@ public class MenuIconGenerator extends GraphicGenerator {
new Color(0x787878))),
new ShadowEffect(
0,
- 3 * scaleFactor,
- 3 * scaleFactor,
+ 2 * scaleFactor,
+ 2 * scaleFactor,
Color.BLACK,
0.2,
true),
diff --git a/assetstudio/src/com/android/assetstudiolib/NotificationIconGenerator.java b/assetstudio/src/com/android/assetstudiolib/NotificationIconGenerator.java
index 4bda2bf..b4aa6a6 100644
--- a/assetstudio/src/com/android/assetstudiolib/NotificationIconGenerator.java
+++ b/assetstudio/src/com/android/assetstudiolib/NotificationIconGenerator.java
@@ -36,24 +36,24 @@ public class NotificationIconGenerator extends GraphicGenerator {
@Override
public BufferedImage generate(GraphicGeneratorContext context, Options options) {
- Rectangle iconSizeHdpi;
- Rectangle targetRectHdpi;
+ Rectangle iconSizeMdpi;
+ Rectangle targetRectMdpi;
NotificationOptions notificationOptions = (NotificationOptions) options;
if (notificationOptions.version == Version.OLDER) {
- iconSizeHdpi = new Rectangle(0, 0, 38, 38);
- targetRectHdpi = new Rectangle(6, 6, 26, 26);
+ iconSizeMdpi = new Rectangle(0, 0, 25, 25);
+ targetRectMdpi = new Rectangle(4, 4, 17, 17);
} else if (notificationOptions.version == Version.V11) {
- iconSizeHdpi = new Rectangle(0, 0, 48, 48);
- targetRectHdpi = new Rectangle(6, 6, 36, 36);
+ iconSizeMdpi = new Rectangle(0, 0, 24, 24);
+ targetRectMdpi = new Rectangle(1, 1, 22, 22);
} else {
assert notificationOptions.version == Version.V9;
- iconSizeHdpi = new Rectangle(0, 0, 24, 38);
- targetRectHdpi = new Rectangle(0, 7, 24, 24);
+ iconSizeMdpi = new Rectangle(0, 0, 16, 25);
+ targetRectMdpi = new Rectangle(0, 5, 16, 16);
}
- final float scaleFactor = GraphicGenerator.getHdpiScaleFactor(options.density);
- Rectangle imageRect = Util.scaleRectangle(iconSizeHdpi, scaleFactor);
- Rectangle targetRect = Util.scaleRectangle(targetRectHdpi, scaleFactor);
+ final float scaleFactor = GraphicGenerator.getMdpiScaleFactor(options.density);
+ Rectangle imageRect = Util.scaleRectangle(iconSizeMdpi, scaleFactor);
+ Rectangle targetRect = Util.scaleRectangle(targetRectMdpi, scaleFactor);
BufferedImage outImage = Util.newArgbBufferedImage(imageRect.width, imageRect.height);
Graphics2D g = (Graphics2D) outImage.getGraphics();
diff --git a/assetstudio/src/com/android/assetstudiolib/TabIconGenerator.java b/assetstudio/src/com/android/assetstudiolib/TabIconGenerator.java
index 5d8b500..3d2ac30 100644
--- a/assetstudio/src/com/android/assetstudiolib/TabIconGenerator.java
+++ b/assetstudio/src/com/android/assetstudiolib/TabIconGenerator.java
@@ -37,11 +37,11 @@ public class TabIconGenerator extends GraphicGenerator {
@Override
public BufferedImage generate(GraphicGeneratorContext context, Options options) {
- Rectangle iconSizeHdpi = new Rectangle(0, 0, 48, 48);
- Rectangle targetRectHdpi = new Rectangle(3, 3, 42, 42);
- final float scaleFactor = GraphicGenerator.getHdpiScaleFactor(options.density);
- Rectangle imageRect = Util.scaleRectangle(iconSizeHdpi, scaleFactor);
- Rectangle targetRect = Util.scaleRectangle(targetRectHdpi, scaleFactor);
+ Rectangle iconSizeMdpi = new Rectangle(0, 0, 32, 32);
+ Rectangle targetRectMdpi = new Rectangle(2, 2, 28, 28);
+ final float scaleFactor = GraphicGenerator.getMdpiScaleFactor(options.density);
+ Rectangle imageRect = Util.scaleRectangle(iconSizeMdpi, scaleFactor);
+ Rectangle targetRect = Util.scaleRectangle(targetRectMdpi, scaleFactor);
BufferedImage outImage = Util.newArgbBufferedImage(imageRect.width, imageRect.height);
Graphics2D g = (Graphics2D) outImage.getGraphics();
@@ -62,8 +62,8 @@ public class TabIconGenerator extends GraphicGenerator {
new Color(0x787878))),
new ShadowEffect(
0,
- 3 * scaleFactor,
- 3 * scaleFactor,
+ 2 * scaleFactor,
+ 2 * scaleFactor,
Color.BLACK,
0.2,
true),
@@ -88,7 +88,7 @@ public class TabIconGenerator extends GraphicGenerator {
new ShadowEffect(
0,
0,
- 5 * scaleFactor,
+ 3 * scaleFactor,
Color.BLACK,
0.25,
false),
@@ -106,8 +106,8 @@ public class TabIconGenerator extends GraphicGenerator {
new Color(0xdfdfdf))),
new ShadowEffect(
0,
- 3 * scaleFactor,
- 3 * scaleFactor,
+ 2 * scaleFactor,
+ 2 * scaleFactor,
Color.BLACK,
0.1,
true),
diff --git a/assetstudio/src/com/android/assetstudiolib/Util.java b/assetstudio/src/com/android/assetstudiolib/Util.java
index 927ca30..ee2a5f7 100644
--- a/assetstudio/src/com/android/assetstudiolib/Util.java
+++ b/assetstudio/src/com/android/assetstudiolib/Util.java
@@ -47,10 +47,10 @@ public class Util {
*/
public static Rectangle scaleRectangle(Rectangle rect, float scaleFactor) {
return new Rectangle(
- (int) (rect.x * scaleFactor),
- (int) (rect.y * scaleFactor),
- (int) (rect.width * scaleFactor),
- (int) (rect.height * scaleFactor));
+ (int) Math.round(rect.x * scaleFactor),
+ (int) Math.round(rect.y * scaleFactor),
+ (int) Math.round(rect.width * scaleFactor),
+ (int) Math.round(rect.height * scaleFactor));
}
/**
@@ -279,6 +279,7 @@ public class Util {
final Rectangle imageRect = new Rectangle(0, 0, source.getWidth(), source.getHeight());
BufferedImage out = newArgbBufferedImage(imageRect.width, imageRect.height);
Graphics2D g2 = (Graphics2D) out.getGraphics();
+ double fillOpacity = 1.0;
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f));
g2.drawImage(source, 0, 0, null);
@@ -288,6 +289,7 @@ public class Util {
for (FillEffect effect : fillEffects) {
g2.setPaint(effect.paint);
g2.fillRect(0, 0, imageRect.width, imageRect.height);
+ fillOpacity = Math.max(0, Math.min(1, effect.opacity));
}
// Inner shadows
@@ -309,7 +311,9 @@ public class Util {
0, 0, null);
}
+ g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, (float) fillOpacity));
g.drawImage(out, x, y, null);
+ g.setComposite(oldComposite);
}
/**
@@ -432,9 +436,16 @@ public class Util {
*/
public static class FillEffect extends Effect {
public Paint paint;
+ public double opacity;
+
+ public FillEffect(Paint paint, double opacity) {
+ this.paint = paint;
+ this.opacity = opacity;
+ }
public FillEffect(Paint paint) {
this.paint = paint;
+ this.opacity = 1.0;
}
}
}