OSDN Git Service

ADT/Layoutlib: properly handle stroke information.
authorXavier Ducrohet <xav@android.com>
Fri, 15 Jan 2010 03:19:06 +0000 (19:19 -0800)
committerXavier Ducrohet <xav@android.com>
Fri, 15 Jan 2010 03:43:54 +0000 (19:43 -0800)
Change-Id: Iec9284d0e65d1313739e361d1fd5a522646fd1fd

tools/layoutlib/bridge/src/android/graphics/Canvas.java
tools/layoutlib/bridge/src/android/graphics/Paint.java

index c49e11e..9111286 100644 (file)
@@ -31,6 +31,7 @@ import android.graphics.Paint.Style;
 import android.graphics.Region.Op;
 
 import java.awt.AlphaComposite;
+import java.awt.BasicStroke;
 import java.awt.Color;
 import java.awt.Composite;
 import java.awt.Graphics2D;
@@ -104,12 +105,23 @@ public class Canvas extends _Original_Canvas {
      * <p/>The object must be disposed ({@link Graphics2D#dispose()}) after being used.
      */
     private Graphics2D getNewGraphics(Paint paint, Graphics2D g) {
+
         // make new one
         g = (Graphics2D)g.create();
         g.setColor(new Color(paint.getColor()));
         int alpha = paint.getAlpha();
         float falpha = alpha / 255.f;
 
+        if (paint.getStyle() == Style.STROKE) {
+            g.setStroke(new BasicStroke(
+                    paint.getStrokeWidth(),
+                    paint.getStrokeCap().getJavaCap(),
+                    paint.getStrokeJoin().getJavaJoin(),
+                    paint.getStrokeMiter()
+                    // FIXME: add dash info.
+                    ));
+        }
+
         Xfermode xfermode = paint.getXfermode();
         if (xfermode instanceof PorterDuffXfermode) {
             PorterDuff.Mode mode = ((PorterDuffXfermode)xfermode).getMode();
@@ -784,7 +796,7 @@ public class Canvas extends _Original_Canvas {
 
     private final void doDrawRect(int left, int top, int width, int height, Paint paint) {
         // get current graphisc
-        if (width != 0 && height != 0) {
+        if (width > 0 && height > 0) {
             Graphics2D g = getGraphics2d();
 
             g = getNewGraphics(paint, g);
@@ -811,7 +823,7 @@ public class Canvas extends _Original_Canvas {
     @Override
     public void drawRoundRect(RectF rect, float rx, float ry, Paint paint) {
         // get current graphisc
-        if (rect.width() != 0 && rect.height() != 0) {
+        if (rect.width() > 0 && rect.height() > 0) {
             Graphics2D g = getGraphics2d();
 
             g = getNewGraphics(paint, g);
index 312dab3..2d03618 100644 (file)
@@ -21,6 +21,7 @@ import android.text.SpannableStringBuilder;
 import android.text.SpannedString;
 import android.text.TextUtils;
 
+import java.awt.BasicStroke;
 import java.awt.Font;
 import java.awt.Toolkit;
 import java.awt.font.FontRenderContext;
@@ -127,6 +128,19 @@ public class Paint extends _Original_Paint {
             this.nativeInt = nativeInt;
         }
         final int nativeInt;
+
+        /** custom for layoutlib */
+        public int getJavaCap() {
+            switch (this) {
+                case BUTT:
+                    return BasicStroke.CAP_BUTT;
+                case ROUND:
+                    return BasicStroke.CAP_ROUND;
+                default:
+                case SQUARE:
+                    return BasicStroke.CAP_SQUARE;
+            }
+        }
     }
 
     /**
@@ -151,6 +165,19 @@ public class Paint extends _Original_Paint {
             this.nativeInt = nativeInt;
         }
         final int nativeInt;
+
+        /** custom for layoutlib */
+        public int getJavaJoin() {
+            switch (this) {
+                default:
+                case MITER:
+                    return BasicStroke.JOIN_MITER;
+                case ROUND:
+                    return BasicStroke.JOIN_ROUND;
+                case BEVEL:
+                    return BasicStroke.JOIN_BEVEL;
+            }
+        }
     }
 
     /**