@Override public String toString() { boolean preComma = false; final StringBuilder sb = new StringBuilder(); sb.append("Monitor[Id ").append(Display.toHexString(nativeId)).append(" ["); { if( isClone() ) { sb.append("clone"); preComma = true; } if( isPrimary() ) { if( preComma ) { sb.append(", "); } sb.append("primary"); } } preComma = false; sb.append("], ").append(sizeMM).append(" mm, pixelScale [").append(pixelScale[0]).append(", ") .append(pixelScale[1]).append("], viewport ").append(viewportPU).append(" [pixels], ").append(viewportWU) .append(" [window], orig ").append(originalMode).append(", curr ") .append(currentMode).append(", modeChanged ").append(modeChanged).append(", modeCount ") .append(supportedModes.size()).append("]"); return sb.toString(); } }
/** * Returns the {@link MonitorDevice} with the highest {@link MonitorDevice#getViewportInWindowUnits() viewport} * {@link RectangleImmutable#coverage(RectangleImmutable) coverage} of the given rectangle in window units, * which is not a {@link MonitorDevice#isClone() clone}. * <p> * If no coverage is detected the first {@link MonitorDevice} is returned. * </p> * @param r arbitrary rectangle in window units */ public final MonitorDevice getMainMonitor(final RectangleImmutable r) { MonitorDevice res = null; float maxCoverage = Float.MIN_VALUE; final List<MonitorDevice> monitors = getMonitorDevices(); final int monitorCount = monitors.size(); for(int i=0; i<monitorCount; i++) { final MonitorDevice monitor = monitors.get(i); if( !monitor.isClone() ) { final float coverage = monitor.getViewportInWindowUnits().coverage(r); if( coverage > maxCoverage ) { maxCoverage = coverage; res = monitor; } } } if( maxCoverage > 0.0f && null != res ) { return res; } return monitors.get(0); }
for(int i=0; i<monitorCount; i++) { final MonitorDevice a = monitors.get(i); if( !a.isClone() ) { for(int j=i+1; j<monitorCount; j++) { final MonitorDevice b = monitors.get(j); if( !b.isClone() ) { final float coverage = b.getViewport().coverage( a.getViewport() ); if( FloatUtil.isZero( 1f - coverage, FloatUtil.EPSILON ) ) {
data[idx++] = data.length; data[idx++] = monitorDevice.getId(); data[idx++] = monitorDevice.isClone() ? 1 : 0; data[idx++] = monitorDevice.isPrimary() ? 1 : 0; data[idx++] = monitorDevice.getSizeMM().getWidth();