/* * Copyright (c) 2010-2016, Sikuli.org, sikulix.com * Released under the MIT License. * */ package org.sikuli.script; import org.sikuli.basics.Debug; import java.awt.Rectangle; /** * CANDIDATE FOR DEPRECATION * INTERNAL USE * An extension of DesktopScreen, that uses all active monitors as one big screen * * TO BE EVALUATED: is this really needed? */ public class ScreenUnion extends Screen { private Rectangle _bounds; public ScreenUnion() { super(true); _bounds = new Rectangle(); for (int i = 0; i < Screen.getNumberScreens(); i++) { _bounds = _bounds.union(Screen.getBounds(i)); } x = _bounds.x; y = _bounds.y; w = _bounds.width; h = _bounds.height; } public Region getRegion() { return Region.virtual(_bounds); } @Override public int getIdFromPoint(int x, int y) { Rectangle sr = getBounds(); int _x = x + getBounds().x; int _y = y + getBounds().y; for (int i = 0; i < getNumberScreens(); i++) { if (Screen.getScreen(i).contains(new Location(_x, _y))) { Debug.log(3, "ScreenUnion: getIdFromPoint: " + "(%d, %d) as (%d, %d) in (%d, %d, %d, %d) on %d", x, y, _x, _y, sr.x, sr.y, sr.width, sr.height, i); return i; } } Debug.log(3, "ScreenUnion: getIdFromPoint: " + "(%d, %d) as (%d, %d) in (%d, %d, %d, %d) on ???", x, y, _x, _y, sr.x, sr.y, sr.width, sr.height); return 0; } @Override public Rectangle getBounds() { return _bounds; } @Override public ScreenImage capture(Rectangle rect) { Debug.log(4, "ScreenUnion: capture: (%d,%d) %dx%d", rect.x, rect.y, rect.width, rect.height); Screen s = Screen.getPrimaryScreen(); // Location tl = new Location(rect.getLocation()); // for (Screen sx : Screen.screens) { // if (sx.contains(tl)) { // s = sx; // break; // } // } ScreenImage si = s.capture(rect); return si; } @Override public boolean useFullscreen() { return false; } }