Libraryless. Click here for Pure Java version (251L/3K/7K).
1 | /* |
2 | * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved. |
3 | * |
4 | * Redistribution and use in source and binary forms, with or without |
5 | * modification, are permitted provided that the following conditions |
6 | * are met: |
7 | * |
8 | * - Redistributions of source code must retain the above copyright |
9 | * notice, this list of conditions and the following disclaimer. |
10 | * |
11 | * - Redistributions in binary form must reproduce the above copyright |
12 | * notice, this list of conditions and the following disclaimer in the |
13 | * documentation and/or other materials provided with the distribution. |
14 | * |
15 | * - Neither the name of Oracle or the names of its |
16 | * contributors may be used to endorse or promote products derived |
17 | * from this software without specific prior written permission. |
18 | * |
19 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS |
20 | * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
21 | * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
22 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
23 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
24 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
25 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
26 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
27 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
28 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
29 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
30 | */ |
31 | |
32 | /** |
33 | * This test shows the different buffer capabilities for each |
34 | * GraphicsConfiguration on each GraphicsDevice. |
35 | */ |
36 | import java.applet.Applet; |
37 | import java.awt.*; |
38 | import java.awt.event.*; |
39 | import javax.swing.*; |
40 | |
41 | /** |
42 | * This class wraps a graphics configuration so that it can be |
43 | * displayed nicely in components. |
44 | */ |
45 | class GCWrapper { |
46 | private GraphicsConfiguration gc; |
47 | private int index; |
48 | |
49 | public GCWrapper(GraphicsConfiguration gc, int index) { |
50 | this.gc = gc; |
51 | this.index = index; |
52 | } |
53 | |
54 | public GraphicsConfiguration getGC() { |
55 | return gc; |
56 | } |
57 | |
58 | public String toString() { |
59 | return gc.toString(); |
60 | } |
61 | } |
62 | |
63 | /** |
64 | * Main frame class. |
65 | */ |
66 | public class main extends JFrame implements ItemListener { |
67 | |
68 | private JComboBox gcSelection = new JComboBox(); |
69 | private JCheckBox imageAccelerated = new JCheckBox("Accelerated", false); |
70 | private JCheckBox imageTrueVolatile = new JCheckBox("Volatile", false); |
71 | private JCheckBox flipping = new JCheckBox("Flipping", false); |
72 | private JLabel flippingMethod = new JLabel(""); |
73 | private JCheckBox fullScreen = new JCheckBox("Full Screen Only", false); |
74 | private JCheckBox multiBuffer = new JCheckBox("Multi-Buffering", false); |
75 | private JCheckBox fbAccelerated = new JCheckBox("Accelerated", false); |
76 | private JCheckBox fbTrueVolatile = new JCheckBox("Volatile", false); |
77 | private JCheckBox bbAccelerated = new JCheckBox("Accelerated", false); |
78 | private JCheckBox bbTrueVolatile = new JCheckBox("Volatile", false); |
79 | |
80 | public main(GraphicsDevice dev) { |
81 | super(dev.getDefaultConfiguration()); |
82 | addWindowListener(new WindowAdapter() { |
83 | public void windowClosing(WindowEvent ev) { |
84 | System.exit(0); |
85 | } |
86 | }); |
87 | initComponents(getContentPane()); |
88 | GraphicsConfiguration[] gcs = dev.getConfigurations(); |
89 | for (int i = 0; i < gcs.length; i++) { |
90 | gcSelection.addItem(new GCWrapper(gcs[i], i)); |
91 | } |
92 | gcSelection.addItemListener(this); |
93 | gcChanged(); |
94 | } |
95 | |
96 | /** |
97 | * Creates and lays out components in the container. |
98 | * See the comments below for an organizational overview by panel. |
99 | */ |
100 | private void initComponents(Container c) { |
101 | // +=c=====================================================+ |
102 | // ++=gcPanel==============================================+ |
103 | // ++ [gcSelection] + |
104 | // ++=capsPanel============================================+ |
105 | // +++=imageCapsPanel======================================+ |
106 | // +++ [imageAccelerated] + |
107 | // +++ [imageTrueVolatile] + |
108 | // +++=bufferCapsPanel=====================================+ |
109 | // ++++=bufferAccessCapsPanel==============================+ |
110 | // +++++=flippingPanel=====================================+ |
111 | // +++++ [flipping] + |
112 | // +++++=fsPanel===========================================+ |
113 | // +++++ [indentPanel][fullScreen] + |
114 | // +++++=mbPanel===========================================+ |
115 | // +++++ [indentPanel][multiBuffer] + |
116 | // ++++=buffersPanel=======================================+ |
117 | // +++++=fbPanel===============+=bbPanel===================+ |
118 | // +++++ + + |
119 | // +++++ [fbAccelerated] + [bbAccelerated] + |
120 | // +++++ + + |
121 | // +++++ [fbTrueVolatile] + [bbTrueVolatile] + |
122 | // +++++ + + |
123 | // +=======================================================+ |
124 | c.setLayout(new BorderLayout()); |
125 | // Graphics Config |
126 | JPanel gcPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); |
127 | c.add(gcPanel, BorderLayout.NORTH); |
128 | gcSelection.setPreferredSize(new Dimension(400, 30)); |
129 | gcPanel.add(gcSelection); |
130 | // Capabilities |
131 | JPanel capsPanel = new JPanel(new BorderLayout()); |
132 | c.add(capsPanel, BorderLayout.CENTER); |
133 | // Image Capabilities |
134 | JPanel imageCapsPanel = new JPanel(new GridLayout(2, 1)); |
135 | capsPanel.add(imageCapsPanel, BorderLayout.NORTH); |
136 | imageCapsPanel.setBorder(BorderFactory.createTitledBorder( |
137 | "Image Capabilities")); |
138 | imageAccelerated.setEnabled(false); |
139 | imageCapsPanel.add(imageAccelerated); |
140 | imageTrueVolatile.setEnabled(false); |
141 | imageCapsPanel.add(imageTrueVolatile); |
142 | // Buffer Capabilities |
143 | JPanel bufferCapsPanel = new JPanel(new BorderLayout()); |
144 | capsPanel.add(bufferCapsPanel, BorderLayout.CENTER); |
145 | bufferCapsPanel.setBorder(BorderFactory.createTitledBorder( |
146 | "Buffer Capabilities")); |
147 | // Buffer Access |
148 | JPanel bufferAccessCapsPanel = new JPanel(new GridLayout(3, 1)); |
149 | bufferAccessCapsPanel.setPreferredSize(new Dimension(300, 88)); |
150 | bufferCapsPanel.add(bufferAccessCapsPanel, BorderLayout.NORTH); |
151 | // Flipping |
152 | JPanel flippingPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); |
153 | bufferAccessCapsPanel.add(flippingPanel); |
154 | flippingPanel.add(flipping); |
155 | flipping.setEnabled(false); |
156 | flippingPanel.add(flippingMethod); |
157 | // Full-screen |
158 | JPanel fsPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); |
159 | bufferAccessCapsPanel.add(fsPanel); |
160 | JPanel indentPanel = new JPanel(); |
161 | indentPanel.setPreferredSize(new Dimension(30, 30)); |
162 | fsPanel.add(indentPanel); |
163 | fsPanel.add(fullScreen); |
164 | fullScreen.setEnabled(false); |
165 | // Multi-buffering |
166 | JPanel mbPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); |
167 | bufferAccessCapsPanel.add(mbPanel); |
168 | indentPanel = new JPanel(); |
169 | indentPanel.setPreferredSize(new Dimension(30, 30)); |
170 | mbPanel.add(indentPanel); |
171 | mbPanel.add(multiBuffer); |
172 | multiBuffer.setEnabled(false); |
173 | // Front and Back Buffer Capabilities |
174 | JPanel buffersPanel = new JPanel(new GridLayout(1, 2)); |
175 | bufferCapsPanel.add(buffersPanel, BorderLayout.CENTER); |
176 | // Front Buffer |
177 | JPanel fbPanel = new JPanel(new GridLayout(2, 1)); |
178 | fbPanel.setBorder(BorderFactory.createTitledBorder( |
179 | "Front Buffer")); |
180 | buffersPanel.add(fbPanel); |
181 | fbPanel.add(fbAccelerated); |
182 | fbAccelerated.setEnabled(false); |
183 | fbPanel.add(fbTrueVolatile); |
184 | fbTrueVolatile.setEnabled(false); |
185 | // Back Buffer |
186 | JPanel bbPanel = new JPanel(new GridLayout(2, 1)); |
187 | bbPanel.setPreferredSize(new Dimension(250, 80)); |
188 | bbPanel.setBorder(BorderFactory.createTitledBorder( |
189 | "Back and Intermediate Buffers")); |
190 | buffersPanel.add(bbPanel); |
191 | bbPanel.add(bbAccelerated); |
192 | bbAccelerated.setEnabled(false); |
193 | bbPanel.add(bbTrueVolatile); |
194 | bbTrueVolatile.setEnabled(false); |
195 | } |
196 | |
197 | public void itemStateChanged(ItemEvent ev) { |
198 | gcChanged(); |
199 | } |
200 | |
201 | private void gcChanged() { |
202 | GCWrapper wrap = (GCWrapper)gcSelection.getSelectedItem(); |
203 | //assert wrap != null; |
204 | GraphicsConfiguration gc = wrap.getGC(); |
205 | //assert gc != null; |
206 | //Image Caps |
207 | ImageCapabilities imageCaps = gc.getImageCapabilities(); |
208 | imageAccelerated.setSelected(imageCaps.isAccelerated()); |
209 | imageTrueVolatile.setSelected(imageCaps.isTrueVolatile()); |
210 | // Buffer Caps |
211 | BufferCapabilities bufferCaps = gc.getBufferCapabilities(); |
212 | flipping.setSelected(bufferCaps.isPageFlipping()); |
213 | flippingMethod.setText(getFlipText(bufferCaps.getFlipContents())); |
214 | fullScreen.setSelected(bufferCaps.isFullScreenRequired()); |
215 | multiBuffer.setSelected(bufferCaps.isMultiBufferAvailable()); |
216 | // Front buffer caps |
217 | imageCaps = bufferCaps.getFrontBufferCapabilities(); |
218 | fbAccelerated.setSelected(imageCaps.isAccelerated()); |
219 | fbTrueVolatile.setSelected(imageCaps.isTrueVolatile()); |
220 | imageCaps = bufferCaps.getFrontBufferCapabilities(); |
221 | // Back buffer caps |
222 | imageCaps = bufferCaps.getBackBufferCapabilities(); |
223 | bbAccelerated.setSelected(imageCaps.isAccelerated()); |
224 | bbTrueVolatile.setSelected(imageCaps.isTrueVolatile()); |
225 | } |
226 | |
227 | private static String getFlipText(BufferCapabilities.FlipContents flip) { |
228 | if (flip == null) { |
229 | return ""; |
230 | } else if (flip == BufferCapabilities.FlipContents.UNDEFINED) { |
231 | return "Method Unspecified"; |
232 | } else if (flip == BufferCapabilities.FlipContents.BACKGROUND) { |
233 | return "Cleared to Background"; |
234 | } else if (flip == BufferCapabilities.FlipContents.PRIOR) { |
235 | return "Previous Front Buffer"; |
236 | } else { // if (flip == BufferCapabilities.FlipContents.COPIED) |
237 | return "Copied"; |
238 | } |
239 | } |
240 | |
241 | public static void main(String[] args) { |
242 | GraphicsEnvironment ge = |
243 | GraphicsEnvironment.getLocalGraphicsEnvironment(); |
244 | GraphicsDevice[] devices = ge.getScreenDevices(); |
245 | for (int i = 0; i < devices.length; i++) { |
246 | main tst = new main(devices[i]); |
247 | tst.pack(); |
248 | tst.setVisible(true); |
249 | } |
250 | } |
251 | } |
download show line numbers debug dex old transpilations
Travelled to 14 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
Snippet ID: | #1008150 |
Snippet name: | CapabilitiesTest (Oracle Demo) |
Eternal ID of this version: | #1008150/4 |
Text MD5: | 5489e92313a8440b2006f37be0464241 |
Transpilation MD5: | 5489e92313a8440b2006f37be0464241 |
Author: | stefan |
Category: | javax / gui |
Type: | JavaX source code |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2017-04-28 00:47:48 |
Source code size: | 11352 bytes / 251 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 538 / 625 |
Version history: | 3 change(s) |
Referenced in: | [show references] |