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);
signature.asc
Description: OpenPGP digital signature
