Another thing to check is that the reported DPI of the screen is correct.
-- Kevin On 4/20/2020 1:25 PM, David Grieve wrote:
The sizes of controls are controlled by CSS styles. Things like borders, backgrounds, padding, insets, all of that defaults to the styles in a stylesheet. Most sizes are 'em' units, meaning they are relative to the size of the font. JavaFX CSS will use the Font.getDefault() font size if there is no font explicitly set in either the styles or in the application code. I would start by looking at what Font.getDefault().getSize() returns since everything should be based off that. It could also be an issue with the default stylesheets themselves. -----Original Message----- From: openjfx-dev <openjfx-dev-boun...@openjdk.java.net> On Behalf Of Alexander Scherbatiy Sent: Monday, April 20, 2020 2:16 PM To: openjfx-dev@openjdk.java.net Subject: [EXTERNAL] JavaFX controls have large size on Raspberry Pi Hello, I run a simple JavaFX application which shows a button with jdk 14.0.1 on Raspberry Pi and the drawn button has large size. This is because of the algorithm which is used by PrismFontFactory.getSystemFontSize() method [1] to select a system font size. If a system is embedded then the font size is calculated as int screenDPI = Screen.getMainScreen().getResolutionY(); systemFontSize = ((float) screenDPI) / 6f; // 12 points and the system is detected as embedded because the armv6hf architecture is defined as embedded in the armv6hf.gradle file [2]. Raspberri Pi can work both with small touch displays and with big monitors. It looks like Raspberry Pi should support two modes for font size calculation: one for small screens and another for large. I would like to contribute a fix for this but I do not know how the right fix could look like. Should there be a special screen size so for smaller screens the font is is proportional to the screen size and for bigger screens the font size is fixed? Is there a way to check that used screen is from embedded device? May be it should be solved in different way? [1] https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fopenjdk%2Fjfx%2Fblob%2Fec8608f39576035d41e8e532e9334b979b859543%2Fmodules%2Fjavafx.graphics%2Fsrc%2Fmain%2Fjava%2Fcom%2Fsun%2Fjavafx%2Ffont%2FPrismFontFactory.java%23L1944&data=02%7C01%7CDavid.Grieve%40microsoft.com%7Cc0b7e923fe4346bf947608d7e55746f0%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637230035326172309&sdata=rEz4bxNE07aW5f22AXWPRLNffwoIixvNxJopLM%2Bfbi4%3D&reserved=0 [2] https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fopenjdk%2Fjfx%2Fblob%2Fec8608f39576035d41e8e532e9334b979b859543%2FbuildSrc%2Farmv6hf.gradle%23L182&data=02%7C01%7CDavid.Grieve%40microsoft.com%7Cc0b7e923fe4346bf947608d7e55746f0%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637230035326172309&sdata=Fv2sKXwfwuo6JsD0CyeoF6iDmq8rDk5goPCsK31p1Sk%3D&reserved=0 JavaFX application: ---------------------------- import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class ButtonFX extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { primaryStage.setTitle("Hello World!"); Button button = new Button("Hello, World!"); StackPane root = new StackPane(); root.getChildren().add(button); primaryStage.setScene(new Scene(root, 300, 250)); primaryStage.show(); } } ---------------------------- Thanks, Alexander.