From d7346b0e8a8a365ded4a18006a18352561b8feae Mon Sep 17 00:00:00 2001 From: mstr2 <43553916+mstr2@users.noreply.github.com> Date: Sun, 13 Jul 2025 23:27:42 +0200 Subject: [PATCH] HeaderButtonMetrics refactor --- .../com/sun/glass/ui/HeaderButtonMetrics.java | 2 - .../sun/javafx/stage/HeaderButtonMetrics.java | 51 +++++++++++++++++++ .../com/sun/javafx/stage/StageHelper.java | 1 - .../sun/javafx/stage/StagePeerListener.java | 2 - .../sun/javafx/tk/quantum/WindowStage.java | 5 +- .../java/javafx/scene/layout/HeaderBar.java | 2 +- .../src/main/java/javafx/stage/Stage.java | 2 +- 7 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 modules/javafx.graphics/src/main/java/com/sun/javafx/stage/HeaderButtonMetrics.java diff --git a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/HeaderButtonMetrics.java b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/HeaderButtonMetrics.java index 1860cc9f24d..1a952f61ea6 100644 --- a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/HeaderButtonMetrics.java +++ b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/HeaderButtonMetrics.java @@ -26,7 +26,6 @@ package com.sun.glass.ui; import javafx.geometry.Dimension2D; -import javafx.scene.layout.HeaderBar; import javafx.stage.StageStyle; import java.util.Objects; @@ -37,7 +36,6 @@ * @param rightInset the size of the right inset * @param minHeight the minimum height of the window buttons * @see HeaderButtonOverlay - * @see HeaderBar */ public record HeaderButtonMetrics(Dimension2D leftInset, Dimension2D rightInset, double minHeight) { diff --git a/modules/javafx.graphics/src/main/java/com/sun/javafx/stage/HeaderButtonMetrics.java b/modules/javafx.graphics/src/main/java/com/sun/javafx/stage/HeaderButtonMetrics.java new file mode 100644 index 00000000000..a97427c8d04 --- /dev/null +++ b/modules/javafx.graphics/src/main/java/com/sun/javafx/stage/HeaderButtonMetrics.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.sun.javafx.stage; + +import javafx.geometry.Dimension2D; +import javafx.scene.layout.HeaderBar; +import javafx.stage.StageStyle; +import java.util.Objects; + +/** + * Provides metrics about the header buttons of {@link StageStyle#EXTENDED} windows. + * + * @param leftInset the size of the left inset + * @param rightInset the size of the right inset + * @param minHeight the minimum height of the window buttons + * @see HeaderBar + */ +public record HeaderButtonMetrics(Dimension2D leftInset, Dimension2D rightInset, double minHeight) { + + public HeaderButtonMetrics { + Objects.requireNonNull(leftInset); + Objects.requireNonNull(rightInset); + + if (minHeight < 0) { + throw new IllegalArgumentException("minHeight cannot be negative"); + } + } +} diff --git a/modules/javafx.graphics/src/main/java/com/sun/javafx/stage/StageHelper.java b/modules/javafx.graphics/src/main/java/com/sun/javafx/stage/StageHelper.java index 7f9d7d086f3..07cb71e667d 100644 --- a/modules/javafx.graphics/src/main/java/com/sun/javafx/stage/StageHelper.java +++ b/modules/javafx.graphics/src/main/java/com/sun/javafx/stage/StageHelper.java @@ -25,7 +25,6 @@ package com.sun.javafx.stage; -import com.sun.glass.ui.HeaderButtonMetrics; import com.sun.javafx.util.Utils; import javafx.beans.value.ObservableValue; import javafx.stage.Stage; diff --git a/modules/javafx.graphics/src/main/java/com/sun/javafx/stage/StagePeerListener.java b/modules/javafx.graphics/src/main/java/com/sun/javafx/stage/StagePeerListener.java index 95ecdffb12b..b6ef1b0ed6c 100644 --- a/modules/javafx.graphics/src/main/java/com/sun/javafx/stage/StagePeerListener.java +++ b/modules/javafx.graphics/src/main/java/com/sun/javafx/stage/StagePeerListener.java @@ -25,10 +25,8 @@ package com.sun.javafx.stage; -import com.sun.glass.ui.HeaderButtonMetrics; import javafx.stage.Stage; - public class StagePeerListener extends WindowPeerListener { private final Stage stage; private final StageAccessor stageAccessor; diff --git a/modules/javafx.graphics/src/main/java/com/sun/javafx/tk/quantum/WindowStage.java b/modules/javafx.graphics/src/main/java/com/sun/javafx/tk/quantum/WindowStage.java index 2fd0651a487..f251925f9d0 100644 --- a/modules/javafx.graphics/src/main/java/com/sun/javafx/tk/quantum/WindowStage.java +++ b/modules/javafx.graphics/src/main/java/com/sun/javafx/tk/quantum/WindowStage.java @@ -42,6 +42,7 @@ import com.sun.javafx.PlatformUtil; import com.sun.javafx.iio.common.PushbroomScaler; import com.sun.javafx.iio.common.ScalerFactory; +import com.sun.javafx.stage.HeaderButtonMetrics; import com.sun.javafx.stage.StagePeerListener; import com.sun.javafx.tk.FocusCause; import com.sun.javafx.tk.TKScene; @@ -227,7 +228,9 @@ private void computeAndSetBackground(List stops) { private void notifyHeaderButtonMetricsChanged() { if (stageListener instanceof StagePeerListener listener && platformWindow != null) { - listener.changedHeaderButtonMetrics(platformWindow.headerButtonMetricsProperty().get()); + var metrics = platformWindow.headerButtonMetricsProperty().get(); + listener.changedHeaderButtonMetrics( + new HeaderButtonMetrics(metrics.leftInset(), metrics.rightInset(), metrics.minHeight())); } } diff --git a/modules/javafx.graphics/src/main/java/javafx/scene/layout/HeaderBar.java b/modules/javafx.graphics/src/main/java/javafx/scene/layout/HeaderBar.java index d2244fd9c3a..bfb55f95be7 100644 --- a/modules/javafx.graphics/src/main/java/javafx/scene/layout/HeaderBar.java +++ b/modules/javafx.graphics/src/main/java/javafx/scene/layout/HeaderBar.java @@ -25,10 +25,10 @@ package javafx.scene.layout; -import com.sun.glass.ui.HeaderButtonMetrics; import com.sun.javafx.PreviewFeature; import com.sun.javafx.geom.Vec2d; import com.sun.javafx.scene.layout.HeaderButtonBehavior; +import com.sun.javafx.stage.HeaderButtonMetrics; import com.sun.javafx.stage.StageHelper; import javafx.beans.property.BooleanProperty; import javafx.beans.property.BooleanPropertyBase; diff --git a/modules/javafx.graphics/src/main/java/javafx/stage/Stage.java b/modules/javafx.graphics/src/main/java/javafx/stage/Stage.java index 3731503e31c..c74ad4869dd 100644 --- a/modules/javafx.graphics/src/main/java/javafx/stage/Stage.java +++ b/modules/javafx.graphics/src/main/java/javafx/stage/Stage.java @@ -41,11 +41,11 @@ import javafx.scene.input.KeyCombination; import javafx.scene.layout.HeaderBar; -import com.sun.glass.ui.HeaderButtonMetrics; import com.sun.javafx.PreviewFeature; import com.sun.javafx.collections.VetoableListDecorator; import com.sun.javafx.collections.TrackableObservableList; import com.sun.javafx.scene.SceneHelper; +import com.sun.javafx.stage.HeaderButtonMetrics; import com.sun.javafx.stage.StageHelper; import com.sun.javafx.stage.StagePeerListener; import com.sun.javafx.tk.TKStage;