Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/windows/classes/sun/java2d/ScreenUpdateManager.java
32287 views
1
/*
2
* Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
package sun.java2d;
27
28
import java.awt.Color;
29
import java.awt.Font;
30
import java.awt.Graphics2D;
31
import sun.awt.Win32GraphicsConfig;
32
import sun.awt.windows.WComponentPeer;
33
import sun.java2d.d3d.D3DScreenUpdateManager;
34
import sun.java2d.windows.WindowsFlags;
35
36
/**
37
* This class handles the creation of on-screen surfaces and
38
* corresponding graphics objects.
39
*
40
* By default it delegates the surface creation to the
41
* particular GraphicsConfiguration classes.
42
*/
43
public class ScreenUpdateManager {
44
private static ScreenUpdateManager theInstance;
45
46
protected ScreenUpdateManager() {
47
}
48
49
/**
50
* Creates a SunGraphics2D object for the surface,
51
* given the parameters.
52
*
53
* @param sd surface data for which a graphics is to be created
54
* @param peer peer which owns the surface
55
* @param fgColor fg color to be used in the graphics
56
* @param bgColor bg color to be used in the graphics
57
* @param font font to be used in the graphics
58
* @return a SunGraphics2D object for rendering to the passed surface
59
*/
60
public synchronized Graphics2D createGraphics(SurfaceData sd,
61
WComponentPeer peer, Color fgColor, Color bgColor, Font font)
62
{
63
return new SunGraphics2D(sd, fgColor, bgColor, font);
64
}
65
66
/**
67
* Creates and returns the surface for the peer. This surface becomes
68
* managed by this manager. To remove the surface from the managed list
69
* {@code}dropScreenSurface(SurfaceData){@code} will need to be called.
70
*
71
* The default implementation delegates surface creation
72
* to the passed in GraphicsConfiguration object.
73
*
74
* @param gc graphics configuration for which the surface is to be created
75
* @param peer peer for which the onscreen surface is to be created
76
* @param bbNum number of back-buffers requested for this peer
77
* @param isResize whether this surface is being created in response to
78
* a component resize event
79
* @return a SurfaceData to be used for on-screen rendering for this peer.
80
* @see #dropScreenSurface(SurfaceData)
81
*/
82
public SurfaceData createScreenSurface(Win32GraphicsConfig gc,
83
WComponentPeer peer, int bbNum,
84
boolean isResize)
85
{
86
return gc.createSurfaceData(peer, bbNum);
87
}
88
89
/**
90
* Drops the passed surface from the list of managed surfaces.
91
*
92
* Nothing happens if the surface wasn't managed by this manager.
93
*
94
* @param sd SurfaceData to be removed from the list of managed surfaces
95
*/
96
public void dropScreenSurface(SurfaceData sd) {}
97
98
/**
99
* Returns a replacement SurfaceData for the invalid passed one.
100
*
101
* This method should be used by SurfaceData's created by
102
* the ScreenUpdateManager for providing replacement surfaces.
103
*
104
* @param peer to which the old surface belongs
105
* @param oldsd the old (invalid) surface to get replaced
106
* @return a replacement surface
107
* @see sun.java2d.d3d.D3DSurfaceData.D3DWindowSurfaceData#getReplacement()
108
* @see sun.java2d.windows.GDIWindowSurfaceData#getReplacement()
109
*/
110
public SurfaceData getReplacementScreenSurface(WComponentPeer peer,
111
SurfaceData oldsd)
112
{
113
SurfaceData surfaceData = peer.getSurfaceData();
114
if (surfaceData == null || surfaceData.isValid()) {
115
return surfaceData;
116
}
117
peer.replaceSurfaceData();
118
return peer.getSurfaceData();
119
}
120
121
/**
122
* Returns an (singleton) instance of the screen surfaces
123
* manager class.
124
* @return instance of onscreen surfaces manager
125
*/
126
public static synchronized ScreenUpdateManager getInstance() {
127
if (theInstance == null) {
128
if (WindowsFlags.isD3DEnabled()) {
129
theInstance = new D3DScreenUpdateManager();
130
} else {
131
theInstance = new ScreenUpdateManager();
132
}
133
}
134
return theInstance;
135
}
136
}
137
138