private void createBuffer() { if (buffer == null) { WritableRaster rst; rst = Raster.createWritableRaster( GtkVolatileImage.createGdkSampleModel( component.awtComponent.getWidth(), component.awtComponent.getHeight()), new Point(0, 0)); buffer = new BufferedImage( GtkVolatileImage.gdkColorModel, rst, GtkVolatileImage.gdkColorModel.isAlphaPremultiplied(), new Hashtable()); } else { Graphics2D g2d = ((Graphics2D) buffer.getGraphics()); g2d.setBackground(new Color(0, 0, 0, 0)); g2d.clearRect(0, 0, buffer.getWidth(), buffer.getHeight()); } if (componentBuffer == null) { WritableRaster rst; rst = Raster.createWritableRaster( GtkVolatileImage.createGdkSampleModel( component.awtComponent.getWidth(), component.awtComponent.getHeight()), new Point(0, 0)); componentBuffer = new BufferedImage( GtkVolatileImage.gdkColorModel, rst, GtkVolatileImage.gdkColorModel.isAlphaPremultiplied(), new Hashtable()); } }
public boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer) { // 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 && (clip == null || clip instanceof Rectangle2D)) { GtkVolatileImage vimg = (GtkVolatileImage) img; int type = transform.getType(); if ((type == AffineTransform.TYPE_IDENTITY || type == AffineTransform.TYPE_TRANSLATION) && (clip == null || clip instanceof Rectangle2D)) { Rectangle2D r = (Rectangle2D) clip; if (r == null) r = getRealBounds(); x += transform.getTranslateX(); y += transform.getTranslateY(); drawVolatile( component, vimg.nativePointer, x, y, width, height, (int) (r.getX() + transform.getTranslateX()), (int) (r.getY() + transform.getTranslateY()), (int) r.getWidth(), (int) r.getHeight()); return true; } else return super.drawImage(vimg.getSnapshot(), x, y, width, height, observer); } BufferedImage bimg; img = AsyncImage.realImage(img, observer); 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); }