[PATCH] Delegat off-screen image creation to the CacioToolkit. This allows different platforms to provide optimized off-screen images

Ingo Proetel proetel at aicas.de
Mon Mar 21 02:45:36 PDT 2011


# HG changeset patch
# User Ingo Proetel <proetel at aicas.de>
# Date 1300698958 -3600
# Node ID 00f4f494fe678b7d7f84199c9cbae4e2024ffe7c
# Parent  ec33131d820f9c7f3bfbb10c0871c674a6ad73a0
Delegat off-screen image creation to the CacioToolkit. This allows different platforms to provide optimized off-screen images.
Added a flag to indicate that the background needs to be cleared during the next paint operation.

diff -r ec33131d820f -r 00f4f494fe67 src/share/classes/sun/awt/peer/cacio/CacioComponentPeer.java
--- a/src/share/classes/sun/awt/peer/cacio/CacioComponentPeer.java	Thu Mar 17 15:39:43 2011 +0100
+++ b/src/share/classes/sun/awt/peer/cacio/CacioComponentPeer.java	Mon Mar 21 10:15:58 2011 +0100
@@ -120,6 +120,12 @@
     private RepaintArea paintArea;
 
     private Rectangle viewRect;
+    
+    /**
+     * Flag to indicate that a change requires a repaint 
+     * of the background.
+     */
+    private boolean needsClearBackground = false;
 
     /**
      * Creates a new CacioComponentPeer.
@@ -345,7 +351,9 @@
         case PaintEvent.UPDATE:
         case PaintEvent.PAINT:
             if (! isLayouting()) {
-                paintArea.paint(getAWTComponent(), false);
+                boolean tmp = needsClearBackground;
+                needsClearBackground = false;
+                paintArea.paint(getAWTComponent(), tmp);
             }
           break;
         case MouseEvent.MOUSE_PRESSED:
@@ -611,6 +619,7 @@
             // laid out correctly.
             swingComponent.validate();
         }
+        needsClearBackground = true;
     }
 
     public void setEnabled(boolean enable) {
@@ -647,7 +656,7 @@
     }
 
     public void setVisible(boolean b) {
-
+        needsClearBackground = b;
         if (proxy != null) {
             proxy.setVisible(b);
         }
@@ -680,13 +689,7 @@
 
     public Image createImage(int width, int height) {
 
-        GraphicsConfiguration gc = getGraphicsConfiguration();
-        ColorModel model = gc.getColorModel(Transparency.OPAQUE);
-        WritableRaster wr =
-            model.createCompatibleWritableRaster(width, height);
-        return new OffScreenImage(awtComponent, model, wr,
-                                  model.isAlphaPremultiplied());
-
+    return ((CacioToolkit)Toolkit.getDefaultToolkit()).createOffScreenImage(awtComponent,width,height);
     }
 
     public VolatileImage createVolatileImage(int width, int height) {
diff -r ec33131d820f -r 00f4f494fe67 src/share/classes/sun/awt/peer/cacio/CacioToolkit.java
--- a/src/share/classes/sun/awt/peer/cacio/CacioToolkit.java	Thu Mar 17 15:39:43 2011 +0100
+++ b/src/share/classes/sun/awt/peer/cacio/CacioToolkit.java	Mon Mar 21 10:15:58 2011 +0100
@@ -25,15 +25,19 @@
 
 package sun.awt.peer.cacio;
 
+
 import java.awt.Button;
 import java.awt.Canvas;
 import java.awt.Checkbox;
 import java.awt.CheckboxMenuItem;
 import java.awt.Choice;
+import java.awt.Component;
 import java.awt.Dialog;
 import java.awt.FileDialog;
 import java.awt.Frame;
+import java.awt.GraphicsConfiguration;
 import java.awt.HeadlessException;
+import java.awt.Image;
 import java.awt.KeyboardFocusManager;
 import java.awt.Label;
 import java.awt.List;
@@ -46,7 +50,10 @@
 import java.awt.Scrollbar;
 import java.awt.TextArea;
 import java.awt.TextField;
+import java.awt.Transparency;
 import java.awt.Window;
+import java.awt.image.ColorModel;
+import java.awt.image.WritableRaster;
 import java.awt.peer.ButtonPeer;
 import java.awt.peer.CanvasPeer;
 import java.awt.peer.CheckboxMenuItemPeer;
@@ -70,6 +77,7 @@
 import java.awt.peer.WindowPeer;
 
 import sun.awt.SunToolkit;
+import sun.awt.image.OffScreenImage;
 
 public abstract class CacioToolkit extends SunToolkit {
 
@@ -323,4 +331,22 @@
 
     public abstract PlatformWindowFactory getPlatformWindowFactory();
 
+    /**
+     * Create an off-screen image base on the given component.
+     *
+     * @param component The component to base the off-screen image on.
+     * @param width The width of the image.
+     * @param hight The height of the image.
+     *
+     * @return New off-screen image.
+     */
+    public Image createOffScreenImage(Component component, int width, int height) {
+        GraphicsConfiguration gc = component.getGraphicsConfiguration();
+        ColorModel model = gc.getColorModel(Transparency.OPAQUE);
+        WritableRaster wr =
+            model.createCompatibleWritableRaster(width, height);
+        return new OffScreenImage(component, model, wr,
+                                  model.isAlphaPremultiplied());
+
+    }
 }



More information about the caciocavallo-dev mailing list