summaryrefslogtreecommitdiff
path: root/gnu/java
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/java')
-rw-r--r--gnu/java/awt/java2d/AbstractGraphics2D.java88
-rw-r--r--gnu/java/awt/java2d/RasterGraphics.java6
-rw-r--r--gnu/java/awt/java2d/ScanlineConverter.java2
-rw-r--r--gnu/java/awt/peer/x/GLGraphics.java12
-rw-r--r--gnu/java/awt/peer/x/XGraphicsConfiguration.java9
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);
}
/**