[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