painting optimization

This commit is contained in:
bancika
2011-01-03 17:12:29 +00:00
parent ae03132dc4
commit dab2ecf7d4
2 changed files with 35 additions and 18 deletions
@@ -6,6 +6,7 @@ import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Image;
import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
@@ -46,9 +47,11 @@ class CanvasPanel extends JComponent implements Autoscroll {
private IPlugInPort plugInPort;
private VolatileImage bufferImage;
private Image bufferImage;
private GraphicsConfiguration screenGraphicsConfiguration;
private static boolean USE_HARDWARE_ACCELLERATION = false;
private static final EnumSet<DrawOption> drawOptions = EnumSet.of(DrawOption.GRID,
DrawOption.SELECTION, DrawOption.ZOOM, DrawOption.ANTIALIASING,
DrawOption.CONTROL_POINTS);
@@ -95,9 +98,13 @@ class CanvasPanel extends JComponent implements Autoscroll {
}
protected void createBufferImage() {
if (USE_HARDWARE_ACCELLERATION) {
bufferImage = screenGraphicsConfiguration.createCompatibleVolatileImage(getWidth(),
getHeight());
bufferImage.validate(screenGraphicsConfiguration);
((VolatileImage) bufferImage).validate(screenGraphicsConfiguration);
} else {
bufferImage = createImage(getWidth(), getHeight());
}
Graphics2D g2d = (Graphics2D) bufferImage.getGraphics();
plugInPort.draw(g2d, drawOptions);
}
@@ -109,13 +116,18 @@ class CanvasPanel extends JComponent implements Autoscroll {
}
if (bufferImage == null) {
createBufferImage();
} else {
Graphics2D g2d = (Graphics2D) bufferImage.getGraphics();
plugInPort.draw(g2d, drawOptions);
}
if (USE_HARDWARE_ACCELLERATION) {
VolatileImage volatileImage = (VolatileImage) bufferImage;
do {
try {
if (bufferImage.contentsLost()) {
if (volatileImage.contentsLost()) {
createBufferImage();
}
int validation = bufferImage.validate(screenGraphicsConfiguration);
int validation = volatileImage.validate(screenGraphicsConfiguration);
if (validation == VolatileImage.IMAGE_INCOMPATIBLE) {
createBufferImage();
}
@@ -123,7 +135,13 @@ class CanvasPanel extends JComponent implements Autoscroll {
} catch (NullPointerException e) {
createBufferImage();
}
} while (bufferImage == null || bufferImage.contentsLost());
} while (volatileImage == null || volatileImage.contentsLost());
} else {
Graphics2D g2d = (Graphics2D) bufferImage.getGraphics();
plugInPort.draw(g2d, drawOptions);
g.drawImage(bufferImage, 0, 0, this);
bufferImage.flush();
}
}
@Override
@@ -92,7 +92,6 @@ public class CanvasPlugin implements IPlugIn {
refreshSize();
break;
case REPAINT:
canvasPanel.invalidateCache();
canvasPanel.repaint();
break;
}