diff options
author | Scott Gilbertson <scottg@mantatest.com> | 2003-08-25 19:02:29 +0000 |
---|---|---|
committer | Scott Gilbertson <sgilbertson@gcc.gnu.org> | 2003-08-25 19:02:29 +0000 |
commit | 81f7282f978588f883d8363e8cd5e69d090bc331 (patch) | |
tree | cf8eb4ec21e611ee7dbea198fd5f8dce39ee903d /libjava/gnu/awt/j2d | |
parent | 1281fe11033eebaaa8a4fbc70770eca204c9c504 (diff) | |
download | gcc-81f7282f978588f883d8363e8cd5e69d090bc331.zip gcc-81f7282f978588f883d8363e8cd5e69d090bc331.tar.gz gcc-81f7282f978588f883d8363e8cd5e69d090bc331.tar.bz2 |
Makefile.am: added gnu/awt/xlib/XOffScreenImage.java.
* Makefile.am: added gnu/awt/xlib/XOffScreenImage.java.
* Makefile.in: re-generated.
* gnu/awt/j2d/IntegerGraphicsState.java
(ScreenCoupledImage): new interface.
(drawImage): detect ScreenCoupledImage instances.
* gnu/awt/xlib/XCanvasPeer.java (createImage) implemented.
* gnu/awt/xlib/XEventLoop.java
(createEvent): re-formatted, and rearranged to avoid null pointer.
* gnu/awt/xlib/XGraphics.java
(drawImage): added XOffScreenImage handling.
* gnu/awt/xlib/XOffScreenImage.java: new file.
* gnu/gcj/xlib/Drawable.java (getDepth): new native method.
* gnu/gcj/xlib/GC.java (copyArea): new native method.
* gnu/gcj/xlib/XAnyEvent.java
(TYPE_KEY_PRESS): new constant.
(TYPE_KEY_RELEASE): new constant.
(TYPE_MOTION_NOTIFY): new constant.
(TYPE_ENTER_NOTIFY): new constant.
(TYPE_LEAVE_NOTIFY): new constant.
(TYPE_FOCUS_IN): new constant.
(TYPE_FOCUS_OUT): new constant.
(TYPE_KEYMAP_NOTIFY): new constant.
(TYPE_GRAPHICS_EXPOSE): new constant.
(TYPE_NO_EXPOSE): new constant.
(TYPE_VISIBILITY_NOTIFY): new constant.
(TYPE_CREATE_NOTIFY): new constant.
(TYPE_DESTROY_NOTIFY): new constant.
(TYPE_MAP_REQUEST): new constant.
(TYPE_CONFIGURE_REQUEST): new constant.
(TYPE_GRAVITY_NOTIFY): new constant.
(TYPE_RESIZE_REQUEST): new constant.
(TYPE_CIRCULATE_NOTIFY): new constant.
(TYPE_CIRCULATE_REQUEST): new constant.
(TYPE_PROPERTY_NOTIFY): new constant.
(TYPE_SELECTION_CLEAR): new constant.
(TYPE_SELECTION_REQUEST): new constant.
(TYPE_SELECTION_NOTIFY): new constant.
(TYPE_COLORMAP_NOTIFY): new constant.
(TYPE_MAPPING_NOTIFY): new constant.
* gnu/gcj/xlib/natDrawable.cc (getDepth): new method.
* gnu/gcj/xlib/natGC.cc (copyArea): new method
* java/awt/Component.java (createImage): changed to use peer method.
From-SVN: r70776
Diffstat (limited to 'libjava/gnu/awt/j2d')
-rw-r--r-- | libjava/gnu/awt/j2d/IntegerGraphicsState.java | 133 |
1 files changed, 76 insertions, 57 deletions
diff --git a/libjava/gnu/awt/j2d/IntegerGraphicsState.java b/libjava/gnu/awt/j2d/IntegerGraphicsState.java index 3befcb4..4eb4c61 100644 --- a/libjava/gnu/awt/j2d/IntegerGraphicsState.java +++ b/libjava/gnu/awt/j2d/IntegerGraphicsState.java @@ -44,6 +44,19 @@ public class IntegerGraphicsState extends AbstractGraphicsState DirectRasterGraphics directGfx; Shape clip; + /** Interface for images which are coupled to a GraphicsConfiguration, + * as is typically the case for an off-screen buffer used in + * double-buffering. Any image which implements this interface is + * rendered directly by DirectRasterGraphics (i.e. by directGfx.drawImage) + */ + public interface ScreenCoupledImage + { + /** Get the GraphicsConfiguration to which this image is coupled + * @return the GraphicsConfiguration + */ + GraphicsConfiguration getGraphicsConfiguration (); + } + public IntegerGraphicsState(DirectRasterGraphics directGfx) { this.directGfx = directGfx; @@ -245,66 +258,72 @@ public class IntegerGraphicsState extends AbstractGraphicsState x += tx; y += ty; + if (image instanceof ScreenCoupledImage) + { + GraphicsConfiguration config + = ((ScreenCoupledImage)image).getGraphicsConfiguration (); + if (config == frontend.config) + return directGfx.drawImage (image, x, y, observer); + } if (image instanceof BufferedImage) + { + BufferedImage bImage = (BufferedImage) image; + // FIXME: eliminate? ScreenCoupledImage is probably more efficient + Object config = bImage.getProperty ("java.awt.GraphicsConfiguration"); + if (config == frontend.config) + return directGfx.drawImage (image, x, y, observer); + + int width = image.getWidth (null); + int height = image.getHeight (null); + + Rectangle bounds = new Rectangle (x, y, width, height); + + MappedRaster mr = directGfx.mapRaster (bounds); + + // manipulate raster here... + ColorModel colorModel = mr.getColorModel (); + WritableRaster raster = mr.getRaster (); + + int xEnd = x + width; + int yEnd = y + height; + + // FIXME: Use the following code only as a fallback. It's SLOW! + + Object rgbElem = null; + for (int yy=0; yy<height; yy++) { - BufferedImage bImage = (BufferedImage) image; - Object config = - bImage.getProperty("java.awt.GraphicsConfiguration"); - - if (config == frontend.config) - return directGfx.drawImage(image, x, y, observer); - - int width = image.getWidth(null); - int height = image.getHeight(null); - - Rectangle bounds = new Rectangle(x, y, width, height); - - MappedRaster mr = directGfx.mapRaster(bounds); - - // manipulate raster here... - ColorModel colorModel = mr.getColorModel(); - WritableRaster raster = mr.getRaster(); - - int xEnd = x + width; - int yEnd = y + height; - - // FIXME: Use the following code only as a fallback. It's SLOW! - - Object rgbElem = null; - for (int yy=0; yy<height; yy++) - { - for (int xx=0; xx<width; xx++) - { - int srgb = bImage.getRGB(xx, yy); - int sa = ((srgb >>> 24) & 0xff) + 1; - int sr = ((srgb >>> 16) & 0xff) + 1; - int sg = ((srgb >>> 8) & 0xff) + 1; - int sb = (srgb & 0xff) + 1; - - rgbElem = raster.getDataElements(xx+x, yy+y, rgbElem); - int drgb = colorModel.getRGB(rgbElem); - int dr = ((drgb >>> 16) & 0xff) + 1; - int dg = ((drgb >>> 8) & 0xff) + 1; - int db = (drgb & 0xff) + 1; - int da = 256 - sa; - - dr = ((sr*sa + dr*da) >>> 8) - 1; - dg = ((sg*sa + dg*da) >>> 8) - 1; - db = ((sb*sa + db*da) >>> 8) - 1; - - drgb = (dr<<16) | (dg<<8) | db; - - rgbElem = colorModel.getDataElements(drgb, rgbElem); - - raster.setDataElements(xx+x, yy+y, rgbElem); - } - } - directGfx.unmapRaster(mr); - return true; - + for (int xx=0; xx<width; xx++) + { + int srgb = bImage.getRGB (xx, yy); + int sa = ((srgb >>> 24) & 0xff) + 1; + int sr = ((srgb >>> 16) & 0xff) + 1; + int sg = ((srgb >>> 8) & 0xff) + 1; + int sb = (srgb & 0xff) + 1; + + rgbElem = raster.getDataElements (xx+x, yy+y, rgbElem); + int drgb = colorModel.getRGB (rgbElem); + int dr = ((drgb >>> 16) & 0xff) + 1; + int dg = ((drgb >>> 8) & 0xff) + 1; + int db = (drgb & 0xff) + 1; + int da = 256 - sa; + + dr = ((sr*sa + dr*da) >>> 8) - 1; + dg = ((sg*sa + dg*da) >>> 8) - 1; + db = ((sb*sa + db*da) >>> 8) - 1; + + drgb = (dr<<16) | (dg<<8) | db; + + rgbElem = colorModel.getDataElements (drgb, rgbElem); + + raster.setDataElements (xx+x, yy+y, rgbElem); + } } - throw new UnsupportedOperationException("drawing image " + image + - "not implemented"); + directGfx.unmapRaster (mr); + return true; + + } + throw new UnsupportedOperationException ("drawing image " + image + + "not implemented"); } |