diff options
| author | Sven de Marothy <sven@physto.se> | 2006-05-31 03:32:25 +0000 |
|---|---|---|
| committer | Sven de Marothy <sven@physto.se> | 2006-05-31 03:32:25 +0000 |
| commit | 3775dc68a99b3c4d3d0529d29334cbcc5aabfaf3 (patch) | |
| tree | cb8b7235a182441e3376c1fccde1a34e235afc5d /gnu/java | |
| parent | 6fdcb8e60c0a8ae36e3e511c5c0ae79c15844cb5 (diff) | |
| download | classpath-3775dc68a99b3c4d3d0529d29334cbcc5aabfaf3.tar.gz | |
2006-05-30 Sven de Marothy <sven@physto.se>
* gnu/java/awt/peer/gtk/CairoGraphics2D.java
(drawImage): Clip scaled image to dest rectangle.
Diffstat (limited to 'gnu/java')
| -rw-r--r-- | gnu/java/awt/peer/gtk/CairoGraphics2D.java | 39 |
1 files changed, 19 insertions, 20 deletions
diff --git a/gnu/java/awt/peer/gtk/CairoGraphics2D.java b/gnu/java/awt/peer/gtk/CairoGraphics2D.java index 9be40ed3c..19d68f729 100644 --- a/gnu/java/awt/peer/gtk/CairoGraphics2D.java +++ b/gnu/java/awt/peer/gtk/CairoGraphics2D.java @@ -1092,8 +1092,6 @@ public abstract class CairoGraphics2D extends Graphics2D if (img == null) return false; - Image subImage; - int sourceWidth = sx2 - sx1; int sourceHeight = sy2 - sy1; @@ -1107,27 +1105,28 @@ public abstract class CairoGraphics2D extends Graphics2D double scaleX = destWidth / (double) sourceWidth; double scaleY = destHeight / (double) sourceHeight; - // Get the subimage of the source enclosed in the - // rectangle specified by sx1, sy1, sx2, sy2 - - if (img instanceof BufferedImage) - { - BufferedImage b = (BufferedImage) img; - subImage = b.getSubimage(sx1, sy1, sx2, sy2); - } + // FIXME: Avoid using an AT if possible here - it's at least twice as slow. + + Shape oldClip = getClip(); + int cx, cy, cw, ch; + if( dx1 < dx2 ) + { cx = dx1; cw = dx2 - dx1; } else - { - CropImageFilter filter = new CropImageFilter(sx1, sx2, sx2, sy2); - FilteredImageSource src = new FilteredImageSource(img.getSource(), - filter); + { cx = dx2; cw = dx1 - dx2; } + if( dy1 < dy2 ) + { cy = dy1; ch = dy2 - dy1; } + else + { cy = dy2; ch = dy1 - dy2; } + + setClip( cx, cy, cw, ch ); - subImage = Toolkit.getDefaultToolkit().createImage(src); - } + AffineTransform tx = new AffineTransform(); + tx.translate( dx1 - sx1*scaleX, dy1 - sy1*scaleY ); + tx.scale( scaleX, scaleY ); - // FIXME: Avoid using an AT if possible here - it's at least twice as slow. - return drawImage(subImage, - new AffineTransform(scaleX, 0, 0, scaleY, dx1, dy1), - bgcolor, observer); + boolean retval = drawImage(img, tx, bgcolor, observer); + setClip( oldClip ); + return retval; } public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, |
