diff options
author | Roman Kennke <roman@kennke.org> | 2007-05-22 13:12:56 +0000 |
---|---|---|
committer | Roman Kennke <roman@kennke.org> | 2007-05-22 13:12:56 +0000 |
commit | 219879c7bb5d58b05dd2edf2a30ef9123b0332a3 (patch) | |
tree | 461133f350190d81563392f215b44e64fd7dedd1 /gnu/java/awt | |
parent | 6a8d85e346ad28a9ec8079030a7c3603ffc06889 (diff) | |
download | classpath-219879c7bb5d58b05dd2edf2a30ef9123b0332a3.tar.gz |
2007-05-22 Roman Kennke <roman@kennke.org>
* 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.
Diffstat (limited to 'gnu/java/awt')
-rw-r--r-- | gnu/java/awt/peer/x/XFontPeer2.java | 2 | ||||
-rw-r--r-- | gnu/java/awt/peer/x/XGraphics2D.java | 41 |
2 files changed, 42 insertions, 1 deletions
diff --git a/gnu/java/awt/peer/x/XFontPeer2.java b/gnu/java/awt/peer/x/XFontPeer2.java index fd21ebae1..ce782a220 100644 --- a/gnu/java/awt/peer/x/XFontPeer2.java +++ b/gnu/java/awt/peer/x/XFontPeer2.java @@ -206,7 +206,7 @@ public class XFontPeer2 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(); diff --git a/gnu/java/awt/peer/x/XGraphics2D.java b/gnu/java/awt/peer/x/XGraphics2D.java index 31759548f..b42dec528 100644 --- a/gnu/java/awt/peer/x/XGraphics2D.java +++ b/gnu/java/awt/peer/x/XGraphics2D.java @@ -52,6 +52,7 @@ 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; @@ -216,6 +217,45 @@ public class XGraphics2D } } + 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); @@ -238,6 +278,7 @@ public class XGraphics2D public void setPaint(Paint p) { + super.setPaint(p); if (p instanceof Color) { Color c = (Color) p; |