diff options
Diffstat (limited to 'gnu/java')
| -rw-r--r-- | gnu/java/awt/java2d/AbstractGraphics2D.java | 88 | ||||
| -rw-r--r-- | gnu/java/awt/java2d/RasterGraphics.java | 6 | ||||
| -rw-r--r-- | gnu/java/awt/java2d/ScanlineConverter.java | 2 | ||||
| -rw-r--r-- | gnu/java/awt/peer/x/GLGraphics.java | 12 | ||||
| -rw-r--r-- | gnu/java/awt/peer/x/XGraphicsConfiguration.java | 9 |
5 files changed, 88 insertions, 29 deletions
diff --git a/gnu/java/awt/java2d/AbstractGraphics2D.java b/gnu/java/awt/java2d/AbstractGraphics2D.java index 36ba0f430..a65fde9b2 100644 --- a/gnu/java/awt/java2d/AbstractGraphics2D.java +++ b/gnu/java/awt/java2d/AbstractGraphics2D.java @@ -37,6 +37,7 @@ exception statement from your version. */ package gnu.java.awt.java2d; +import gnu.java.awt.peer.x.XDialogPeer; import gnu.java.util.LRUCache; import java.awt.AWTError; @@ -210,14 +211,20 @@ public abstract class AbstractGraphics2D /** * The paint context during rendering. */ - private PaintContext paintContext; + private PaintContext paintContext = null; /** * The background. */ - private Color background; + private Color background = Color.WHITE; /** + * Foreground color, as set by setColor. + */ + private Color foreground = Color.BLACK; + private boolean isForegroundColorNull = true; + + /** * The current font. */ private Font font; @@ -266,15 +273,19 @@ public abstract class AbstractGraphics2D private static final BasicStroke STANDARD_STROKE = new BasicStroke(); - private static final HashMap STANDARD_HINTS; - static { - HashMap hints = new HashMap(); - hints.put(RenderingHints.KEY_TEXT_ANTIALIASING, - RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT); - hints.put(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_DEFAULT); - STANDARD_HINTS = hints; - } + private static final HashMap<Key, Object> STANDARD_HINTS; + static + { + + HashMap<Key, Object> hints = new HashMap<Key, Object>(); + hints.put(RenderingHints.KEY_TEXT_ANTIALIASING, + RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT); + hints.put(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_DEFAULT); + + STANDARD_HINTS = hints; + } + /** * Creates a new AbstractGraphics2D instance. */ @@ -1058,10 +1069,10 @@ public abstract class AbstractGraphics2D */ public Color getColor() { - Color c = null; - if (paint instanceof Color) - c = (Color) paint; - return c; + if (isForegroundColorNull) + return null; + + return this.foreground; } /** @@ -1071,7 +1082,22 @@ public abstract class AbstractGraphics2D */ public void setColor(Color color) { - setPaint(color); + if (color == null) + { + this.foreground = Color.BLACK; + isForegroundColorNull = true; + } + else + { + this.foreground = color; + isForegroundColorNull = false; + } + + // free resources if needed, then put the paint context to null + if (this.paintContext != null) + this.paintContext.dispose(); + + this.paintContext = null; } public void setPaintMode() @@ -1639,10 +1665,7 @@ public abstract class AbstractGraphics2D * * @return the bounds of the target */ - protected Rectangle getDeviceBounds() - { - return destinationRaster.getBounds(); - } + protected abstract Rectangle getDeviceBounds(); /** * Draws a line in optimization mode. The implementation should respect the @@ -1763,7 +1786,8 @@ public abstract class AbstractGraphics2D */ public void renderScanline(int y, ScanlineCoverage c) { - PaintContext pCtx = paintContext; + PaintContext pCtx = getPaintContext(); + int x0 = c.getMinX(); int x1 = c.getMaxX(); Raster paintRaster = pCtx.getRaster(x0, y, x1 - x0, 1); @@ -1797,9 +1821,11 @@ public abstract class AbstractGraphics2D CompositeContext cCtx = composite.createContext(paintColorModel, getColorModel(), renderingHints); - WritableRaster targetChild = destinationRaster.createWritableTranslatedChild(-x0,- y); + WritableRaster raster = getDestinationRaster(); + WritableRaster targetChild = raster.createWritableTranslatedChild(-x0, -y); + cCtx.compose(paintRaster, targetChild, targetChild); - updateRaster(destinationRaster, x0, y, x1 - x0, 1); + updateRaster(raster, x0, y, x1 - x0, 1); cCtx.dispose(); } @@ -1986,4 +2012,20 @@ public abstract class AbstractGraphics2D } } + private PaintContext getPaintContext() + { + if (this.paintContext == null) + { + return this.foreground.createContext(getColorModel(), + getDeviceBounds(), + getClipBounds(), + getTransform(), + getRenderingHints()); + } + else + { + return this.paintContext; + } + } + } diff --git a/gnu/java/awt/java2d/RasterGraphics.java b/gnu/java/awt/java2d/RasterGraphics.java index 98d47b406..013782204 100644 --- a/gnu/java/awt/java2d/RasterGraphics.java +++ b/gnu/java/awt/java2d/RasterGraphics.java @@ -39,6 +39,7 @@ exception statement from your version. */ package gnu.java.awt.java2d; import java.awt.GraphicsConfiguration; +import java.awt.Rectangle; import java.awt.image.ColorModel; import java.awt.image.WritableRaster; @@ -100,4 +101,9 @@ public class RasterGraphics return null; } + @Override + protected Rectangle getDeviceBounds() + { + return this.raster.getBounds(); + } } diff --git a/gnu/java/awt/java2d/ScanlineConverter.java b/gnu/java/awt/java2d/ScanlineConverter.java index cc4bbef28..ac27cc18d 100644 --- a/gnu/java/awt/java2d/ScanlineConverter.java +++ b/gnu/java/awt/java2d/ScanlineConverter.java @@ -206,7 +206,7 @@ public final class ScanlineConverter // Ok, now we can perform the actual scanlining. int realY = Fixed.intValue(FIXED_DIGITS, y + resolution); boolean push = lastRealY != realY; - doScanline(p, y, push, haveClip); + doScanline(p, realY, push, haveClip); // Remove obsolete active edges. //activeEdges.remove(y + halfStep); diff --git a/gnu/java/awt/peer/x/GLGraphics.java b/gnu/java/awt/peer/x/GLGraphics.java index c80c85c28..8fae5ee7e 100644 --- a/gnu/java/awt/peer/x/GLGraphics.java +++ b/gnu/java/awt/peer/x/GLGraphics.java @@ -39,7 +39,9 @@ package gnu.java.awt.peer.x; import java.awt.Color; import java.awt.GraphicsConfiguration; +import java.awt.Rectangle; import java.awt.image.ColorModel; +import java.util.Map; import gnu.java.awt.java2d.AbstractGraphics2D; import gnu.x11.extension.glx.GL; @@ -70,7 +72,7 @@ public class GLGraphics extends AbstractGraphics2D public void setBackground(Color b) { super.setBackground(b); - gl.clear_color(b.getRed() / 255.F, b.getGreen() / 255.F, + gl.clearColor(b.getRed() / 255.F, b.getGreen() / 255.F, b.getBlue() / 255.F, b.getAlpha() / 255.F); } @@ -120,4 +122,12 @@ public class GLGraphics extends AbstractGraphics2D throw new UnsupportedOperationException("Not yet implemented"); } + @Override + protected Rectangle getDeviceBounds() + { + // FIXME: not sure it's correct + return new Rectangle(0, 0, + gl.display.default_screen.width, + gl.display.default_screen.height); + } } diff --git a/gnu/java/awt/peer/x/XGraphicsConfiguration.java b/gnu/java/awt/peer/x/XGraphicsConfiguration.java index 85f72a4ef..becb92a7d 100644 --- a/gnu/java/awt/peer/x/XGraphicsConfiguration.java +++ b/gnu/java/awt/peer/x/XGraphicsConfiguration.java @@ -146,8 +146,7 @@ public class XGraphicsConfiguration public AffineTransform getDefaultTransform() { - // TODO: Implement this. - throw new UnsupportedOperationException("Not yet implemented."); + return new AffineTransform(); } public AffineTransform getNormalizingTransform() @@ -158,8 +157,10 @@ public class XGraphicsConfiguration public Rectangle getBounds() { - // TODO: Implement this. - throw new UnsupportedOperationException("Not yet implemented."); + Display d = device.getDisplay(); + Screen screen = d.default_screen; + + return new Rectangle(0, 0, screen.width, screen.height); } /** |
