1 /* 2 * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package java.awt; 27 28 import sun.awt.AWTPermissions; 29 30 /** 31 * <code>MouseInfo</code> provides methods for getting information about the mouse, 32 * such as mouse pointer location and the number of mouse buttons. 33 * 34 * @author Roman Poborchiy 35 * @since 1.5 36 */ 37 38 public class MouseInfo { 39 40 /** 41 * Private constructor to prevent instantiation. 42 */ 43 private MouseInfo() { 44 } 45 46 /** 47 * Returns a <code>PointerInfo</code> instance that represents the current 48 * location of the mouse pointer. 49 * The <code>GraphicsDevice</code> stored in this <code>PointerInfo</code> 50 * contains the mouse pointer. The coordinate system used for the mouse position 51 * depends on whether or not the <code>GraphicsDevice</code> is part of a virtual 52 * screen device. 53 * For virtual screen devices, the coordinates are given in the virtual 54 * coordinate system, otherwise they are returned in the coordinate system 55 * of the <code>GraphicsDevice</code>. See {@link GraphicsConfiguration} 56 * for more information about the virtual screen devices. 57 * On systems without a mouse, returns <code>null</code>. 58 * <p> 59 * If there is a security manager, its <code>checkPermission</code> method 60 * is called with an <code>AWTPermission("watchMousePointer")</code> 61 * permission before creating and returning a <code>PointerInfo</code> 62 * object. This may result in a <code>SecurityException</code>. 63 * 64 * @exception HeadlessException if GraphicsEnvironment.isHeadless() returns true 65 * @exception SecurityException if a security manager exists and its 66 * <code>checkPermission</code> method doesn't allow the operation 67 * @see GraphicsConfiguration 68 * @see SecurityManager#checkPermission 69 * @see java.awt.AWTPermission 70 * @return location of the mouse pointer 71 * @since 1.5 72 */ 73 public static PointerInfo getPointerInfo() throws HeadlessException { 74 if (GraphicsEnvironment.isHeadless()) { 75 throw new HeadlessException(); 76 } 77 78 SecurityManager security = System.getSecurityManager(); 79 if (security != null) { 80 security.checkPermission(AWTPermissions.WATCH_MOUSE_PERMISSION); 81 } 82 83 Point point = new Point(0, 0); 84 int deviceNum = Toolkit.getDefaultToolkit().getMouseInfoPeer().fillPointWithCoords(point); 85 GraphicsDevice[] gds = GraphicsEnvironment.getLocalGraphicsEnvironment(). 86 getScreenDevices(); 87 PointerInfo retval = null; 88 if (areScreenDevicesIndependent(gds)) { 89 retval = new PointerInfo(gds[deviceNum], point); 90 } else { 91 for (int i = 0; i < gds.length; i++) { 92 GraphicsConfiguration gc = gds[i].getDefaultConfiguration(); 93 Rectangle bounds = gc.getBounds(); 94 if (bounds.contains(point)) { 95 retval = new PointerInfo(gds[i], point); 96 } 97 } 98 } 99 100 return retval; 101 } 102 103 private static boolean areScreenDevicesIndependent(GraphicsDevice[] gds) { 104 for (int i = 0; i < gds.length; i++) { 105 Rectangle bounds = gds[i].getDefaultConfiguration().getBounds(); 106 if (bounds.x != 0 || bounds.y != 0) { 107 return false; 108 } 109 } 110 return true; 111 } 112 113 /** 114 * Returns the number of buttons on the mouse. 115 * On systems without a mouse, returns <code>-1</code>. 116 * 117 * @exception HeadlessException if GraphicsEnvironment.isHeadless() returns true 118 * @return number of buttons on the mouse 119 * @since 1.5 120 */ 121 public static int getNumberOfButtons() throws HeadlessException { 122 if (GraphicsEnvironment.isHeadless()) { 123 throw new HeadlessException(); 124 } 125 Object prop = Toolkit.getDefaultToolkit(). 126 getDesktopProperty("awt.mouse.numButtons"); 127 if (prop instanceof Integer) { 128 return ((Integer)prop).intValue(); 129 } 130 131 // This should never happen. 132 assert false : "awt.mouse.numButtons is not an integer property"; 133 return 0; 134 } 135 136 }