| /* |
| * |
| * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * |
| * - Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * |
| * - Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * |
| * - Neither the name of Oracle nor the names of its |
| * contributors may be used to endorse or promote products derived |
| * from this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS |
| * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
| * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
| * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
| * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
| * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
| * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| package java2d; |
| |
| |
| import static java2d.CustomControlsContext.State.START; |
| import static java2d.CustomControlsContext.State.STOP; |
| import static java2d.DemoImages.newDemoImages; |
| import static java2d.DemoFonts.newDemoFonts; |
| import static java2d.RunWindow.RunWindowSettings; |
| import java.awt.BorderLayout; |
| import java.awt.Color; |
| import java.awt.Component; |
| import java.awt.Cursor; |
| import java.awt.Dimension; |
| import java.awt.Font; |
| import java.awt.Graphics; |
| import java.awt.Graphics2D; |
| import java.awt.GridBagConstraints; |
| import java.awt.GridBagLayout; |
| import java.awt.Insets; |
| import java.awt.RenderingHints; |
| import java.awt.Toolkit; |
| import java.awt.event.ActionEvent; |
| import java.awt.event.ActionListener; |
| import java.awt.event.ItemEvent; |
| import java.awt.event.ItemListener; |
| import java.awt.event.WindowAdapter; |
| import java.awt.event.WindowEvent; |
| import java.awt.event.WindowListener; |
| import java.awt.font.FontRenderContext; |
| import java.awt.font.TextLayout; |
| import javax.swing.Box; |
| import javax.swing.BoxLayout; |
| import javax.swing.Icon; |
| import javax.swing.JCheckBoxMenuItem; |
| import javax.swing.JColorChooser; |
| import javax.swing.JFrame; |
| import javax.swing.JLabel; |
| import javax.swing.JMenu; |
| import javax.swing.JMenuBar; |
| import javax.swing.JMenuItem; |
| import javax.swing.JOptionPane; |
| import javax.swing.JPanel; |
| import javax.swing.JPopupMenu; |
| import javax.swing.JProgressBar; |
| import javax.swing.JSeparator; |
| import javax.swing.JTabbedPane; |
| import javax.swing.SwingUtilities; |
| import javax.swing.UIManager; |
| import javax.swing.border.EtchedBorder; |
| |
| |
| /** |
| * A demo that shows Java 2D(TM) API features. |
| */ |
| @SuppressWarnings("serial") |
| public class J2Ddemo extends JPanel implements ItemListener, ActionListener, DemoInstVarsAccessor { |
| private final GlobalControls controls; |
| private final MemoryMonitor memorymonitor; |
| private final PerformanceMonitor performancemonitor; |
| private final JTabbedPane tabbedPane; |
| private final DemoGroup[] group; |
| private JCheckBoxMenuItem verboseCB; |
| private JCheckBoxMenuItem ccthreadCB; |
| private JCheckBoxMenuItem printCB = new JCheckBoxMenuItem("Default Printer"); |
| private Color backgroundColor; |
| private JCheckBoxMenuItem memoryCB, perfCB; |
| private final Intro intro; |
| public static final String[][] demos = { |
| { "Arcs_Curves", "Arcs", "BezierAnim", "Curves", "Ellipses" }, |
| { "Clipping", "Areas", "ClipAnim", "Intersection", "Text" }, |
| { "Colors", "BullsEye", "ColorConvert", "Rotator3D" }, |
| { "Composite", "ACimages", "ACrules", "FadeAnim" }, |
| { "Fonts", "AttributedStr", "Highlighting", "Outline", "Tree" }, |
| { "Images", "DukeAnim", "ImageOps", "JPEGFlip", "WarpImage" }, |
| { "Lines", "Caps", "Dash", "Joins", "LineAnim" }, |
| { "Mix", "Balls", "BezierScroller", "Stars3D" }, |
| { "Paint", "GradAnim", "Gradient", "Texture", "TextureAnim" }, |
| { "Paths", "Append", "CurveQuadTo", "FillStroke", "WindingRule" }, |
| { "Transforms", "Rotate", "SelectTx", "TransformAnim" } |
| }; |
| private final boolean demoIsInApplet; |
| private JCheckBoxMenuItem controlsCB; |
| private JMenuItem runMI, cloneMI, fileMI, backgMI; |
| // private JMenuItem ccthreadMI, verboseMI; |
| private RunWindow runwindow; |
| private RunWindowSettings runWndSetts; |
| private CloningFeature cloningfeature; |
| private JFrame rf, cf; |
| // private GlobalPanel gp; |
| |
| /** |
| * Construct the J2D Demo. |
| */ |
| public J2Ddemo(boolean demoIsInApplet, DemoProgress progress, RunWindowSettings runWndSetts) { |
| this.demoIsInApplet = demoIsInApplet; |
| this.runWndSetts = runWndSetts; |
| |
| setLayout(new BorderLayout()); |
| setBorder(new EtchedBorder()); |
| |
| add(createMenuBar(), BorderLayout.NORTH); |
| |
| // hard coding 14 = 11 demo dirs + images + fonts + Intro |
| progress.setMaximum(13); |
| progress.setText("Loading images"); |
| newDemoImages(); |
| progress.setValue(progress.getValue() + 1); |
| progress.setText("Loading fonts"); |
| newDemoFonts(); |
| progress.setValue(progress.getValue() + 1); |
| progress.setText("Loading Intro"); |
| intro = new Intro(); |
| progress.setValue(progress.getValue() + 1); |
| UIManager.put("Button.margin", new Insets(0, 0, 0, 0)); |
| |
| controls = new GlobalControls(this); |
| memorymonitor = new MemoryMonitor(); |
| performancemonitor = new PerformanceMonitor(); |
| |
| GlobalPanel gp = new GlobalPanel(this); |
| |
| tabbedPane = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.WRAP_TAB_LAYOUT); |
| tabbedPane.setFont(new Font(Font.SERIF, Font.PLAIN, 12)); |
| tabbedPane.addTab("", new J2DIcon(this), gp); |
| tabbedPane.addChangeListener(gp); |
| |
| group = new DemoGroup[demos.length]; |
| for (int i = 0; i < demos.length; i++) { |
| progress.setText("Loading demos." + demos[i][0]); |
| group[i] = new DemoGroup(demos[i][0], this); |
| tabbedPane.addTab(demos[i][0], null); |
| progress.setValue(progress.getValue() + 1); |
| } |
| |
| add(tabbedPane, BorderLayout.CENTER); |
| } |
| |
| private JMenuBar createMenuBar() { |
| |
| JPopupMenu.setDefaultLightWeightPopupEnabled(false); |
| JMenuBar menuBar = new JMenuBar(); |
| |
| if (!demoIsInApplet) { |
| JMenu file = menuBar.add(new JMenu("File")); |
| fileMI = file.add(new JMenuItem("Exit")); |
| fileMI.addActionListener(this); |
| } |
| |
| JMenu options = menuBar.add(new JMenu("Options")); |
| |
| controlsCB = (JCheckBoxMenuItem) options.add( |
| new JCheckBoxMenuItem("Global Controls", true)); |
| controlsCB.addItemListener(this); |
| |
| memoryCB = (JCheckBoxMenuItem) options.add( |
| new JCheckBoxMenuItem("Memory Monitor", true)); |
| memoryCB.addItemListener(this); |
| |
| perfCB = (JCheckBoxMenuItem) options.add( |
| new JCheckBoxMenuItem("Performance Monitor", true)); |
| perfCB.addItemListener(this); |
| |
| options.add(new JSeparator()); |
| |
| ccthreadCB = (JCheckBoxMenuItem) options.add( |
| new JCheckBoxMenuItem("Custom Controls Thread")); |
| ccthreadCB.addItemListener(this); |
| |
| printCB = (JCheckBoxMenuItem) options.add(printCB); |
| |
| verboseCB = (JCheckBoxMenuItem) options.add( |
| new JCheckBoxMenuItem("Verbose")); |
| |
| options.add(new JSeparator()); |
| |
| backgMI = options.add(new JMenuItem("Background Color")); |
| backgMI.addActionListener(this); |
| |
| runMI = options.add(new JMenuItem("Run Window")); |
| runMI.addActionListener(this); |
| |
| cloneMI = options.add(new JMenuItem("Cloning Feature")); |
| cloneMI.addActionListener(this); |
| |
| return menuBar; |
| } |
| |
| public void createRunWindow() { |
| if (rf != null) { |
| rf.toFront(); |
| return; |
| } |
| runwindow = new RunWindow(this, runWndSetts); |
| WindowListener l = new WindowAdapter() { |
| |
| @Override |
| public void windowClosing(WindowEvent e) { |
| runwindow.stop(); |
| rf.dispose(); |
| } |
| |
| @Override |
| public void windowClosed(WindowEvent e) { |
| rf = null; |
| } |
| }; |
| rf = new JFrame("Run"); |
| rf.addWindowListener(l); |
| rf.getContentPane().add("Center", runwindow); |
| rf.pack(); |
| if (!demoIsInApplet) { |
| rf.setSize(new Dimension(200, 125)); |
| } else { |
| rf.setSize(new Dimension(200, 150)); |
| } |
| rf.setVisible(true); |
| } |
| |
| public void startRunWindow() { |
| SwingUtilities.invokeLater(new Runnable() { |
| |
| @Override |
| public void run() { |
| runwindow.doRunAction(); |
| } |
| }); |
| } |
| |
| @Override |
| public void actionPerformed(ActionEvent e) { |
| if (e.getSource().equals(fileMI)) { |
| System.exit(0); |
| } else if (e.getSource().equals(runMI)) { |
| createRunWindow(); |
| } else if (e.getSource().equals(cloneMI)) { |
| if (cloningfeature == null) { |
| cloningfeature = new CloningFeature(this); |
| WindowListener l = new WindowAdapter() { |
| |
| @Override |
| public void windowClosing(WindowEvent e) { |
| cloningfeature.stop(); |
| cf.dispose(); |
| } |
| |
| @Override |
| public void windowClosed(WindowEvent e) { |
| cloningfeature = null; |
| } |
| }; |
| cf = new JFrame("Cloning Demo"); |
| cf.addWindowListener(l); |
| cf.getContentPane().add("Center", cloningfeature); |
| cf.pack(); |
| cf.setSize(new Dimension(320, 330)); |
| cf.setVisible(true); |
| } else { |
| cf.toFront(); |
| } |
| } else if (e.getSource().equals(backgMI)) { |
| backgroundColor = |
| JColorChooser.showDialog(this, "Background Color", |
| Color.white); |
| for (int i = 1; i < tabbedPane.getTabCount(); i++) { |
| JPanel p = group[i - 1].getPanel(); |
| for (int j = 0; j < p.getComponentCount(); j++) { |
| DemoPanel dp = (DemoPanel) p.getComponent(j); |
| if (dp.surface != null) { |
| dp.surface.setBackground(backgroundColor); |
| } |
| } |
| } |
| } |
| } |
| |
| @Override |
| public void itemStateChanged(ItemEvent e) { |
| if (e.getSource().equals(controlsCB)) { |
| boolean newVisibility = !controls.isVisible(); |
| controls.setVisible(newVisibility); |
| for (Component cmp : controls.texturechooser.getComponents()) { |
| cmp.setVisible(newVisibility); |
| } |
| } else if (e.getSource().equals(memoryCB)) { |
| if (memorymonitor.isVisible()) { |
| memorymonitor.setVisible(false); |
| memorymonitor.surf.setVisible(false); |
| memorymonitor.surf.stop(); |
| } else { |
| memorymonitor.setVisible(true); |
| memorymonitor.surf.setVisible(true); |
| memorymonitor.surf.start(); |
| } |
| } else if (e.getSource().equals(perfCB)) { |
| if (performancemonitor.isVisible()) { |
| performancemonitor.setVisible(false); |
| performancemonitor.surf.setVisible(false); |
| performancemonitor.surf.stop(); |
| } else { |
| performancemonitor.setVisible(true); |
| performancemonitor.surf.setVisible(true); |
| performancemonitor.surf.start(); |
| } |
| } else if (e.getSource().equals(ccthreadCB)) { |
| CustomControlsContext.State state = |
| ccthreadCB.isSelected() ? START : STOP; |
| if (tabbedPane.getSelectedIndex() != 0) { |
| JPanel p = group[tabbedPane.getSelectedIndex() - 1].getPanel(); |
| for (int i = 0; i < p.getComponentCount(); i++) { |
| DemoPanel dp = (DemoPanel) p.getComponent(i); |
| if (dp.ccc != null) { |
| dp.ccc.handleThread(state); |
| } |
| } |
| } |
| } |
| revalidate(); |
| } |
| |
| public void start() { |
| if (tabbedPane.getSelectedIndex() == 0) { |
| intro.start(); |
| } else { |
| group[tabbedPane.getSelectedIndex() - 1].setup(false); |
| if (memorymonitor.surf.thread == null && memoryCB.getState()) { |
| memorymonitor.surf.start(); |
| } |
| if (performancemonitor.surf.thread == null && perfCB.getState()) { |
| performancemonitor.surf.start(); |
| } |
| } |
| } |
| |
| public void stop() { |
| if (tabbedPane.getSelectedIndex() == 0) { |
| intro.stop(); |
| } else { |
| memorymonitor.surf.stop(); |
| performancemonitor.surf.stop(); |
| int i = tabbedPane.getSelectedIndex() - 1; |
| group[i].shutDown(group[i].getPanel()); |
| } |
| } |
| |
| /** |
| * Start of 'DemoInstVarsAccessor' implementation. |
| */ |
| @Override |
| public GlobalControls getControls() { |
| return controls; |
| } |
| |
| @Override |
| public MemoryMonitor getMemoryMonitor() { |
| return memorymonitor; |
| } |
| |
| @Override |
| public PerformanceMonitor getPerformanceMonitor() { |
| return performancemonitor; |
| } |
| |
| @Override |
| public JTabbedPane getTabbedPane() { |
| return tabbedPane; |
| } |
| |
| @Override |
| public DemoGroup[] getGroup() { |
| return group; |
| } |
| |
| @Override |
| public void setGroupColumns(int columns) { |
| for (DemoGroup dg : group) { |
| if (dg != null) { |
| dg.columns = columns; |
| } |
| } |
| } |
| |
| @Override |
| public JCheckBoxMenuItem getVerboseCB() { |
| return verboseCB; |
| } |
| |
| @Override |
| public JCheckBoxMenuItem getCcthreadCB() { |
| return ccthreadCB; |
| } |
| |
| @Override |
| public JCheckBoxMenuItem getPrintCB() { |
| return printCB; |
| } |
| |
| @Override |
| public Color getBackgroundColor() { |
| return backgroundColor; |
| } |
| |
| @Override |
| public JCheckBoxMenuItem getMemoryCB() { |
| return memoryCB; |
| } |
| |
| @Override |
| public JCheckBoxMenuItem getPerfCB() { |
| return perfCB; |
| } |
| |
| @Override |
| public Intro getIntro() { |
| return intro; |
| } |
| /** |
| * End of 'DemoInstVarsAccessor' implementation. |
| */ |
| |
| static void addToGridBag(JPanel panel, Component comp, |
| int x, int y, int w, int h, double weightx, double weighty) { |
| |
| GridBagLayout gbl = (GridBagLayout) panel.getLayout(); |
| GridBagConstraints c = new GridBagConstraints(); |
| c.fill = GridBagConstraints.BOTH; |
| c.gridx = x; |
| c.gridy = y; |
| c.gridwidth = w; |
| c.gridheight = h; |
| c.weightx = weightx; |
| c.weighty = weighty; |
| panel.add(comp); |
| gbl.setConstraints(comp, c); |
| } |
| |
| |
| /** |
| * The Icon for the Intro tab. |
| */ |
| static class J2DIcon implements Icon { |
| private final DemoInstVarsAccessor demoInstVars; |
| private static final Color myBlue = new Color(94, 105, 176); |
| private static final Color myBlack = new Color(20, 20, 20); |
| private static final Font font = new Font(Font.SERIF, Font.BOLD, 12); |
| private FontRenderContext frc = new FontRenderContext(null, true, true); |
| private TextLayout tl = new TextLayout("J2D demo", font, frc); |
| |
| public J2DIcon(DemoInstVarsAccessor demoInstVars) { |
| this.demoInstVars = demoInstVars; |
| } |
| |
| @Override |
| public void paintIcon(Component c, Graphics g, int x, int y) { |
| Graphics2D g2 = (Graphics2D) g; |
| g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, |
| RenderingHints.VALUE_ANTIALIAS_ON); |
| g2.setFont(font); |
| if (demoInstVars.getTabbedPane().getSelectedIndex() == 0) { |
| g2.setColor(myBlue); |
| } else { |
| g2.setColor(myBlack); |
| } |
| tl.draw(g2, x, y + (float)(tl.getBounds().getHeight())); |
| } |
| |
| @Override |
| public int getIconWidth() { |
| return (int)(tl.getAdvance())+5; |
| } |
| |
| @Override |
| public int getIconHeight() { |
| return (int)(tl.getBounds().getHeight()); |
| } |
| } |
| |
| /** |
| * This class eliminates the need in presence of static 'JLabel', 'JProgressBar' |
| * variables in 'J2Ddemo' class. It is a part of the fix which changed static |
| * variables for instance variables in certain demo classes. |
| */ |
| public static class DemoProgress { |
| private final JLabel progressLabel; |
| private final JProgressBar progressBar; |
| |
| public DemoProgress(JLabel progressLabel, JProgressBar progressBar) { |
| if (progressLabel == null) { |
| throw new IllegalArgumentException("null was transferred as 'progressLabel' argument"); |
| } |
| if (progressBar == null) { |
| throw new IllegalArgumentException("null was transferred as 'progressBar' argument"); |
| } |
| |
| this.progressLabel = progressLabel; |
| this.progressBar = progressBar; |
| } |
| |
| public void setText(String text) { |
| progressLabel.setText(text); |
| } |
| |
| public void setMaximum(int n) { |
| progressBar.setMaximum(n); |
| } |
| |
| public int getValue() { |
| return progressBar.getValue(); |
| } |
| |
| public void setValue(int n) { |
| progressBar.setValue(n); |
| } |
| } |
| |
| private static void initFrame(String[] args, RunWindowSettings runWndSetts) { |
| final J2Ddemo[] demoOneInstArr = new J2Ddemo[1]; |
| |
| JFrame frame = new JFrame("Java 2D(TM) Demo"); |
| frame.getAccessibleContext().setAccessibleDescription( |
| "A sample application to demonstrate Java2D(TM) features"); |
| int FRAME_WIDTH = 400, FRAME_HEIGHT = 200; |
| frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); |
| Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); |
| frame.setLocation(d.width / 2 - FRAME_WIDTH / 2, d.height / 2 - FRAME_HEIGHT |
| / 2); |
| frame.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); |
| frame.addWindowListener(new WindowAdapter() { |
| |
| @Override |
| public void windowClosing(WindowEvent e) { |
| System.exit(0); |
| } |
| |
| @Override |
| public void windowDeiconified(WindowEvent e) { |
| J2Ddemo demo = demoOneInstArr[0]; |
| if (demo != null) { |
| demo.start(); |
| } |
| } |
| |
| @Override |
| public void windowIconified(WindowEvent e) { |
| J2Ddemo demo = demoOneInstArr[0]; |
| if (demo != null) { |
| demo.stop(); |
| } |
| } |
| }); |
| JOptionPane.setRootFrame(frame); |
| |
| JPanel progressPanel = new JPanel() { |
| |
| @Override |
| public Insets getInsets() { |
| return new Insets(40, 30, 20, 30); |
| } |
| }; |
| progressPanel.setLayout(new BoxLayout(progressPanel, BoxLayout.Y_AXIS)); |
| frame.getContentPane().add(progressPanel, BorderLayout.CENTER); |
| |
| Dimension labelSize = new Dimension(400, 20); |
| JLabel progressLabel = new JLabel("Loading, please wait..."); |
| progressLabel.setAlignmentX(CENTER_ALIGNMENT); |
| progressLabel.setMaximumSize(labelSize); |
| progressLabel.setPreferredSize(labelSize); |
| progressPanel.add(progressLabel); |
| progressPanel.add(Box.createRigidArea(new Dimension(1, 20))); |
| |
| JProgressBar progressBar = new JProgressBar(); |
| progressBar.setStringPainted(true); |
| progressLabel.setLabelFor(progressBar); |
| progressBar.setAlignmentX(CENTER_ALIGNMENT); |
| progressBar.setMinimum(0); |
| progressBar.setValue(0); |
| progressBar.getAccessibleContext().setAccessibleName( |
| "J2D demo loading progress"); |
| progressPanel.add(progressBar); |
| DemoProgress demoProgress = new DemoProgress(progressLabel, progressBar); |
| |
| frame.setVisible(true); |
| |
| J2Ddemo demo = new J2Ddemo(false, demoProgress, runWndSetts); |
| demoOneInstArr[0] = demo; |
| |
| frame.getContentPane().removeAll(); |
| frame.getContentPane().setLayout(new BorderLayout()); |
| frame.getContentPane().add(demo, BorderLayout.CENTER); |
| FRAME_WIDTH = 850; |
| FRAME_HEIGHT = 600; |
| frame.setLocation(d.width / 2 - FRAME_WIDTH / 2, d.height / 2 - FRAME_HEIGHT |
| / 2); |
| frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); |
| frame.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); |
| |
| for (int i = 0; i < args.length; i++) { |
| String arg = args[i]; |
| String s = arg.substring(arg.indexOf('=') + 1); |
| if (arg.startsWith("-runs=")) { |
| runWndSetts.setNumRuns(Integer.parseInt(s)); |
| runWndSetts.setExit(true); |
| demo.createRunWindow(); |
| } else if (arg.startsWith("-screen=")) { |
| demo.getControls().screenCombo.setSelectedIndex(Integer.parseInt(s)); |
| } else if (arg.startsWith("-antialias=")) { |
| demo.controls.aliasCB.setSelected(s.endsWith("true")); |
| } else if (arg.startsWith("-rendering=")) { |
| demo.controls.renderCB.setSelected(s.endsWith("true")); |
| } else if (arg.startsWith("-texture=")) { |
| demo.controls.textureCB.setSelected(s.endsWith("true")); |
| } else if (arg.startsWith("-composite=")) { |
| demo.controls.compositeCB.setSelected(s.endsWith("true")); |
| } else if (arg.startsWith("-verbose")) { |
| demo.verboseCB.setSelected(true); |
| } else if (arg.startsWith("-print")) { |
| demo.printCB.setSelected(true); |
| runWndSetts.setPrintCBIsSelected(true); |
| } else if (arg.startsWith("-columns=")) { |
| demo.setGroupColumns(Integer.parseInt(s)); |
| } else if (arg.startsWith("-buffers=")) { |
| // usage -buffers=3,10 |
| runWndSetts.setBuffersFlag(true); |
| int i1 = arg.indexOf('=') + 1; |
| int i2 = arg.indexOf(','); |
| String s1 = arg.substring(i1, i2); |
| runWndSetts.setBufBeg(Integer.parseInt(s1)); |
| s1 = arg.substring(i2 + 1, arg.length()); |
| runWndSetts.setBufEnd(Integer.parseInt(s1)); |
| } else if (arg.startsWith("-ccthread")) { |
| demo.ccthreadCB.setSelected(true); |
| } else if (arg.startsWith("-zoom")) { |
| runWndSetts.setZoomCBSelected(true); |
| } else if (arg.startsWith("-maxscreen")) { |
| frame.setLocation(0, 0); |
| frame.setSize(d.width, d.height); |
| } |
| } |
| |
| frame.validate(); |
| frame.repaint(); |
| frame.getFocusTraversalPolicy().getDefaultComponent(frame).requestFocus(); |
| demo.start(); |
| |
| if (runWndSetts.getExit()) { |
| demo.startRunWindow(); |
| } |
| |
| } |
| |
| public static void main(final String args[]) { |
| SwingUtilities.invokeLater(new Runnable() { |
| @Override |
| public void run() { |
| RunWindowSettings runWndSetts = new RunWindowSettings(); |
| for (int i = 0; i < args.length; i++) { |
| if (args[i].startsWith("-h") || args[i].startsWith("-help")) { |
| String s = "\njava -jar J2Ddemo.jar -runs=5 -delay=5 -screen=5 " |
| + "-antialias=true -rendering=true -texture=true " |
| + "-composite=true -verbose -print -columns=3 " |
| + "-buffers=5,10 -ccthread -zoom -maxscreen \n"; |
| System.out.println(s); |
| s = |
| " -runs=5 Number of runs to execute\n" |
| + " -delay=5 Sleep amount between tabs\n" |
| + " -antialias= true or false for antialiasing\n" |
| + " -rendering= true or false for quality or speed\n" |
| + " -texture= true or false for texturing\n" |
| + " -composite= true or false for compositing\n" |
| + " -verbose output Surface graphic states \n" |
| + " -print during run print the Surface, " |
| + "use the Default Printer\n" |
| + " -columns=3 # of columns to use in clone layout \n" |
| + " -screen=3 demos all use this screen type \n" |
| + " -buffers=5,10 during run - clone to see screens " |
| + "five through ten\n" |
| + " -ccthread Invoke the Custom Controls Thread \n" |
| + " -zoom mouseClick on surface for zoom in \n" |
| + " -maxscreen take up the entire monitor screen \n"; |
| System.out.println(s); |
| s = |
| "Examples : \n" + " Print all of the demos : \n" |
| + " java -jar J2Ddemo.jar -runs=1 -delay=60 -print \n" |
| + " Run zoomed in with custom control thread \n" |
| + " java -jar J2Ddemo.jar -runs=10 -zoom -ccthread\n"; |
| System.out.println(s); |
| System.exit(0); |
| } else if (args[i].startsWith("-delay=")) { |
| String s = args[i].substring(args[i].indexOf('=') + 1); |
| runWndSetts.setDelay(Integer.parseInt(s)); |
| } |
| } |
| |
| initFrame(args, runWndSetts); |
| } |
| }); |
| } |
| } |