mirror of
https://github.com/openjdk/jdk.git
synced 2026-04-19 03:17:40 +00:00
8035568: [macosx] Cursor management unification
Reviewed-by: anthony, serb
This commit is contained in:
parent
ad5afe4557
commit
eea06f70fc
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -51,8 +51,12 @@ public class LWMouseInfoPeer implements MouseInfoPeer {
|
||||
return false;
|
||||
}
|
||||
|
||||
final Object windowPeer = AWTAccessor.getComponentAccessor().getPeer(w);
|
||||
return LWWindowPeer.getWindowUnderCursor() == windowPeer;
|
||||
LWWindowPeer windowPeer = AWTAccessor.getComponentAccessor().getPeer(w);
|
||||
if (windowPeer == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return LWToolkit.getLWToolkit().getPlatformWindowUnderMouse() == windowPeer.getPlatformWindow();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -396,6 +396,8 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
|
||||
return new LWMouseInfoPeer();
|
||||
}
|
||||
|
||||
protected abstract PlatformWindow getPlatformWindowUnderMouse();
|
||||
|
||||
@Override
|
||||
public final PrintJob getPrintJob(Frame frame, String doctitle,
|
||||
Properties props) {
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -749,11 +749,10 @@ public class LWWindowPeer
|
||||
lastMouseEventPeer = targetPeer;
|
||||
}
|
||||
} else {
|
||||
PlatformWindow topmostPlatforWindow =
|
||||
platformWindow.getTopmostPlatformWindowUnderMouse();
|
||||
PlatformWindow topmostPlatformWindow = LWToolkit.getLWToolkit().getPlatformWindowUnderMouse();
|
||||
|
||||
LWWindowPeer topmostWindowPeer =
|
||||
topmostPlatforWindow != null ? topmostPlatforWindow.getPeer() : null;
|
||||
topmostPlatformWindow != null ? topmostPlatformWindow.getPeer() : null;
|
||||
|
||||
// topmostWindowPeer == null condition is added for the backward
|
||||
// compatibility with applets. It can be removed when the
|
||||
@ -764,8 +763,7 @@ public class LWWindowPeer
|
||||
screenX, screenY, modifiers, clickCount, popupTrigger,
|
||||
targetPeer);
|
||||
} else {
|
||||
LWComponentPeer<?, ?> topmostTargetPeer =
|
||||
topmostWindowPeer != null ? topmostWindowPeer.findPeerAt(r.x + x, r.y + y) : null;
|
||||
LWComponentPeer<?, ?> topmostTargetPeer = topmostWindowPeer.findPeerAt(r.x + x, r.y + y);
|
||||
topmostWindowPeer.generateMouseEnterExitEventsForComponents(when, button, x, y,
|
||||
screenX, screenY, modifiers, clickCount, popupTrigger,
|
||||
topmostTargetPeer);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -107,8 +107,6 @@ public interface PlatformWindow {
|
||||
|
||||
public void setAlwaysOnTop(boolean value);
|
||||
|
||||
public PlatformWindow getTopmostPlatformWindowUnderMouse();
|
||||
|
||||
public void updateFocusableWindowState();
|
||||
|
||||
public boolean rejectFocusRequest(CausedFocusEvent.Cause cause);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -129,11 +129,6 @@ public class CPlatformEmbeddedFrame implements PlatformWindow {
|
||||
@Override
|
||||
public void setAlwaysOnTop(boolean value) {}
|
||||
|
||||
// This method should be properly implemented for applets.
|
||||
// It returns null just as a stub.
|
||||
@Override
|
||||
public PlatformWindow getTopmostPlatformWindowUnderMouse() { return null; }
|
||||
|
||||
@Override
|
||||
public void updateFocusableWindowState() {}
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -161,11 +161,6 @@ public class CPlatformLWWindow extends CPlatformWindow {
|
||||
public void setAlwaysOnTop(boolean isAlwaysOnTop) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlatformWindow getTopmostPlatformWindowUnderMouse(){
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOpacity(float opacity) {
|
||||
}
|
||||
|
||||
@ -61,9 +61,9 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
||||
private static native void nativeSetEnabled(long nsWindowPtr, boolean isEnabled);
|
||||
private static native void nativeSynthesizeMouseEnteredExitedEvents();
|
||||
private static native void nativeDispose(long nsWindowPtr);
|
||||
private static native CPlatformWindow nativeGetTopmostPlatformWindowUnderMouse();
|
||||
private static native void nativeEnterFullScreenMode(long nsWindowPtr);
|
||||
private static native void nativeExitFullScreenMode(long nsWindowPtr);
|
||||
static native CPlatformWindow nativeGetTopmostPlatformWindowUnderMouse();
|
||||
|
||||
// Loger to report issues happened during execution but that do not affect functionality
|
||||
private static final PlatformLogger logger = PlatformLogger.getLogger("sun.lwawt.macosx.CPlatformWindow");
|
||||
@ -750,10 +750,6 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
||||
setStyleBits(ALWAYS_ON_TOP, isAlwaysOnTop);
|
||||
}
|
||||
|
||||
public PlatformWindow getTopmostPlatformWindowUnderMouse(){
|
||||
return CPlatformWindow.nativeGetTopmostPlatformWindowUnderMouse();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOpacity(float opacity) {
|
||||
CWrapper.NSWindow.setAlphaValue(getNSWindowPtr(), opacity);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -78,7 +78,7 @@ class CRobot implements RobotPeer {
|
||||
@Override
|
||||
public void mousePress(int buttons) {
|
||||
mouseButtonsState |= buttons;
|
||||
|
||||
checkMousePos();
|
||||
mouseEvent(fDevice.getCGDisplayID(), mouseLastX, mouseLastY,
|
||||
buttons, true, false);
|
||||
}
|
||||
@ -92,11 +92,40 @@ class CRobot implements RobotPeer {
|
||||
@Override
|
||||
public void mouseRelease(int buttons) {
|
||||
mouseButtonsState &= ~buttons;
|
||||
|
||||
checkMousePos();
|
||||
mouseEvent(fDevice.getCGDisplayID(), mouseLastX, mouseLastY,
|
||||
buttons, false, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set unknown mouse location, if needed.
|
||||
*/
|
||||
private void checkMousePos() {
|
||||
if (mouseLastX == MOUSE_LOCATION_UNKNOWN ||
|
||||
mouseLastY == MOUSE_LOCATION_UNKNOWN) {
|
||||
|
||||
Rectangle deviceBounds = fDevice.getDefaultConfiguration().getBounds();
|
||||
Point mousePos = CCursorManager.getInstance().getCursorPosition();
|
||||
|
||||
if (mousePos.x < deviceBounds.x) {
|
||||
mousePos.x = deviceBounds.x;
|
||||
}
|
||||
else if (mousePos.x > deviceBounds.x + deviceBounds.width) {
|
||||
mousePos.x = deviceBounds.x + deviceBounds.width;
|
||||
}
|
||||
|
||||
if (mousePos.y < deviceBounds.y) {
|
||||
mousePos.y = deviceBounds.y;
|
||||
}
|
||||
else if (mousePos.y > deviceBounds.y + deviceBounds.height) {
|
||||
mousePos.y = deviceBounds.y + deviceBounds.height;
|
||||
}
|
||||
|
||||
mouseLastX = mousePos.x;
|
||||
mouseLastY = mousePos.y;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public native void mouseWheel(int wheelAmt);
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -143,11 +143,6 @@ public class CViewPlatformEmbeddedFrame implements PlatformWindow {
|
||||
public void setAlwaysOnTop(boolean value) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlatformWindow getTopmostPlatformWindowUnderMouse() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateFocusableWindowState() {
|
||||
}
|
||||
|
||||
@ -929,4 +929,9 @@ public final class LWCToolkit extends LWToolkit {
|
||||
!path.endsWith("/") &&
|
||||
!path.endsWith(".");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PlatformWindow getPlatformWindowUnderMouse() {
|
||||
return CPlatformWindow.nativeGetTopmostPlatformWindowUnderMouse();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -1131,15 +1131,16 @@ JNIEXPORT jobject
|
||||
JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeGetTopmostPlatformWindowUnderMouse
|
||||
(JNIEnv *env, jclass clazz)
|
||||
{
|
||||
jobject topmostWindowUnderMouse = nil;
|
||||
__block jobject topmostWindowUnderMouse = nil;
|
||||
|
||||
JNF_COCOA_ENTER(env);
|
||||
AWT_ASSERT_APPKIT_THREAD;
|
||||
|
||||
AWTWindow *awtWindow = [AWTWindow getTopmostWindowUnderMouse];
|
||||
if (awtWindow != nil) {
|
||||
topmostWindowUnderMouse = [awtWindow.javaPlatformWindow jObject];
|
||||
}
|
||||
[ThreadUtilities performOnMainThreadWaiting:YES block:^{
|
||||
AWTWindow *awtWindow = [AWTWindow getTopmostWindowUnderMouse];
|
||||
if (awtWindow != nil) {
|
||||
topmostWindowUnderMouse = [awtWindow.javaPlatformWindow jObject];
|
||||
}
|
||||
}];
|
||||
|
||||
JNF_COCOA_EXIT(env);
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -118,13 +118,11 @@ Java_sun_lwawt_macosx_CCursorManager_nativeGetCursorPosition
|
||||
|
||||
JNF_COCOA_ENTER(env);
|
||||
|
||||
__block NSPoint pt = NSZeroPoint;
|
||||
|
||||
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
|
||||
pt = ConvertNSScreenPoint(env, [NSEvent mouseLocation]);
|
||||
}];
|
||||
|
||||
jpt = NSToJavaPoint(env, pt);
|
||||
CGEventRef event = CGEventCreate(NULL);
|
||||
CGPoint globalPos = CGEventGetLocation(event);
|
||||
CFRelease(event);
|
||||
|
||||
jpt = NSToJavaPoint(env, globalPos);
|
||||
|
||||
JNF_COCOA_EXIT(env);
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -146,47 +146,10 @@ Java_sun_lwawt_macosx_CRobot_mouseEvent
|
||||
|
||||
// This is the native method called when Robot mouse events occur.
|
||||
// The CRobot tracks the mouse position, and which button was
|
||||
// pressed. If the mouse position is unknown it is obtained from
|
||||
// CGEvents. The peer also tracks the mouse button desired state,
|
||||
// pressed. The peer also tracks the mouse button desired state,
|
||||
// the appropriate key modifier state, and whether the mouse action
|
||||
// is simply a mouse move with no mouse button state changes.
|
||||
|
||||
CGError err = kCGErrorSuccess;
|
||||
|
||||
CGRect globalDeviceBounds = CGDisplayBounds(displayID);
|
||||
|
||||
// Set unknown mouse location, if needed.
|
||||
if ((mouseLastX == sun_lwawt_macosx_CRobot_MOUSE_LOCATION_UNKNOWN) ||
|
||||
(mouseLastY == sun_lwawt_macosx_CRobot_MOUSE_LOCATION_UNKNOWN))
|
||||
{
|
||||
CGEventRef event = CGEventCreate(NULL);
|
||||
if (event == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
CGPoint globalPos = CGEventGetLocation(event);
|
||||
CFRelease(event);
|
||||
|
||||
// Normalize the coords within this display device, as
|
||||
// per Robot rules.
|
||||
if (globalPos.x < CGRectGetMinX(globalDeviceBounds)) {
|
||||
globalPos.x = CGRectGetMinX(globalDeviceBounds);
|
||||
}
|
||||
else if (globalPos.x > CGRectGetMaxX(globalDeviceBounds)) {
|
||||
globalPos.x = CGRectGetMaxX(globalDeviceBounds);
|
||||
}
|
||||
|
||||
if (globalPos.y < CGRectGetMinY(globalDeviceBounds)) {
|
||||
globalPos.y = CGRectGetMinY(globalDeviceBounds);
|
||||
}
|
||||
else if (globalPos.y > CGRectGetMaxY(globalDeviceBounds)) {
|
||||
globalPos.y = CGRectGetMaxY(globalDeviceBounds);
|
||||
}
|
||||
|
||||
mouseLastX = (jint)globalPos.x;
|
||||
mouseLastY = (jint)globalPos.y;
|
||||
}
|
||||
|
||||
// volatile, otherwise it warns that it might be clobbered by 'longjmp'
|
||||
volatile CGPoint point;
|
||||
|
||||
|
||||
73
jdk/test/java/awt/MouseInfo/GetPointerInfoTest.java
Normal file
73
jdk/test/java/awt/MouseInfo/GetPointerInfoTest.java
Normal file
@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
@test
|
||||
@summary unit test for getPointerInfo() from MouseInfo class
|
||||
@author dav@sparc.spb.su: area=
|
||||
@bug 4009555
|
||||
@run main GetPointerInfoTest
|
||||
*/
|
||||
|
||||
import java.awt.*;
|
||||
|
||||
/**
|
||||
* Simply check the result on non-null and results are correct.
|
||||
*/
|
||||
public class GetPointerInfoTest {
|
||||
private static final String successStage = "Test stage completed.Passed.";
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
|
||||
GraphicsDevice[] gds = ge.getScreenDevices();
|
||||
int gdslen = gds.length;
|
||||
System.out.println("There are " + gdslen + " Graphics Devices");
|
||||
if (gdslen == 0) {
|
||||
System.out.println("Nothing to be done.");
|
||||
return;
|
||||
}
|
||||
Robot robot = new Robot(gds[0]);
|
||||
robot.setAutoDelay(0);
|
||||
robot.setAutoWaitForIdle(true);
|
||||
robot.delay(10);
|
||||
robot.waitForIdle();
|
||||
Point p = new Point(101, 99);
|
||||
robot.mouseMove(p.x, p.y);
|
||||
|
||||
PointerInfo pi = MouseInfo.getPointerInfo();
|
||||
if (pi == null) {
|
||||
throw new RuntimeException("Test failed. getPointerInfo() returned null value.");
|
||||
} else {
|
||||
System.out.println(successStage);
|
||||
}
|
||||
Point piLocation = pi.getLocation();
|
||||
|
||||
if (piLocation.x != p.x || piLocation.y != p.y) {
|
||||
throw new RuntimeException("Test failed.getPointerInfo() returned incorrect result.");
|
||||
} else {
|
||||
System.out.println(successStage);
|
||||
}
|
||||
|
||||
System.out.println("Test PASSED.");
|
||||
}
|
||||
}
|
||||
90
jdk/test/java/awt/MouseInfo/MultiscreenPointerInfo.java
Normal file
90
jdk/test/java/awt/MouseInfo/MultiscreenPointerInfo.java
Normal file
@ -0,0 +1,90 @@
|
||||
/*
|
||||
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
@test
|
||||
@summary unit test for getPointerInfo() from MouseInfo class
|
||||
@author prs@sparc.spb.su: area=
|
||||
@bug 4009555
|
||||
@run main MultiscreenPointerInfo
|
||||
*/
|
||||
|
||||
import java.awt.*;
|
||||
|
||||
/**
|
||||
* Simply check the result on non-null and results are correct.
|
||||
*/
|
||||
public class MultiscreenPointerInfo
|
||||
{
|
||||
private static final String successStage = "Test stage completed.Passed.";
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
|
||||
GraphicsDevice[] gds = ge.getScreenDevices();
|
||||
int gdslen = gds.length;
|
||||
System.out.println("There are " + gdslen + " Graphics Devices");
|
||||
if (gdslen < 2) {
|
||||
System.out.println("Nothing to be done. PASSED automatically.");
|
||||
return;
|
||||
}
|
||||
Rectangle rx = gds[1].getDefaultConfiguration().getBounds();
|
||||
Robot robot;
|
||||
|
||||
if (rx.x == 0 && rx.y == 0) {
|
||||
// Assuming independent graphics devices
|
||||
robot = new Robot(gds[1]);
|
||||
} else {
|
||||
// Means we have a virtual device
|
||||
robot = new Robot(gds[0]);
|
||||
}
|
||||
robot.setAutoDelay(0);
|
||||
robot.setAutoWaitForIdle(true);
|
||||
robot.delay(10);
|
||||
robot.waitForIdle();
|
||||
Point p = new Point(rx.x + 101, rx.y + 99);
|
||||
robot.mouseMove(p.x, p.y);
|
||||
PointerInfo pi = MouseInfo.getPointerInfo();
|
||||
if (pi == null) {
|
||||
throw new RuntimeException("Test failed. getPointerInfo() returned null value.");
|
||||
} else {
|
||||
System.out.println(successStage);
|
||||
}
|
||||
|
||||
Point piLocation = pi.getLocation();
|
||||
|
||||
if (piLocation.x != p.x || piLocation.y != p.y) {
|
||||
throw new RuntimeException("Test failed.getPointerInfo() returned incorrect location.");
|
||||
} else {
|
||||
System.out.println(successStage);
|
||||
}
|
||||
|
||||
GraphicsDevice dev = pi.getDevice();
|
||||
|
||||
if (dev != gds[1]) {
|
||||
throw new RuntimeException("Test failed.getPointerInfo() returned incorrect device.");
|
||||
} else {
|
||||
System.out.println(successStage);
|
||||
}
|
||||
System.out.println("Test PASSED.");
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user