> I would start by looking at what Font.getDefault().getSize() returns
since everything should be based off that.
I think the code below is the code that decides what the code above
should return
> Another thing to check is that the reported DPI of the screen is
correct.
The way I read the code below is that it wants the default font to be
1/6 of an inch high on the screen.
I think any smaller than 6 lines per inch and it will be hard to read.
To do this correctly, it relies on
the y-res being accurate for the device.
So I would follow the path Kevin suggests. For example if something is
wrongly returning the *dimension* of
the screen when it should be the *dpi* of the screen then you'd have 6
lines of text filling up the screen.
-phil.
On 4/20/20, 1:56 PM, Kevin Rushforth wrote:
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.