1 /* 2 * 3 * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * - Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 12 * - Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * - Neither the name of Oracle nor the names of its 17 * contributors may be used to endorse or promote products derived 18 * from this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 21 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 22 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 27 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 28 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 29 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 package java2d; 33 34 35 import java.awt.Dimension; 36 import java.awt.Font; 37 import java.awt.GridBagLayout; 38 import java.awt.event.ItemEvent; 39 import java.awt.event.ItemListener; 40 import javax.swing.JCheckBox; 41 import javax.swing.JComboBox; 42 import javax.swing.JPanel; 43 import javax.swing.JSlider; 44 import javax.swing.SwingConstants; 45 import javax.swing.border.EtchedBorder; 46 import javax.swing.border.TitledBorder; 47 import javax.swing.event.ChangeEvent; 48 import javax.swing.event.ChangeListener; 49 50 51 /** 52 * Global Controls panel for changing graphic attributes of 53 * the demo surface. 54 */ 55 @SuppressWarnings("serial") 56 public class GlobalControls extends JPanel implements ItemListener, 57 ChangeListener { 58 private final DemoInstVarsAccessor demoInstVars; 59 public static final String[] screenNames = { 60 "Auto Screen", "On Screen", "Off Screen", 61 "INT_xRGB", "INT_ARGB", "INT_ARGB_PRE", "INT_BGR", 62 "3BYTE_BGR", "4BYTE_ABGR", "4BYTE_ABGR_PRE", "USHORT_565_RGB", 63 "USHORT_x555_RGB", "BYTE_GRAY", "USHORT_GRAY", 64 "BYTE_BINARY", "BYTE_INDEXED", "BYTE_BINARY 2 bit", "BYTE_BINARY 4 bit", 65 "INT_RGBx", "USHORT_555x_RGB" }; 66 public final JComboBox screenCombo; 67 public TextureChooser texturechooser; 68 public JCheckBox aliasCB, renderCB, toolBarCB; 69 public JCheckBox compositeCB, textureCB; 70 public JSlider slider; 71 public Object obj; 72 private Font font = new Font(Font.SERIF, Font.PLAIN, 12); 73 74 @SuppressWarnings("LeakingThisInConstructor") 75 public GlobalControls(DemoInstVarsAccessor demoInstVars) { 76 this.demoInstVars = demoInstVars; 77 78 setLayout(new GridBagLayout()); 79 setBorder(new TitledBorder(new EtchedBorder(), "Global Controls")); 80 81 aliasCB = createCheckBox("Anti-Aliasing", true, 0); 82 renderCB = createCheckBox("Rendering Quality", false, 1); 83 textureCB = createCheckBox("Texture", false, 2); 84 compositeCB = createCheckBox("AlphaComposite", false, 3); 85 86 screenCombo = new JComboBox(); 87 screenCombo.setPreferredSize(new Dimension(120, 18)); 88 screenCombo.setLightWeightPopupEnabled(true); 89 screenCombo.setFont(font); 90 for (int i = 0; i < screenNames.length; i++) { 91 screenCombo.addItem(screenNames[i]); 92 } 93 screenCombo.addItemListener(this); 94 J2Ddemo.addToGridBag(this, screenCombo, 0, 4, 1, 1, 0.0, 0.0); 95 96 toolBarCB = createCheckBox("Tools", false, 5); 97 98 slider = new JSlider(SwingConstants.HORIZONTAL, 0, 200, 30); 99 slider.addChangeListener(this); 100 TitledBorder tb = new TitledBorder(new EtchedBorder()); 101 tb.setTitleFont(font); 102 tb.setTitle("Anim delay = 30 ms"); 103 slider.setBorder(tb); 104 slider.setMinimumSize(new Dimension(80, 46)); 105 J2Ddemo.addToGridBag(this, slider, 0, 6, 1, 1, 1.0, 1.0); 106 107 texturechooser = new TextureChooser(0, demoInstVars); 108 J2Ddemo.addToGridBag(this, texturechooser, 0, 7, 1, 1, 1.0, 1.0); 109 } 110 111 private JCheckBox createCheckBox(String s, boolean b, int y) { 112 JCheckBox cb = new JCheckBox(s, b); 113 cb.setFont(font); 114 cb.setHorizontalAlignment(SwingConstants.LEFT); 115 cb.addItemListener(this); 116 J2Ddemo.addToGridBag(this, cb, 0, y, 1, 1, 1.0, 1.0); 117 return cb; 118 } 119 120 @Override 121 public void stateChanged(ChangeEvent e) { 122 int value = slider.getValue(); 123 TitledBorder tb = (TitledBorder) slider.getBorder(); 124 tb.setTitle("Anim delay = " + String.valueOf(value) + " ms"); 125 int index = demoInstVars.getTabbedPane().getSelectedIndex() - 1; 126 DemoGroup dg = demoInstVars.getGroup()[index]; 127 JPanel p = dg.getPanel(); 128 for (int i = 0; i < p.getComponentCount(); i++) { 129 DemoPanel dp = (DemoPanel) p.getComponent(i); 130 if (dp.tools != null && dp.tools.slider != null) { 131 dp.tools.slider.setValue(value); 132 } 133 } 134 slider.repaint(); 135 } 136 137 @Override 138 public void itemStateChanged(ItemEvent e) { 139 if (demoInstVars.getTabbedPane().getSelectedIndex() != 0) { 140 obj = e.getSource(); 141 int index = demoInstVars.getTabbedPane().getSelectedIndex() - 1; 142 demoInstVars.getGroup()[index].setup(true); 143 obj = null; 144 } 145 } 146 147 @Override 148 public Dimension getPreferredSize() { 149 return new Dimension(135, 260); 150 } 151 }