Пример #1
0
  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());
    }
  }
Пример #2
0
  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);
  }