[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[commit-cp] classpath ChangeLog gnu/java/awt/peer/gtk/Cairo...
From: |
Mark Wielaard |
Subject: |
[commit-cp] classpath ChangeLog gnu/java/awt/peer/gtk/Cairo... |
Date: |
Tue, 13 Jun 2006 12:59:22 +0000 |
CVSROOT: /cvsroot/classpath
Module name: classpath
Changes by: Mark Wielaard <mark> 06/06/13 12:59:22
Modified files:
. : ChangeLog
gnu/java/awt/peer/gtk: CairoGraphics2D.java
ComponentGraphics.java
Log message:
* gnu/java/awt/peer/gtk/CairoGraphics2D.java (drawImage): Don't
allocate unused AffineTransform. Add comment about conversion to
BufferedImage.
* gnu/java/awt/peer/gtk/ComponentGraphics.java (drawImage):
Recognize identity transform as "easy". Always convert to
BufferedImage before calling super.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/classpath/ChangeLog?cvsroot=classpath&r1=1.7794&r2=1.7795
http://cvs.savannah.gnu.org/viewcvs/classpath/gnu/java/awt/peer/gtk/CairoGraphics2D.java?cvsroot=classpath&r1=1.21&r2=1.22
http://cvs.savannah.gnu.org/viewcvs/classpath/gnu/java/awt/peer/gtk/ComponentGraphics.java?cvsroot=classpath&r1=1.15&r2=1.16
Patches:
Index: ChangeLog
===================================================================
RCS file: /cvsroot/classpath/classpath/ChangeLog,v
retrieving revision 1.7794
retrieving revision 1.7795
diff -u -b -r1.7794 -r1.7795
--- ChangeLog 13 Jun 2006 12:37:54 -0000 1.7794
+++ ChangeLog 13 Jun 2006 12:59:19 -0000 1.7795
@@ -1,3 +1,12 @@
+2006-06-13 Mark Wielaard <address@hidden>
+
+ * gnu/java/awt/peer/gtk/CairoGraphics2D.java (drawImage): Don't
+ allocate unused AffineTransform. Add comment about conversion to
+ BufferedImage.
+ * gnu/java/awt/peer/gtk/ComponentGraphics.java (drawImage):
+ Recognize identity transform as "easy". Always convert to
+ BufferedImage before calling super.
+
2006-06-13 Roman Kennke <address@hidden>
* java/awt/Component.java
Index: gnu/java/awt/peer/gtk/CairoGraphics2D.java
===================================================================
RCS file:
/cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/CairoGraphics2D.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -b -r1.21 -r1.22
--- gnu/java/awt/peer/gtk/CairoGraphics2D.java 12 Jun 2006 21:10:11 -0000
1.21
+++ gnu/java/awt/peer/gtk/CairoGraphics2D.java 13 Jun 2006 12:59:22 -0000
1.22
@@ -1144,7 +1144,7 @@
// other way around. Therefore to get the "user -> pixel" transform
// that cairo wants from "image -> user" transform that we currently
// have, we will need to invert the transformation matrix.
- AffineTransform invertedXform = new AffineTransform();
+ AffineTransform invertedXform;
try
{
@@ -1157,6 +1157,9 @@
}
// Unrecognized image - convert to a BufferedImage
+ // Note - this can get us in trouble when the gdk lock is re-acquired.
+ // for example by VolatileImage. See ComponentGraphics for how we work
+ // around this.
if( !(img instanceof BufferedImage) )
{
ImageProducer source = img.getSource();
Index: gnu/java/awt/peer/gtk/ComponentGraphics.java
===================================================================
RCS file:
/cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/ComponentGraphics.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- gnu/java/awt/peer/gtk/ComponentGraphics.java 12 Jun 2006 21:10:11
-0000 1.15
+++ gnu/java/awt/peer/gtk/ComponentGraphics.java 13 Jun 2006 12:59:22
-0000 1.16
@@ -46,6 +46,7 @@
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Shape;
+import java.awt.Toolkit;
import java.awt.Point;
import java.awt.font.FontRenderContext;
import java.awt.font.GlyphVector;
@@ -53,6 +54,7 @@
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
+import java.awt.image.ImageProducer;
import java.awt.image.ImagingOpException;
import java.awt.image.RenderedImage;
@@ -277,33 +279,84 @@
public boolean drawImage(Image img, int x, int y, ImageObserver observer)
{
- if (img instanceof GtkVolatileImage
- && transform.getType() == AffineTransform.TYPE_TRANSLATION)
+ // If it is a GtkVolatileImage with an "easy" transform then
+ // draw directly. Always pass a BufferedImage to super to avoid
+ // deadlock (see Note in CairoGraphics.drawImage()).
+ if (img instanceof GtkVolatileImage)
+ {
+ GtkVolatileImage vimg = (GtkVolatileImage) img;
+ int type = transform.getType();
+ if (type == AffineTransform.TYPE_IDENTITY)
+ {
+ drawVolatile(component, vimg.nativePointer,
+ x, y, vimg.width, vimg.height);
+ return true;
+ }
+ else if (type == AffineTransform.TYPE_TRANSLATION)
{
x += transform.getTranslateX();
y += transform.getTranslateY();
- GtkVolatileImage vimg = (GtkVolatileImage) img;
- drawVolatile( component, vimg.nativePointer,
- x, y, vimg.width, vimg.height );
+ drawVolatile(component, vimg.nativePointer,
+ x, y, vimg.width, vimg.height);
return true;
}
- return super.drawImage( img, x, y, observer );
+ else
+ return super.drawImage(vimg.getSnapshot(), x, y, observer);
+ }
+
+ BufferedImage bimg;
+ if (img instanceof BufferedImage)
+ bimg = (BufferedImage) img;
+ else
+ {
+ ImageProducer source = img.getSource();
+ if (source == null)
+ return false;
+ bimg = (BufferedImage) Toolkit.getDefaultToolkit().createImage(source);
+ }
+ return super.drawImage(bimg, x, y, observer);
}
public boolean drawImage(Image img, int x, int y, int width, int height,
ImageObserver observer)
{
- if( img instanceof GtkVolatileImage
- && transform.getType() == AffineTransform.TYPE_TRANSLATION)
+ // If it is a GtkVolatileImage with an "easy" transform then
+ // draw directly. Always pass a BufferedImage to super to avoid
+ // deadlock (see Note in CairoGraphics.drawImage()).
+ if (img instanceof GtkVolatileImage)
+ {
+ GtkVolatileImage vimg = (GtkVolatileImage) img;
+ int type = transform.getType();
+ if (type == AffineTransform.TYPE_IDENTITY)
+ {
+ drawVolatile(component, vimg.nativePointer,
+ x, y, width, height);
+ return true;
+ }
+ else if (type == AffineTransform.TYPE_TRANSLATION)
{
x += transform.getTranslateX();
y += transform.getTranslateY();
- GtkVolatileImage vimg = (GtkVolatileImage) img;
- drawVolatile( component, vimg.nativePointer, x, y,
- width, height );
+ drawVolatile(component, vimg.nativePointer,
+ x, y, width, height);
return true;
}
- return super.drawImage( img, x, y, width, height, observer );
+ else
+ return super.drawImage(vimg.getSnapshot(), x, y,
+ width, height, observer);
+ }
+
+ BufferedImage bimg;
+ if (img instanceof BufferedImage)
+ bimg = (BufferedImage) img;
+ else
+ {
+ ImageProducer source = img.getSource();
+ if (source == null)
+ return false;
+ bimg = (BufferedImage) Toolkit.getDefaultToolkit().createImage(source);
+ }
+ return super.drawImage(bimg, x, y, width, height, observer);
}
}
- [commit-cp] classpath ChangeLog gnu/java/awt/peer/gtk/Cairo..., Sven de Marothy, 2006/06/03
- [commit-cp] classpath ChangeLog gnu/java/awt/peer/gtk/Cairo..., Sven de Marothy, 2006/06/04
- [commit-cp] classpath ChangeLog gnu/java/awt/peer/gtk/Cairo..., Mark Wielaard, 2006/06/07
- [commit-cp] classpath ChangeLog gnu/java/awt/peer/gtk/Cairo..., Sven de Marothy, 2006/06/09
- [commit-cp] classpath ChangeLog gnu/java/awt/peer/gtk/Cairo..., Mark Wielaard, 2006/06/11
- [commit-cp] classpath ChangeLog gnu/java/awt/peer/gtk/Cairo..., Roman Kennke, 2006/06/12
- [commit-cp] classpath ChangeLog gnu/java/awt/peer/gtk/Cairo...,
Mark Wielaard <=
- [commit-cp] classpath ChangeLog gnu/java/awt/peer/gtk/Cairo..., Sven de Marothy, 2006/06/13
- [commit-cp] classpath ChangeLog gnu/java/awt/peer/gtk/Cairo..., David Gilbert, 2006/06/15
- [commit-cp] classpath ChangeLog gnu/java/awt/peer/gtk/Cairo..., Lillian Angel, 2006/06/19
- [commit-cp] classpath ChangeLog gnu/java/awt/peer/gtk/Cairo..., Lillian Angel, 2006/06/20
- [commit-cp] classpath ChangeLog gnu/java/awt/peer/gtk/Cairo..., Gary Benson, 2006/06/21
- [commit-cp] classpath ChangeLog gnu/java/awt/peer/gtk/Cairo..., Sven de Marothy, 2006/06/30