Skip to content

Commit e022f94

Browse files
committed
Use the actual screen for DPI
1 parent 448e671 commit e022f94

File tree

1 file changed

+13
-7
lines changed
  • javafx/src/main/java/org/tbee/javafx/scene/layout

1 file changed

+13
-7
lines changed

javafx/src/main/java/org/tbee/javafx/scene/layout/MigPane.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@
1515
import javafx.scene.paint.Color;
1616
import javafx.scene.shape.Rectangle;
1717
import javafx.stage.Screen;
18+
import javafx.stage.Stage;
1819
import javafx.stage.Window;
1920
import net.miginfocom.layout.*;
2021

2122
import java.util.ArrayList;
2223
import java.util.LinkedHashMap;
2324
import java.util.List;
25+
import java.util.NoSuchElementException;
2426

2527

2628
/**
@@ -971,8 +973,8 @@ public int[] getVisualPadding()
971973
@Override
972974
public int getHorizontalScreenDPI()
973975
{
974-
// todo All references to Screen.getPrimary() should be replaced with getting the actual screen the Node is on.
975-
double dpi = Screen.getPrimary().getDpi();
976+
double dpi = getScreen().getDpi();
977+
// If the dpi value is unreasonable, use a somewhat sensible default
976978
if (dpi < 1.0) {
977979
dpi = 96.0;
978980
}
@@ -982,12 +984,16 @@ public int getHorizontalScreenDPI()
982984
@Override
983985
public int getVerticalScreenDPI()
984986
{
985-
// todo All references to Screen.getPrimary() should be replaced with getting the actual screen the Node is on.
986-
double dpi = Screen.getPrimary().getDpi();
987-
if (dpi < 1.0) {
988-
dpi = 96.0;
987+
// JavaFX only has one DPI factor.
988+
return getHorizontalScreenDPI();
989+
}
990+
991+
private Screen getScreen() {
992+
Window window = node.getScene().getWindow();
993+
for (Screen screen : Screen.getScreensForRectangle(window.getX(), window.getY(), 1., 1.)) {
994+
return screen;
989995
}
990-
return (int) Math.ceil(dpi);
996+
return Screen.getPrimary();
991997
}
992998

993999
@Override

0 commit comments

Comments
 (0)