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