Hi,
you forgot to commit the changelog entry. Did that for you.

Regards
Robert

Roman Kennke schrieb:
> This brings the X peers up to the recent enhancement of the rasterizer.
> 
> 2007-05-22  Roman Kennke  <[EMAIL PROTECTED]>
> 
>         * gnu/java/awt/peer/x/XFontPeer2.java
>         (XFontMetrics.charWidth): Use cached Point2D instance.
>         * gnu/java/awt/peer/x/XGraphics2D.java
>         (renderScanline): New method. Renders a scanline according to
>         the coverage information.
>         (setPaint): Call super, so that the state is updated correctly.
> 
> /Roman
> 
> 
> ------------------------------------------------------------------------
> 
> Index: gnu/java/awt/peer/x/XFontPeer2.java
> ===================================================================
> RCS file: /cvsroot/classpath/classpath/gnu/java/awt/peer/x/XFontPeer2.java,v
> retrieving revision 1.4
> diff -u -1 -5 -r1.4 XFontPeer2.java
> --- gnu/java/awt/peer/x/XFontPeer2.java       8 May 2007 15:03:07 -0000       
> 1.4
> +++ gnu/java/awt/peer/x/XFontPeer2.java       22 May 2007 13:12:05 -0000
> @@ -194,31 +194,31 @@
>                                             false, false, false);
>      }
>      
>      public int getHeight()
>      {
>        GlyphVector gv = fontDelegate.createGlyphVector(getFont(),
>                      new FontRenderContext(IDENDITY, false, false),
>                      new StringCharacterIterator("m"));
>        Rectangle2D b = gv.getVisualBounds();
>        return (int) b.getHeight();
>      }
>  
>      public int charWidth(char c)
>      {
>        int code = fontDelegate.getGlyphIndex(c);
> -      Point2D advance = new Point2D.Double();
> +      Point2D advance = cachedPoint;
>        fontDelegate.getAdvance(code, font.getSize2D(), IDENDITY,
>                                false, false, true, advance);
>        return (int) advance.getX();
>      }
>  
>      public int charsWidth(char[] chars, int offs, int len)
>      {
>        return stringWidth(new String(chars, offs, len));
>      }
>  
>      public int stringWidth(String s)
>      {
>        GlyphVector gv = fontDelegate.createGlyphVector(getFont(),
>                      new FontRenderContext(IDENDITY, false, false),
>                      new StringCharacterIterator(s));
> Index: gnu/java/awt/peer/x/XGraphics2D.java
> ===================================================================
> RCS file: /cvsroot/classpath/classpath/gnu/java/awt/peer/x/XGraphics2D.java,v
> retrieving revision 1.2
> diff -u -1 -5 -r1.2 XGraphics2D.java
> --- gnu/java/awt/peer/x/XGraphics2D.java      30 Apr 2007 20:30:56 -0000      
> 1.2
> +++ gnu/java/awt/peer/x/XGraphics2D.java      22 May 2007 13:12:05 -0000
> @@ -40,30 +40,31 @@
>  import java.awt.Color;
>  import java.awt.Graphics;
>  import java.awt.GraphicsConfiguration;
>  import java.awt.Image;
>  import java.awt.Paint;
>  import java.awt.Rectangle;
>  import java.awt.Shape;
>  import java.awt.Toolkit;
>  import java.awt.geom.AffineTransform;
>  import java.awt.image.ColorModel;
>  import java.awt.image.ImageObserver;
>  import java.awt.image.Raster;
>  import java.util.HashMap;
>  
>  import gnu.java.awt.java2d.AbstractGraphics2D;
> +import gnu.java.awt.java2d.ScanlineCoverage;
>  import gnu.x11.Colormap;
>  import gnu.x11.Drawable;
>  import gnu.x11.GC;
>  import gnu.x11.image.ZPixmap;
>  
>  public class XGraphics2D
>    extends AbstractGraphics2D
>  {
>  
>    /**
>     * The X Drawable to draw on.
>     */
>    private Drawable xdrawable;
>  
>    /**
> @@ -204,52 +205,92 @@
>                {
>                  pixel = raster.getPixel(tx, ty, pixel);
>                  //System.err.println("tx: " + tx + ", ty: " + ty + ", pixel: 
> " + pixel[0] + ", " + pixel[1] + ", " + pixel[2]);
>  //              System.err.print("r: " + pixel[0]);
>  //              System.err.print(", g: " + pixel[1]);
>  //              System.err.println(", b: " + pixel[2]);
>                  zPixmap.set_red(tx - x, ty - y, pixel[0]);
>                  zPixmap.set_green(tx - x, ty - y, pixel[1]);
>                  zPixmap.set_blue(tx - x, ty - y, pixel[2]);
>                }
>            }
>          xdrawable.put_image(xgc, zPixmap, x, y);
>        }
>    }
>  
> +  public void renderScanline(int y, ScanlineCoverage c)
> +  {
> +    ScanlineCoverage.Coverage start = c.iterate();
> +    ScanlineCoverage.Coverage end = c.next();
> +    assert (start != null);
> +    assert (end != null);
> +    int coverageAlpha = 0;
> +    int maxCoverage = c.getMaxCoverage();
> +    Color old = getColor();
> +    Color col = getColor();
> +    if (col == null)
> +      col = Color.BLACK;
> +    do
> +      {
> +        // TODO: Dumb implementation for testing.
> +        coverageAlpha = coverageAlpha + start.getCoverageDelta();
> +        if (coverageAlpha > 0)
> +          {
> +            int red = col.getRed();
> +            int green = col.getGreen();
> +            int blue = col.getBlue();
> +            if (coverageAlpha < c.getMaxCoverage())
> +              {
> +                float alpha = coverageAlpha / maxCoverage;
> +                red = 255 - (int) ((255 - red) * alpha);
> +                green = 255 - (int) ((255 - green) * alpha);
> +                blue = 255 - (int) ((255 - blue) * alpha);
> +              }
> +            xgc.set_foreground(red << 16 | green << 8 | blue);
> +            int x0 = start.getXPos();
> +            int x1 = end.getXPos();
> +            xdrawable.fill_rectangle(xgc, x0, y, x1 - x0, 1);
> +          }
> +        start = end;
> +        end = c.next();
> +      } while (end != null);
> +    xgc.set_foreground(old.getRGB());
> +  }
> +
>    protected void fillScanline(int x0, int x1, int y)
>    {
>      xdrawable.segment(xgc, x0, y, x1, y);
>    }
>  
>    protected void fillScanlineAA(int x0, int x1, int y, int alpha)
>    {
>      //System.err.println("fillScanlineAA: " + x0 + ", " + x1 + ", " + y + ", 
> " + alpha);
>      // FIXME: This is for testing only.
>      Color c = getColor();
>      setColor(new Color(255-alpha, 255-alpha, 255-alpha));
>      xdrawable.segment(xgc, x0, y, x1, y);
>      setColor(c);
>    }
>  
>    protected void init()
>    {
>      super.init();
>    }
>  
>    public void setPaint(Paint p)
>    {
> +    super.setPaint(p);
>      if (p instanceof Color)
>        {
>          Color c = (Color) p;
>          XToolkit tk = (XToolkit) Toolkit.getDefaultToolkit();
>          HashMap colorMap = tk.colorMap;
>          gnu.x11.Color col = (gnu.x11.Color) colorMap.get(c);
>          if (col == null)
>            {
>              Colormap map = xdrawable.display.default_colormap;
>              col = map.alloc_color (c.getRed() * 256,
>                                     c.getGreen() * 256,
>                                     c.getBlue() * 256);
>              colorMap.put(c, col);
>            }
>          xgc.set_foreground(col);

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to