/*
* Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package sun.java2d;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import sun.awt.Win32GraphicsConfig;
import sun.awt.windows.WComponentPeer;
import sun.java2d.d3d.D3DScreenUpdateManager;
import sun.java2d.windows.WindowsFlags;
/**
* This class handles the creation of on-screen surfaces and
* corresponding graphics objects.
*
* By default it delegates the surface creation to the
* particular GraphicsConfiguration classes.
*/
public class ScreenUpdateManager {
private static ScreenUpdateManager theInstance;
protected ScreenUpdateManager() {
}
/**
* Creates a SunGraphics2D object for the surface,
* given the parameters.
*
* @param sd surface data for which a graphics is to be created
* @param peer peer which owns the surface
* @param fgColor fg color to be used in the graphics
* @param bgColor bg color to be used in the graphics
* @param font font to be used in the graphics
* @return a SunGraphics2D object for rendering to the passed surface
*/
public synchronized Graphics2D createGraphics(SurfaceData sd,
WComponentPeer peer, Color fgColor, Color bgColor, Font font)
{
return new SunGraphics2D(sd, fgColor, bgColor, font);
}
/**
* Creates and returns the surface for the peer. This surface becomes
* managed by this manager. To remove the surface from the managed list
* {@code}dropScreenSurface(SurfaceData){@code} will need to be called.
*
* The default implementation delegates surface creation
* to the passed in GraphicsConfiguration object.
*
* @param gc graphics configuration for which the surface is to be created
* @param peer peer for which the onscreen surface is to be created
* @param bbNum number of back-buffers requested for this peer
* @param isResize whether this surface is being created in response to
* a component resize event
* @return a SurfaceData to be used for on-screen rendering for this peer.
* @see #dropScreenSurface(SurfaceData)
*/
public SurfaceData createScreenSurface(Win32GraphicsConfig gc,
WComponentPeer peer, int bbNum,
boolean isResize)
{
return gc.createSurfaceData(peer, bbNum);
}
/**
* Drops the passed surface from the list of managed surfaces.
*
* Nothing happens if the surface wasn't managed by this manager.
*
* @param sd SurfaceData to be removed from the list of managed surfaces
*/
public void dropScreenSurface(SurfaceData sd) {}
/**
* Returns a replacement SurfaceData for the invalid passed one.
*
* This method should be used by SurfaceData's created by
* the ScreenUpdateManager for providing replacement surfaces.
*
* @param peer to which the old surface belongs
* @param oldsd the old (invalid) surface to get replaced
* @return a replacement surface
* @see sun.java2d.d3d.D3DSurfaceData.D3DWindowSurfaceData#getReplacement()
* @see sun.java2d.windows.GDIWindowSurfaceData#getReplacement()
*/
public SurfaceData getReplacementScreenSurface(WComponentPeer peer,
SurfaceData oldsd)
{
SurfaceData surfaceData = peer.getSurfaceData();
if (surfaceData == null || surfaceData.isValid()) {
return surfaceData;
}
peer.replaceSurfaceData();
return peer.getSurfaceData();
}
/**
* Returns an (singleton) instance of the screen surfaces
* manager class.
* @return instance of onscreen surfaces manager
*/
public static synchronized ScreenUpdateManager getInstance() {
if (theInstance == null) {
if (WindowsFlags.isD3DEnabled()) {
theInstance = new D3DScreenUpdateManager();
} else {
theInstance = new ScreenUpdateManager();
}
}
return theInstance;
}
}