com.sun.glass.ui.Robot Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of openjfx-78-backport Show documentation
Show all versions of openjfx-78-backport Show documentation
This is a backport of OpenJFX 8 to run on Java 7.
The newest version!
/*
* Copyright (c) 2010, 2013, 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. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* 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.
*/
package com.sun.glass.ui;
import java.nio.IntBuffer;
import java.security.AccessController;
import java.security.AllPermission;
import java.security.Permission;
public abstract class Robot {
private final static Permission allPermission = new AllPermission();
final static public int MOUSE_LEFT_BTN = 1;
final static public int MOUSE_RIGHT_BTN = 2;
final static public int MOUSE_MIDDLE_BTN = 4;
protected abstract void _create();
protected Robot() {
// Fix for RT-22633
// Ideally, we should restrict user access to Glass packages at all,
// but that's not the case right now. To prevent applications from
// using Robot, we check for AllPermission here as we don't have
// (and will unlikely have in the future) specific permission for
// this functionality
if (System.getSecurityManager() != null) {
AccessController.checkPermission(allPermission);
}
Application.checkEventThread();
_create();
}
protected abstract void _destroy();
public void destroy() {
Application.checkEventThread();
_destroy();
}
protected abstract void _keyPress(int code);
/**
* Generate a key pressed event.
* @param code key code for this event
*/
public void keyPress(int code) {
Application.checkEventThread();
_keyPress(code);
}
protected abstract void _keyRelease(int code);
/**
* Generate a key released event.
*
* @param code key code for this event
*/
public void keyRelease(int code) {
Application.checkEventThread();
_keyRelease(code);
}
protected abstract void _mouseMove(int x, int y);
/**
* Generate a mouse moved event.
*
* @param x screen coordinate x
* @param y screen coordinate y
*/
public void mouseMove(int x, int y) {
Application.checkEventThread();
_mouseMove(x, y);
}
protected abstract void _mousePress(int buttons);
/**
* Generate a mouse press event with specified buttons mask.
*
* Up to 32-buttons mice are supported. Other buttons are inaccessible
* by the robot. Bits 0, 1, and 2 mean LEFT, RIGHT, and MIDDLE mouse buttons
* respectively.
*
* @param buttons buttons to have generated the event
*/
public void mousePress(int buttons) {
Application.checkEventThread();
_mousePress(buttons);
}
protected abstract void _mouseRelease(int buttons);
/**
* Generate a mouse release event with specified buttons mask.
*
* @param buttons buttons to have generated the event
*/
public void mouseRelease(int buttons) {
Application.checkEventThread();
_mouseRelease(buttons);
}
protected abstract void _mouseWheel(int wheelAmt);
/**
* Generate a mouse wheel event.
*
* @param wheelAmt amount the wheel has turned of wheel turning
*/
public void mouseWheel(int wheelAmt) {
Application.checkEventThread();
_mouseWheel(wheelAmt);
}
protected abstract int _getMouseX();
public int getMouseX() {
Application.checkEventThread();
return _getMouseX();
}
protected abstract int _getMouseY();
public int getMouseY() {
Application.checkEventThread();
return _getMouseY();
}
protected abstract int _getPixelColor(int x, int y);
/**
* Returns pixel color at specified screen coordinates in IntARGB format.
*/
public int getPixelColor(int x, int y) {
Application.checkEventThread();
return _getPixelColor(x, y);
}
protected abstract Pixels _getScreenCapture(int x, int y, int width, int height, boolean isHiDPI);
/**
* Returns a capture of the specified rectangular area of the screen.
*
* If {@code isHiDPI} argument is {@code true}, the returned Pixels object
* dimensions may differ from the requested {@code width} and {@code
* height} depending on how many physical pixels the area occupies on the
* screen. E.g. in HiDPI mode on the Mac (aka Retina display) the pixels
* are doubled, and thus a screen capture of an area of size (10x10) pixels
* will result in a Pixels object with dimensions (20x20). Calling code
* should use the returned objects's getWidth() and getHeight() methods
* to determine the image size.
*
* If (@code isHiDPI) is {@code false}, the returned Pixels object is of
* the requested size. Note that in this case the image may be scaled in
* order to fit to the requested dimensions if running on a HiDPI display.
*/
public Pixels getScreenCapture(int x, int y, int width, int height, boolean isHiDPI) {
Application.checkEventThread();
return _getScreenCapture(x, y, width, height, isHiDPI);
}
/**
* Returns a capture of the specified area of the screen.
* It is equivalent to calling getScreenCapture(x, y, width, height, false),
* i.e. this method takes a "LowDPI" screen shot.
*/
public Pixels getScreenCapture(int x, int y, int width, int height) {
return getScreenCapture(x, y, width, height, false);
}
}