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: | 778 / 920 | 
| Version history: | 3 change(s) | 
| Referenced in: | [show references] |