149 150 /** 151 * Releases a given key. 152 * <p> 153 * Key codes that have more than one physical key associated with them 154 * (e.g. {@code KeyEvent.VK_SHIFT} could mean either the 155 * left or right shift key) will map to the left key. 156 * <p> 157 * Assumes that the 158 * peer implementations will throw an exception for other bogus 159 * values e.g. -1, 999999 160 * 161 * @param keycode the key to release (e.g. {@code KeyEvent.VK_A}) 162 */ 163 @Override 164 public void keyRelease(final int keycode) { 165 keyEvent(keycode, false); 166 } 167 168 /** 169 * Returns the color of a pixel at the given screen coordinates. 170 * @param x X position of pixel 171 * @param y Y position of pixel 172 * @return color of the pixel 173 */ 174 @Override 175 public int getRGBPixel(int x, int y) { 176 int c[] = new int[1]; 177 double scale = fDevice.getScaleFactor(); 178 getScreenPixels(new Rectangle(x, y, (int) scale, (int) scale), c); 179 return c[0]; 180 } 181 182 /** 183 * Creates an image containing pixels read from the screen. 184 * @param bounds the rect to capture in screen coordinates 185 * @return the array of pixels 186 */ 187 @Override 188 public int [] getRGBPixels(final Rectangle bounds) { 189 int c[] = new int[bounds.width * bounds.height]; 190 getScreenPixels(bounds, c); 191 192 return c; 193 } 194 195 private native void initRobot(); 196 private native void mouseEvent(int displayID, int lastX, int lastY, 197 int buttonsState, 198 boolean isButtonsDownState, 199 boolean isMouseMove); 200 private native void keyEvent(int javaKeyCode, boolean keydown); 201 private void getScreenPixels(Rectangle r, int[] pixels){ 202 double scale = fDevice.getScaleFactor(); 203 nativeGetScreenPixels(r.x, r.y, r.width, r.height, scale, pixels); 204 } 205 private native void nativeGetScreenPixels(int x, int y, int width, int height, double scale, int[] pixels); 206 } | 149 150 /** 151 * Releases a given key. 152 * <p> 153 * Key codes that have more than one physical key associated with them 154 * (e.g. {@code KeyEvent.VK_SHIFT} could mean either the 155 * left or right shift key) will map to the left key. 156 * <p> 157 * Assumes that the 158 * peer implementations will throw an exception for other bogus 159 * values e.g. -1, 999999 160 * 161 * @param keycode the key to release (e.g. {@code KeyEvent.VK_A}) 162 */ 163 @Override 164 public void keyRelease(final int keycode) { 165 keyEvent(keycode, false); 166 } 167 168 /** 169 * Presses a given key. 170 * <p> 171 * Key codes that have more than one physical key associated with them 172 * (e.g. {@code KeyEvent.VK_SHIFT} could mean either the 173 * left or right shift key) will map to the left key. 174 * <p> 175 * Assumes that the 176 * peer implementations will throw an exception for other bogus 177 * values e.g. -1, 999999 178 * 179 * @param unicodeKey the unicode key to press. 180 */ 181 @Override 182 public void keyPressUnicode(final int unicodeKey) { 183 keyEventUnicode(unicodeKey, true); 184 } 185 186 /** 187 * Releases a given key. 188 * <p> 189 * Key codes that have more than one physical key associated with them 190 * (e.g. {@code KeyEvent.VK_SHIFT} could mean either the 191 * left or right shift key) will map to the left key. 192 * <p> 193 * Assumes that the 194 * peer implementations will throw an exception for other bogus 195 * values e.g. -1, 999999 196 * 197 * @param unicodeKey the unicode key to release. 198 */ 199 @Override 200 public void keyReleaseUnicode(final int unicodeKey) { 201 keyEventUnicode(unicodeKey, false); 202 } 203 204 /** 205 * Returns the color of a pixel at the given screen coordinates. 206 * @param x X position of pixel 207 * @param y Y position of pixel 208 * @return color of the pixel 209 */ 210 @Override 211 public int getRGBPixel(int x, int y) { 212 int c[] = new int[1]; 213 double scale = fDevice.getScaleFactor(); 214 getScreenPixels(new Rectangle(x, y, (int) scale, (int) scale), c); 215 return c[0]; 216 } 217 218 /** 219 * Creates an image containing pixels read from the screen. 220 * @param bounds the rect to capture in screen coordinates 221 * @return the array of pixels 222 */ 223 @Override 224 public int [] getRGBPixels(final Rectangle bounds) { 225 int c[] = new int[bounds.width * bounds.height]; 226 getScreenPixels(bounds, c); 227 228 return c; 229 } 230 231 private native void initRobot(); 232 private native void mouseEvent(int displayID, int lastX, int lastY, 233 int buttonsState, 234 boolean isButtonsDownState, 235 boolean isMouseMove); 236 private native void keyEvent(int javaKeyCode, boolean keydown); 237 private native void keyEventUnicode(int unicodeKey, boolean keydown); 238 private void getScreenPixels(Rectangle r, int[] pixels){ 239 double scale = fDevice.getScaleFactor(); 240 nativeGetScreenPixels(r.x, r.y, r.width, r.height, scale, pixels); 241 } 242 private native void nativeGetScreenPixels(int x, int y, int width, int height, double scale, int[] pixels); 243 } |