001 /*
002 * Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004 *
005 * This code is free software; you can redistribute it and/or modify it
006 * under the terms of the GNU General Public License version 2 only, as
007 * published by the Free Software Foundation. Sun designates this
008 * particular file as subject to the "Classpath" exception as provided
009 * by Sun in the LICENSE file that accompanied this code.
010 *
011 * This code is distributed in the hope that it will be useful, but WITHOUT
012 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014 * version 2 for more details (a copy is included in the LICENSE file that
015 * accompanied this code).
016 *
017 * You should have received a copy of the GNU General Public License version
018 * 2 along with this work; if not, write to the Free Software Foundation,
019 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020 *
021 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022 * CA 95054 USA or visit www.sun.com if you need additional information or
023 * have any questions.
024 */
025
026 package java.awt;
027
028 import sun.security.util.SecurityConstants;
029
030 /**
031 * <code>MouseInfo</code> provides methods for getting information about the mouse,
032 * such as mouse pointer location and the number of mouse buttons.
033 *
034 * @version 1.9, 05/05/07
035 * @author Roman Poborchiy
036 * @since 1.5
037 */
038
039 public class MouseInfo {
040
041 /**
042 * Private constructor to prevent instantiation.
043 */
044 private MouseInfo() {
045 }
046
047 /**
048 * Returns a <code>PointerInfo</code> instance that represents the current
049 * location of the mouse pointer.
050 * The <code>GraphicsDevice</code> stored in this <code>PointerInfo</code>
051 * contains the mouse pointer. The coordinate system used for the mouse position
052 * depends on whether or not the <code>GraphicsDevice</code> is part of a virtual
053 * screen device.
054 * For virtual screen devices, the coordinates are given in the virtual
055 * coordinate system, otherwise they are returned in the coordinate system
056 * of the <code>GraphicsDevice</code>. See {@link GraphicsConfiguration}
057 * for more information about the virtual screen devices.
058 * On systems without a mouse, returns <code>null</code>.
059 * <p>
060 * If there is a security manager, its <code>checkPermission</code> method
061 * is called with an <code>AWTPermission("watchMousePointer")</code>
062 * permission before creating and returning a <code>PointerInfo</code>
063 * object. This may result in a <code>SecurityException</code>.
064 *
065 * @exception HeadlessException if GraphicsEnvironment.isHeadless() returns true
066 * @exception SecurityException if a security manager exists and its
067 * <code>checkPermission</code> method doesn't allow the operation
068 * @see GraphicsConfiguration
069 * @see SecurityManager#checkPermission
070 * @see java.awt.AWTPermission
071 * @return location of the mouse pointer
072 * @since 1.5
073 */
074 public static PointerInfo getPointerInfo() throws HeadlessException {
075 if (GraphicsEnvironment.isHeadless()) {
076 throw new HeadlessException();
077 }
078
079 SecurityManager security = System.getSecurityManager();
080 if (security != null) {
081 security
082 .checkPermission(SecurityConstants.WATCH_MOUSE_PERMISSION);
083 }
084
085 Point point = new Point(0, 0);
086 int deviceNum = Toolkit.getDefaultToolkit().getMouseInfoPeer()
087 .fillPointWithCoords(point);
088 GraphicsDevice[] gds = GraphicsEnvironment
089 .getLocalGraphicsEnvironment().getScreenDevices();
090 PointerInfo retval = null;
091 if (areScreenDevicesIndependent(gds)) {
092 retval = new PointerInfo(gds[deviceNum], point);
093 } else {
094 for (int i = 0; i < gds.length; i++) {
095 GraphicsConfiguration gc = gds[i]
096 .getDefaultConfiguration();
097 Rectangle bounds = gc.getBounds();
098 if (bounds.contains(point)) {
099 retval = new PointerInfo(gds[i], point);
100 }
101 }
102 }
103
104 return retval;
105 }
106
107 private static boolean areScreenDevicesIndependent(
108 GraphicsDevice[] gds) {
109 for (int i = 0; i < gds.length; i++) {
110 Rectangle bounds = gds[i].getDefaultConfiguration()
111 .getBounds();
112 if (bounds.x != 0 || bounds.y != 0) {
113 return false;
114 }
115 }
116 return true;
117 }
118
119 /**
120 * Returns the number of buttons on the mouse.
121 * On systems without a mouse, returns <code>-1</code>.
122 *
123 * @exception HeadlessException if GraphicsEnvironment.isHeadless() returns true
124 * @return number of buttons on the mouse
125 * @since 1.5
126 */
127 public static int getNumberOfButtons() throws HeadlessException {
128 if (GraphicsEnvironment.isHeadless()) {
129 throw new HeadlessException();
130 }
131 Object prop = Toolkit.getDefaultToolkit().getDesktopProperty(
132 "awt.mouse.numButtons");
133 if (prop instanceof Integer) {
134 return ((Integer) prop).intValue();
135 }
136
137 // This should never happen.
138 assert false : "awt.mouse.numButtons is not an integer property";
139 return 0;
140 }
141
142 }
|