Use javaFx-graphics for display information

This commit is contained in:
Martin Beyer
2021-09-17 17:46:54 +02:00
parent cf17a3f9ca
commit 4a13b4145d

View File

@@ -8,15 +8,13 @@ import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.BooleanBinding;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.geometry.Rectangle2D;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Region;
import javafx.stage.Screen;
import javafx.stage.Stage;
import java.awt.Dimension;
import java.awt.DisplayMode;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Toolkit;
@MainWindow
public class ResizeController implements FxController {
@@ -55,11 +53,11 @@ public class ResizeController implements FxController {
settings.displayConfigurationProperty().setValue(getMonitorSizes());
return;
} else {
if (checkForChangedDisplayConfiguration()) {
if (didDisplayConfigurationChange()) {
//If the position is illegal, then the window appears on the main screen in the middle of the window.
Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
window.setX((size.getWidth() - window.getMinWidth()) / 2);
window.setY((size.getHeight() - window.getMinHeight()) / 2);
Rectangle2D primaryScreenBounds = Screen.getPrimary().getBounds();
window.setX((primaryScreenBounds.getWidth() - window.getMinWidth()) / 2);
window.setY((primaryScreenBounds.getHeight() - window.getMinHeight()) / 2);
window.setWidth(window.getMinWidth());
window.setHeight(window.getMinHeight());
} else {
@@ -76,22 +74,21 @@ public class ResizeController implements FxController {
return (settings.windowHeightProperty().get() == 0) && (settings.windowWidthProperty().get() == 0) && (settings.windowXPositionProperty().get() == 0) && (settings.windowYPositionProperty().get() == 0);
}
private boolean checkForChangedDisplayConfiguration() {
private boolean didDisplayConfigurationChange() {
String currentDisplayConfiguration = getMonitorSizes();
String settingsDisplayConfiguration = settings.displayConfigurationProperty().get();
boolean changedConfiguration = !settingsDisplayConfiguration.equals(currentDisplayConfiguration);
if (changedConfiguration) settings.displayConfigurationProperty().setValue(currentDisplayConfiguration);
return changedConfiguration;
boolean configurationHasChanged = !settingsDisplayConfiguration.equals(currentDisplayConfiguration);
if (configurationHasChanged) settings.displayConfigurationProperty().setValue(currentDisplayConfiguration);
return configurationHasChanged;
}
private String getMonitorSizes() {
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] gs = ge.getScreenDevices();
ObservableList<Screen> screens = Screen.getScreens();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < gs.length; i++) {
DisplayMode dm = gs[i].getDisplayMode();
for (int i = 0; i < screens.size(); i++) {
Rectangle2D screenBounds = screens.get(i).getBounds();
if (!sb.isEmpty()) sb.append(" ");
sb.append("displayId: " + i + ", " + dm.getWidth() + "x" + dm.getHeight() + ";");
sb.append("displayId: " + i + ", " + screenBounds.getWidth() + "x" + screenBounds.getHeight() + ";");
}
return sb.toString();
}