/*******************************************************************************
* Copyright (c) 2016 Weasis Team and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Nicolas Roduit - initial API and implementation
*******************************************************************************/
package org.weasis.core.ui.pref;
import java.awt.Frame;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.Rectangle;
import java.util.List;
import javax.swing.JFrame;
import org.weasis.core.ui.editor.image.dockable.MeasureTool;
public class Monitor {
private final GraphicsDevice graphicsDevice;
private double realScaleFactor;
private Rectangle fullscreenBounds;
public Monitor(GraphicsDevice graphicsDevice) {
this.realScaleFactor = 0.0;
this.graphicsDevice = graphicsDevice;
}
public synchronized double getRealScaleFactor() {
return realScaleFactor;
}
public synchronized void setRealScaleFactor(double realScaleFactor) {
this.realScaleFactor = realScaleFactor;
}
public String getMonitorID() {
return graphicsDevice.getIDstring();
}
public Rectangle getBounds() {
return graphicsDevice.getDefaultConfiguration().getBounds();
}
public GraphicsConfiguration getGraphicsConfiguration() {
return graphicsDevice.getDefaultConfiguration();
}
public GraphicsDevice getGraphicsDevice() {
return graphicsDevice;
}
public Rectangle getFullscreenBounds() {
if (fullscreenBounds == null) {
/*
* As screen insets are not available on all the systems (on X11 windowing systems), the only way to get the
* maximum visible size desktop is to maximize a JFrame
*/
JFrame frame = new JFrame(this.getGraphicsConfiguration());
Rectangle bound = this.getBounds();
frame.setBounds(bound.x, bound.y, bound.width - 150, bound.height - 150);
frame.setVisible(true);
frame.setExtendedState(Frame.MAXIMIZED_BOTH);
try {
// Let time to maximize window
Thread.sleep(500);
} catch (InterruptedException e1) {
// Do noting
}
fullscreenBounds = frame.getBounds();
frame.dispose();
}
return fullscreenBounds;
}
public static Monitor getMonitor(GraphicsConfiguration gconfig) {
if (gconfig != null) {
List<Monitor> monitors = MeasureTool.viewSetting.getMonitors();
for (int i = 0; i < monitors.size(); i++) {
Monitor monitor = monitors.get(i);
if (gconfig.equals(monitor.getGraphicsConfiguration())) {
return monitor;
}
}
}
return null;
}
}