From: <fd...@us...> - 2008-08-04 22:19:12
|
Revision: 4397 http://jnode.svn.sourceforge.net/jnode/?rev=4397&view=rev Author: fduminy Date: 2008-08-04 22:19:02 +0000 (Mon, 04 Aug 2008) Log Message: ----------- desktop is now proposing only the available video modes Modified Paths: -------------- trunk/gui/src/awt/org/jnode/awt/JNodeToolkit.java trunk/gui/src/desktop/org/jnode/desktop/classic/Desktop.java trunk/gui/src/desktop/org/jnode/desktop/classic/TaskBar.java Modified: trunk/gui/src/awt/org/jnode/awt/JNodeToolkit.java =================================================================== --- trunk/gui/src/awt/org/jnode/awt/JNodeToolkit.java 2008-08-03 21:50:40 UTC (rev 4396) +++ trunk/gui/src/awt/org/jnode/awt/JNodeToolkit.java 2008-08-04 22:19:02 UTC (rev 4397) @@ -26,6 +26,7 @@ import gnu.java.awt.peer.ClasspathFontPeer; import gnu.java.awt.peer.EmbeddedWindowPeer; import gnu.java.security.action.GetPropertyAction; + import java.awt.AWTError; import java.awt.AWTException; import java.awt.Color; @@ -66,13 +67,17 @@ import java.net.URL; import java.security.AccessController; import java.security.PrivilegedAction; +import java.util.Arrays; +import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Properties; import java.util.Set; + import javax.imageio.ImageIO; import javax.naming.NamingException; + import org.apache.log4j.Logger; import org.jnode.awt.font.FontManager; import org.jnode.awt.font.JNodeFontPeer; @@ -781,28 +786,57 @@ config.getBounds().height - 2 * (100 + i)), null, tx, (i % 2 == 0) ? Color.RED : Color.BLUE, Surface.PAINT_MODE); } - - public Dimension changeScreenSize(String screenSizeId) { + + private JNodeFrameBufferDevice getDevice() { final JNodeFrameBufferDevice device = (JNodeFrameBufferDevice) GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); if (device == null) { throw new AWTError("No framebuffer fbDevice found"); } - GraphicsConfiguration[] configurations = device.getConfigurations(); - JNodeGraphicsConfiguration conf = null; - for (GraphicsConfiguration g_conf : configurations) { - if (screenSizeId.equals(g_conf.toString())) { - conf = (JNodeGraphicsConfiguration) g_conf; - break; - } - } + + return device; + } - if (conf == null) { - log.warn("Configuration not found " + screenSizeId); - return getScreenSize(); + private GraphicsConfiguration[] configs; + public GraphicsConfiguration[] getConfigurations() { + if (configs == null) { + final GraphicsConfiguration[] configurations = getDevice().getConfigurations(); + + configs = new GraphicsConfiguration[configurations.length]; + System.arraycopy(configurations, 0, configs, 0, configurations.length); + Arrays.sort(configs, new Comparator<GraphicsConfiguration>() { + @Override + public int compare(GraphicsConfiguration o1, GraphicsConfiguration o2) { + final Rectangle b1 = o1.getBounds(); + final Rectangle b2 = o2.getBounds(); + + int comp; + if (b1.getWidth() > b2.getWidth()) { + comp = +1; + } else if (b1.getWidth() < b2.getWidth()) { + comp = -1; + } else { + if (b1.getHeight() > b2.getHeight()) { + comp = +1; + } else if (b1.getHeight() < b2.getHeight()) { + comp = -1; + } else { + comp = 0; + } + } + + return comp; + } + + }); } + return configs; + } + + public Dimension changeScreenSize(JNodeGraphicsConfiguration config) { + final JNodeFrameBufferDevice device = getDevice(); - this.config = conf; + this.config = config; log.info("Using: " + config); this.api = device.getAPI(); try { Modified: trunk/gui/src/desktop/org/jnode/desktop/classic/Desktop.java =================================================================== --- trunk/gui/src/desktop/org/jnode/desktop/classic/Desktop.java 2008-08-03 21:50:40 UTC (rev 4396) +++ trunk/gui/src/desktop/org/jnode/desktop/classic/Desktop.java 2008-08-04 22:19:02 UTC (rev 4397) @@ -39,6 +39,7 @@ import java.awt.event.WindowEvent; import java.awt.image.BufferedImage; import java.net.URL; + import javax.imageio.ImageIO; import javax.swing.DefaultDesktopManager; import javax.swing.JButton; @@ -50,6 +51,7 @@ import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.SwingUtilities; + import org.apache.log4j.Logger; import org.jnode.awt.JNodeAwtContext; import org.jnode.awt.JNodeToolkit; @@ -214,10 +216,11 @@ JMenuItem desktopColor = new JMenuItem("Desktop color"); desktopColor.addActionListener(desktopColorAction); desktopMenu.add(desktopColor); - desktopMenu.add(taskBar.changeResMI1); - desktopMenu.add(taskBar.changeResMI2); - desktopMenu.add(taskBar.changeResMI3); - desktopMenu.add(taskBar.changeResMI4); + + for (JMenuItem item : taskBar.chgSizeMenuItem) { + desktopMenu.add(item); + } + desktopPane.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent event) { if (event.getButton() == MouseEvent.BUTTON2) { Modified: trunk/gui/src/desktop/org/jnode/desktop/classic/TaskBar.java =================================================================== --- trunk/gui/src/desktop/org/jnode/desktop/classic/TaskBar.java 2008-08-03 21:50:40 UTC (rev 4396) +++ trunk/gui/src/desktop/org/jnode/desktop/classic/TaskBar.java 2008-08-04 22:19:02 UTC (rev 4397) @@ -22,8 +22,10 @@ package org.jnode.desktop.classic; import gnu.java.security.action.SetPropertyAction; + import java.awt.BorderLayout; import java.awt.Color; +import java.awt.GraphicsConfiguration; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -34,6 +36,9 @@ import java.util.GregorianCalendar; import java.util.Timer; import java.util.TimerTask; + +import javax.swing.AbstractAction; +import javax.swing.Action; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBoxMenuItem; @@ -51,7 +56,9 @@ import javax.swing.plaf.metal.DefaultMetalTheme; import javax.swing.plaf.metal.MetalLookAndFeel; import javax.swing.plaf.metal.OceanTheme; + import org.apache.log4j.Logger; +import org.jnode.awt.JNodeGraphicsConfiguration; import org.jnode.awt.JNodeToolkit; import org.jnode.plugin.ExtensionPoint; @@ -68,12 +75,9 @@ JMenuItem haltMI; JMenuItem restartMI; JMenuItem desktopColorMI; - JMenuItem changeResMI1; - JMenuItem changeResMI2; - JMenuItem changeResMI3; - JMenuItem changeResMI4; Desktop desktop; Clock clock; + JMenuItem[] chgSizeMenuItem; public TaskBar(Desktop desk, ExtensionPoint appsEP) { this.desktop = desk; @@ -123,30 +127,20 @@ startMenu.add(settingsMenu); JMenu resMenu = new JMenu("Screen Resolution"); settingsMenu.add(resMenu); - resMenu.add(changeResMI1 = new JMenuItem("Set to 640x480/32")); - resMenu.add(changeResMI2 = new JMenuItem("Set to 800x600/32")); - resMenu.add(changeResMI3 = new JMenuItem("Set to 1024x768/32")); - resMenu.add(changeResMI4 = new JMenuItem("Set to 1280x1024/32")); + + int i = 0; + GraphicsConfiguration[] configs = ((JNodeToolkit) Toolkit.getDefaultToolkit()).getConfigurations(); + chgSizeMenuItem = new JMenuItem[configs.length]; + for (GraphicsConfiguration config : configs) { + Action a = new ChangeScreenResolution((JNodeGraphicsConfiguration) config); + resMenu.add(new JMenuItem(a)); + chgSizeMenuItem[i++] = new JMenuItem(a); + } - changeResMI1.addActionListener(new ChangeScreenResolution("640x480/32")); - changeResMI2.addActionListener(new ChangeScreenResolution("800x600/32")); - changeResMI3.addActionListener(new ChangeScreenResolution("1024x768/32")); - changeResMI4.addActionListener(new ChangeScreenResolution("1280x1024/32")); - - //these instances are used int the desktop popup menu - changeResMI1 = new JMenuItem("Set to 640x480/32"); - changeResMI2 = new JMenuItem("Set to 800x600/32"); - changeResMI3 = new JMenuItem("Set to 1024x768/32"); - changeResMI4 = new JMenuItem("Set to 1280x1024/32"); - changeResMI1.addActionListener(new ChangeScreenResolution("640x480/32")); - changeResMI2.addActionListener(new ChangeScreenResolution("800x600/32")); - changeResMI3.addActionListener(new ChangeScreenResolution("1024x768/32")); - changeResMI4.addActionListener(new ChangeScreenResolution("1280x1024/32")); - JMenu lfMenu = new JMenu("Look & Feel"); settingsMenu.add(lfMenu); UIManager.LookAndFeelInfo[] lafs = UIManager.getInstalledLookAndFeels(); - for (int i = 0; i < lafs.length; ++i) { + for (i = 0; i < lafs.length; ++i) { final UIManager.LookAndFeelInfo laf = lafs[i]; String name = laf.getName(); if (!"Metal".equals(name)) { @@ -190,7 +184,7 @@ clock = new Clock(); add(clock, BorderLayout.EAST); } - + private class SetLFAction implements ActionListener { private LookAndFeel lf; @@ -240,18 +234,21 @@ } } - class ChangeScreenResolution implements ActionListener, Runnable { - private String resolution; + class ChangeScreenResolution extends AbstractAction implements Runnable { + private final JNodeGraphicsConfiguration config; - public ChangeScreenResolution(String resolution) { - this.resolution = resolution; + public ChangeScreenResolution(JNodeGraphicsConfiguration config) { + super("Set to " + config.toString()); + this.config = config; } + @Override public void run() { - ((JNodeToolkit) Toolkit.getDefaultToolkit()).changeScreenSize(resolution); - AccessController.doPrivileged(new SetPropertyAction("jnode.awt.screensize", resolution)); + ((JNodeToolkit) Toolkit.getDefaultToolkit()).changeScreenSize(config); + AccessController.doPrivileged(new SetPropertyAction("jnode.awt.screensize", config.toString())); } + @Override public void actionPerformed(ActionEvent event) { SwingUtilities.invokeLater(this); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |