Second patch out of 3 patches...

This one fixes a problem in the escher peer, when we paint over a
pixmaps.

The X11 specs says that the image has to be fully contained in the
pixmaps, or a nice BatMatch is all we get :) (see the xlib::getImage
function for details if you are interested).

Again, the full changelog for all the patchset follows.

Thanks,
Mario

2008-06-15  Mario Torre  <[EMAIL PROTECTED]>

* gnu/java/awt/java2d/AbstractGraphics2D.java (setColor): delegate to
setPaint.
(setPaint): fix to set paint context and foreground color.
(imageCache): new field.
(drawImage): new codepath for scaling images.
(prepareImage): new method.
(getPaintContext): set paintContext appropriately.
* gnu/java/awt/java2d/RasterGraphics.java (renderScanline): new method,
override from superclass to detect correct value of y while rendering
the scanline.
* gnu/java/awt/java2d/ScanlineConverter.java (renderShape): revert
previous
patch. 
* gnu/java/awt/peer/x/XEventPump.java (findMouseEventTarget): new
method.
(handleButtonPress): use of findMouseEventTarget to detect the correct
target.
(handleButtonRelease):  likewise.
* gnu/java/awt/peer/x/XGraphics2D.java (rawDrawImage): clip the target
image
so that it is completely contained in the destination pixmaps, as per
X11
specification.
* gnu/java/awt/peer/x/XToolkit.java (createTextField): method
implemented. 
(createButton): likewise.
(prepareImage): likewise.
(createLabel): likewise.
(checkImage): likewise.
(createTextArea): likewise.
(createCheckbox): likewise.
(checkHeadLess): new method.
* gnu/javax/imageio/bmp/BMPImageWriter.java (write):
don't close the stream.
* gnu/javax/imageio/bmp/BMPImageWriterSpi.java (names): added new names
to
the list of known names for BMP.
* java/awt/image/WritableRaster.java (createWritableTranslatedChild): 
* javax/imageio/ImageIO.java (write): call dispose on ImageWriter after
writing of the image.
-- 
Mario Torre, Software Developer, http://www.jroller.com/neugens/
aicas Allerton Interworks Computer Automated Systems GmbH
Haid-und-Neu-Straße 18 * D-76131 Karlsruhe * Germany
http://www.aicas.com   * Tel: +49-721-663 968-53
pgp key: http://subkeys.pgp.net/ PGP Key ID: 80F240CF
Fingerprint: BA39 9666 94EC 8B73 27FA  FC7C 4086 63E3 80F2 40CF

USt-Id: DE216375633, Handelsregister HRB 109481, AG Mannheim
Geschäftsführer: Dr. James J. Hunt

Please, support open standards:
http://opendocumentfellowship.org/petition/
http://www.nosoftwarepatents.com/
### Eclipse Workspace Patch 1.0
#P classpath
Index: gnu/java/awt/peer/x/XGraphics2D.java
===================================================================
RCS file: /sources/classpath/classpath/gnu/java/awt/peer/x/XGraphics2D.java,v
retrieving revision 1.11
diff -u -r1.11 XGraphics2D.java
--- gnu/java/awt/peer/x/XGraphics2D.java	7 May 2008 14:21:57 -0000	1.11
+++ gnu/java/awt/peer/x/XGraphics2D.java	15 Jun 2008 17:54:47 -0000
@@ -394,9 +394,23 @@
                 xdrawable.put_image(xgc, zpixmap, x, y);
                 imageCache.put(image, zpixmap);
               } else {
-                ZPixmap zpixmap = (ZPixmap) xdrawable.image(x, y, w, h,
-                                                            0xffffffff,
-                                           gnu.x11.image.Image.Format.ZPIXMAP);
+                
+                // TODO optimize reusing the rectangles
+                Rectangle source =
+                  new Rectangle(0, 0, xdrawable.width, xdrawable.height);
+                Rectangle target = new Rectangle(x, y, w, h);
+                
+                Rectangle destination = source.intersection(target); 
+                
+                x = destination.x;
+                y = destination.y;
+                w = destination.width;
+                h = destination.height;
+                
+                ZPixmap zpixmap =
+                  (ZPixmap) xdrawable.image(x, y, w, h,
+                                            0xffffffff,
+                                            gnu.x11.image.Image.Format.ZPIXMAP);
                 for (int yy = 0; yy < h; yy++)
                   {
                     for (int xx = 0; xx < w; xx++)

Reply via email to