summaryrefslogtreecommitdiff
path: root/gnu/java/awt
diff options
context:
space:
mode:
authorRoman Kennke <roman@kennke.org>2007-05-22 13:12:56 +0000
committerRoman Kennke <roman@kennke.org>2007-05-22 13:12:56 +0000
commit219879c7bb5d58b05dd2edf2a30ef9123b0332a3 (patch)
tree461133f350190d81563392f215b44e64fd7dedd1 /gnu/java/awt
parent6a8d85e346ad28a9ec8079030a7c3603ffc06889 (diff)
downloadclasspath-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.java2
-rw-r--r--gnu/java/awt/peer/x/XGraphics2D.java41
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;