summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Kennke <roman@kennke.org>2007-07-16 15:04:52 +0000
committerRoman Kennke <roman@kennke.org>2007-07-16 15:04:52 +0000
commit7801c17a5db13f77124279c85c03e83f6806bc49 (patch)
treefd86050021cff43f00afdd67bdba57eb9e95ec6f
parent94b423ecc11794d77252eec9595c48c771c983f9 (diff)
downloadclasspath-7801c17a5db13f77124279c85c03e83f6806bc49.tar.gz
2007-07-13 Roman Kennke <roman@kennke.org>
* gnu/java/awt/java2d/AbstractGraphics2D.java (clip(Shape)): Call setClip when the clip changes. (drawImage): Add translation. (drawLine): Add translation. * gnu/java/awt/peer/x/PixmapVolatileImage.java (getPixmap): New method. * gnu/java/awt/peer/x/XEventPump.java (XEventPump): Name thread. Start as daemon thread. * gnu/java/awt/peer/x/XGraphics2D.java (rawDrawImage): Special handling for PixmapVolatileImage. (rawDrawLine): Don't add translation here. This is done in the superclass. (rawFillRect): Don't add translation here. This is done in the superclass. (renderScanline): Added null check.
-rw-r--r--ChangeLog18
-rw-r--r--gnu/java/awt/java2d/AbstractGraphics2D.java16
-rw-r--r--gnu/java/awt/peer/x/PixmapVolatileImage.java9
-rw-r--r--gnu/java/awt/peer/x/XEventPump.java5
-rw-r--r--gnu/java/awt/peer/x/XGraphics2D.java17
5 files changed, 52 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index 430c1bfd6..0a8d3331a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,23 @@
2007-07-13 Roman Kennke <roman@kennke.org>
+ * gnu/java/awt/java2d/AbstractGraphics2D.java
+ (clip(Shape)): Call setClip when the clip changes.
+ (drawImage): Add translation.
+ (drawLine): Add translation.
+ * gnu/java/awt/peer/x/PixmapVolatileImage.java
+ (getPixmap): New method.
+ * gnu/java/awt/peer/x/XEventPump.java
+ (XEventPump): Name thread. Start as daemon thread.
+ * gnu/java/awt/peer/x/XGraphics2D.java
+ (rawDrawImage): Special handling for PixmapVolatileImage.
+ (rawDrawLine): Don't add translation here. This is done in
+ the superclass.
+ (rawFillRect): Don't add translation here. This is done in
+ the superclass.
+ (renderScanline): Added null check.
+
+2007-07-13 Roman Kennke <roman@kennke.org>
+
* gnu/java/awt/peer/x/PixmapVolatileImage.java: New class.
* gnu/java/awt/peer/x/XGraphicsConfiguration.java
(createCompatibleImage(int,int)): Delegate to the 3-int overload.
diff --git a/gnu/java/awt/java2d/AbstractGraphics2D.java b/gnu/java/awt/java2d/AbstractGraphics2D.java
index 24256cc07..15ec90da1 100644
--- a/gnu/java/awt/java2d/AbstractGraphics2D.java
+++ b/gnu/java/awt/java2d/AbstractGraphics2D.java
@@ -914,8 +914,8 @@ public abstract class AbstractGraphics2D
{
// Initialize clip if not already present.
if (clip == null)
- clip = s;
-
+ setClip(s);
+
// This is so common, let's optimize this.
else if (clip instanceof Rectangle && s instanceof Rectangle)
{
@@ -1157,7 +1157,9 @@ public abstract class AbstractGraphics2D
{
if (isOptimized)
{
- rawDrawLine(x1, y1, x2, y2);
+ int tx = (int) transform.getTranslateX();
+ int ty = (int) transform.getTranslateY();
+ rawDrawLine(x1 + tx, y1 + ty, x2 + tx, y2 + ty);
}
else
{
@@ -1197,7 +1199,8 @@ public abstract class AbstractGraphics2D
{
if (isOptimized)
{
- rawFillRect(x, y, width, height);
+ rawFillRect(x + (int) transform.getTranslateX(),
+ y + (int) transform.getTranslateY(), width, height);
}
else
{
@@ -1390,7 +1393,10 @@ public abstract class AbstractGraphics2D
{
boolean ret;
if (isOptimized)
- ret = rawDrawImage(image, x, y, observer);
+ {
+ ret = rawDrawImage(image, x + (int) transform.getTranslateX(),
+ y + (int) transform.getTranslateY(), observer);
+ }
else
{
AffineTransform t = new AffineTransform();
diff --git a/gnu/java/awt/peer/x/PixmapVolatileImage.java b/gnu/java/awt/peer/x/PixmapVolatileImage.java
index 5e354694d..131647fab 100644
--- a/gnu/java/awt/peer/x/PixmapVolatileImage.java
+++ b/gnu/java/awt/peer/x/PixmapVolatileImage.java
@@ -173,4 +173,13 @@ class PixmapVolatileImage
return getWidth();
}
+ /**
+ * Returns the underlying X pixmap. This is used for the graphics code.
+ *
+ * @return the underlying X pixmap
+ */
+ Pixmap getPixmap()
+ {
+ return pixmap;
+ }
}
diff --git a/gnu/java/awt/peer/x/XEventPump.java b/gnu/java/awt/peer/x/XEventPump.java
index 09da06a7d..d376619c5 100644
--- a/gnu/java/awt/peer/x/XEventPump.java
+++ b/gnu/java/awt/peer/x/XEventPump.java
@@ -97,8 +97,9 @@ public class XEventPump
display = d;
windows = new HashMap();
drag = -1;
- Thread t = new Thread(this);
- t.start();
+ Thread thread = new Thread(this, "X Event Pump");
+ thread.setDaemon(true);
+ thread.start();
}
/**
diff --git a/gnu/java/awt/peer/x/XGraphics2D.java b/gnu/java/awt/peer/x/XGraphics2D.java
index 3e0fe9499..73e780cc5 100644
--- a/gnu/java/awt/peer/x/XGraphics2D.java
+++ b/gnu/java/awt/peer/x/XGraphics2D.java
@@ -94,15 +94,12 @@ public class XGraphics2D
protected void rawDrawLine(int x0, int y0, int x1, int y1)
{
- int tx = (int) transform.getTranslateX();
- int ty = (int) transform.getTranslateY();
- xdrawable.segment(xgc, x0 + tx, y0 + ty, x1 + tx, y1 + ty);
+ xdrawable.segment(xgc, x0, y0, x1, y1);
}
protected void rawFillRect(int x, int y, int w, int h)
{
- xdrawable.rectangle(xgc, x + (int) transform.getTranslateX(),
- y + (int) transform.getTranslateY(), w, h, true);
+ xdrawable.rectangle(xgc, x, y, w, h, true);
}
/**
@@ -252,7 +249,8 @@ public class XGraphics2D
xdrawable.fill_rectangle(xgc, x0, y, l, 1);
}
}
- xgc.set_foreground(old.getRGB());
+ if (old != null)
+ xgc.set_foreground(old.getRGB());
}
protected void fillScanline(int x0, int x1, int y)
@@ -314,6 +312,13 @@ public class XGraphics2D
xImage.getHeight(obs), x, y);
ret = true;
}
+ else if (image instanceof PixmapVolatileImage)
+ {
+ PixmapVolatileImage pvi = (PixmapVolatileImage) image;
+ xdrawable.copy_area(pvi.getPixmap(), xgc, 0, 0, pvi.getWidth(obs),
+ pvi.getHeight(obs), x, y);
+ ret = true;
+ }
else
{
ret = super.rawDrawImage(image, x, y, obs);