RFR: 8358450: Viewport characteristics media features [v10]
Andy Goryachev
angorya at openjdk.org
Mon Dec 15 23:01:22 UTC 2025
On Sun, 14 Dec 2025 18:57:50 GMT, Michael Strauß <mstrauss at openjdk.org> wrote:
>> Implementation of [viewport characteristics media features](https://www.w3.org/TR/mediaqueries-5/#mf-viewport-characteristics):
>> * `width`
>> * `height`
>> * `aspect-ratio`: width / height
>> * `orientation`: `portrait`, `landscape`
>> * `display-mode`: `fullscreen`, `standalone` (note: `browser` and `minimal-ui` are not supported in JavaFX)
>>
>> Here's a small example how the new media features can be used:
>>
>> @Override
>> public void start(Stage stage) {
>> var button = new Button("Toggle full-screen");
>> button.setOnAction(_ -> stage.setFullScreen(!stage.isFullScreen()));
>> var label = new Label();
>> var root = new BorderPane(button, null, null, label, null);
>> var scene = new Scene(root, 650, 200);
>> BorderPane.setAlignment(label, Pos.CENTER);
>> label.textProperty().bind(scene.widthProperty().map(v -> String.format("Width: %.2f", v.doubleValue())));
>> scene.getStylesheets().add("data:text/css;base64," + Base64.getEncoder().encodeToString("""
>> @media (max-width: 500) {
>> .button {
>> -fx-background-color: red;
>> }
>> }
>>
>> @media (600 < width <= 700) {
>> .button {
>> -fx-background-color: green;
>> }
>> }
>>
>> @media (min-width: 800) {
>> .button {
>> -fx-background-color: yellow;
>> }
>> }
>>
>> @media (display-mode: fullscreen) {
>> .button {
>> -fx-background-color: black !important;
>> }
>> }
>> """.getBytes(StandardCharsets.UTF_8)));
>>
>> stage.initStyle(StageStyle.DECORATED);
>> stage.setScene(scene);
>> stage.show();
>> }
>
> Michael Strauß has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 14 commits:
>
> - Merge branch 'master' into feature/media-features-viewport-characteristics
> - resolve merge conflicts
> - Merge branch 'master' into feature/media-features-viewport-characteristics
>
> # Conflicts:
> # modules/javafx.graphics/src/test/java/test/javafx/css/CssParser_mediaQuery_Test.java
> - update cssref.html
> - Merge branch 'master' into feature/media-features-viewport-characteristics
> - whitespace, add final modifier
> - Merge branch 'master' into feature/media-features-viewport-characteristics
> - Refactor context awareness
> - Merge branch 'master' into feature/media-features-viewport-characteristics
> - Merge branch 'master' into feature/media-features-viewport-characteristics
> - ... and 4 more: https://git.openjdk.org/jfx/compare/32e667df...19cdaeaa
Changes requested by angorya (Reviewer).
modules/javafx.graphics/src/main/java/com/sun/javafx/css/media/MediaFeatures.java line 250:
> 248: case "pc" -> SizeUnits.PC;
> 249: default -> throw new IllegalArgumentException(
> 250: String.format("Invalid value <%s> for media feature <%s>", lowerCaseText, featureName));
is this a new code?
could we add a unit test for all the combinations of decimal values (integer, fractional, scientific), with and without the units?
modules/javafx.graphics/src/main/java/com/sun/javafx/css/media/SizeQueryType.java line 60:
> 58: }
> 59:
> 60: private static final SizeQueryType[] VALUES = values();
is this really needed?
modules/javafx.graphics/src/main/java/com/sun/javafx/css/parser/CssLexer.java line 53:
> 51: public static final int GREATER = 27;
> 52: public static final int LESS = 48;
> 53: public static final int EQUALS = 49;
this **will** cause problems. could we arrange these by value please (add new after `AT_KEYWORD`)?
modules/javafx.graphics/src/main/java/javafx/css/Stylesheet.java line 70:
> 68: * Version 8: viewport characteristics media queries
> 69: */
> 70: final static int BINARY_CSS_VERSION = 8;
Does this impact backward compatibility with .bss files?
Should it be mentioned in the CSR?
modules/javafx.graphics/src/main/java/javafx/scene/Scene.java line 2776:
> 2774: boolean widthChanged = w != Scene.this.getWidth();
> 2775: boolean heightChanged = h != Scene.this.getHeight();
> 2776: if (widthChanged) Scene.this.setWidth(w);
it might be my personal preference, but I would rather see one statement per line. use case: stepping through in the debugger. can we add { }'s please?
modules/javafx.graphics/src/test/java/test/javafx/css/CssParser_mediaQuery_Test.java line 675:
> 673: assertEquals(1, stylesheet.getRules().size());
> 674: assertEquals(
> 675: List.of(EqualExpression.of(SizeQueryType.WIDTH, new Size(100, SizeUnits.PX))),
Could we add a test that verifies that the CSS parser accepts fractional decimals? With or without the units specified?
Also, does it support scientific notation line `1e2` for `100` ?
-------------
PR Review: https://git.openjdk.org/jfx/pull/1844#pullrequestreview-3580478763
PR Review Comment: https://git.openjdk.org/jfx/pull/1844#discussion_r2621124272
PR Review Comment: https://git.openjdk.org/jfx/pull/1844#discussion_r2621103826
PR Review Comment: https://git.openjdk.org/jfx/pull/1844#discussion_r2621106888
PR Review Comment: https://git.openjdk.org/jfx/pull/1844#discussion_r2621112439
PR Review Comment: https://git.openjdk.org/jfx/pull/1844#discussion_r2621116371
PR Review Comment: https://git.openjdk.org/jfx/pull/1844#discussion_r2621121423
More information about the openjfx-dev
mailing list