/* * @(#)BufferedUpdateStrategy.java * * Project: JHotdraw - a GUI framework for technical drawings * http://www.jhotdraw.org * http://jhotdraw.sourceforge.net * Copyright: © by the original author(s) and all contributors * License: Lesser GNU Public License (LGPL) * http://www.opensource.org/licenses/lgpl-license.html */ package CH.ifa.draw.standard; import java.awt.*; import java.awt.image.*; import CH.ifa.draw.framework.*; /** * The BufferedUpdateStrategy implements an update * strategy that first draws a view into a buffer * followed by copying the buffer to the DrawingView. * * @see DrawingView * * @version <$CURRENT_VERSION$> */ public class BufferedUpdateStrategy implements Painter { /** * The offscreen image */ transient private Image fOffscreen; private int fImagewidth = -1; private int fImageheight = -1; /* * Serialization support. */ private static final long serialVersionUID = 6489532222954612824L; private int bufferedUpdateSerializedDataVersion = 1; /** * Draws the view contents. */ public void draw(Graphics g, DrawingView view) { // create the buffer if necessary Dimension d = view.getSize(); if ((fOffscreen == null) || (d.width != fImagewidth) || (d.height != fImageheight)) { fOffscreen = view.createImage(d.width, d.height); fImagewidth = d.width; fImageheight = d.height; } // let the view draw on offscreen buffer Graphics g2 = fOffscreen.getGraphics(); view.drawAll(g2); g.drawImage(fOffscreen, 0, 0, view); } }