From 15c998d5493b61d173560bb23b54709638e70e04 Mon Sep 17 00:00:00 2001 From: Jona Walpert Date: Tue, 21 Apr 2026 20:31:52 +0200 Subject: [PATCH] Feat: Delete window header and white background. Add mouse dragging ability to Highscore popup --- .../HighscoreViewController.java | 38 +++++++++++++++++++ .../gameuicomponents/TaskbarController.java | 5 ++- .../ui/lobbyui/CasinomainuiController.java | 6 ++- .../gameuicomponents/HighscoreView.fxml | 5 ++- 4 files changed, 51 insertions(+), 3 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/HighscoreViewController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/HighscoreViewController.java index 0f3a3e2..e395b68 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/HighscoreViewController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/HighscoreViewController.java @@ -3,8 +3,10 @@ package ch.unibas.dmi.dbis.cs108.casono.client.ui.gameui.gameuicomponents; import ch.unibas.dmi.dbis.cs108.casono.client.network.LobbyClient; import java.util.List; import javafx.fxml.FXML; +import javafx.scene.Node; import javafx.scene.control.Label; import javafx.scene.control.ListView; +import javafx.scene.input.MouseEvent; import javafx.stage.Stage; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -16,13 +18,49 @@ public class HighscoreViewController { @FXML private ListView highscoreList; @FXML private Label statusLabel; + @FXML private Node highscoreRoot; private LobbyClient lobbyClient; + private double dragOffsetX; + private double dragOffsetY; public void setLobbyClient(LobbyClient lobbyClient) { this.lobbyClient = lobbyClient; } + /** Starts dragging the window from anywhere in the popup. */ + @FXML + public void onPopupPressed(MouseEvent event) { + Stage stage = getStage(); + if (stage == null) { + return; + } + + dragOffsetX = stage.getX() - event.getScreenX(); + dragOffsetY = stage.getY() - event.getScreenY(); + } + + /** Moves the popup window while the mouse is dragged anywhere on the popup. */ + @FXML + public void onPopupDragged(MouseEvent event) { + Stage stage = getStage(); + if (stage == null) { + return; + } + + stage.setX(event.getScreenX() + dragOffsetX); + stage.setY(event.getScreenY() + dragOffsetY); + } + + /** Returns the popup stage if the root is already attached to a scene. */ + private Stage getStage() { + if (highscoreRoot == null || highscoreRoot.getScene() == null) { + return null; + } + + return (Stage) highscoreRoot.getScene().getWindow(); + } + /** Loads current highscores from the server and refreshes the list. */ @FXML public void refreshHighscores() { diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java index a97ed1d..ca3dadd 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java @@ -1108,12 +1108,15 @@ public class TaskbarController { controller.refreshHighscores(); javafx.stage.Stage stage = new javafx.stage.Stage(); + stage.initStyle(javafx.stage.StageStyle.TRANSPARENT); stage.setTitle("Casono Highscores"); javafx.scene.image.Image icon = new javafx.scene.image.Image( getClass().getResource("/images/logoinverted.png").toExternalForm()); stage.getIcons().add(icon); - stage.setScene(new javafx.scene.Scene(root)); + javafx.scene.Scene scene = new javafx.scene.Scene(root); + scene.setFill(javafx.scene.paint.Color.TRANSPARENT); + stage.setScene(scene); stage.show(); stage.setAlwaysOnTop(true); stage.toFront(); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/CasinomainuiController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/CasinomainuiController.java index 9750519..db644f4 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/CasinomainuiController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/CasinomainuiController.java @@ -24,6 +24,7 @@ import javafx.scene.layout.AnchorPane; import javafx.scene.layout.VBox; import javafx.scene.shape.Rectangle; import javafx.stage.Stage; +import javafx.stage.StageStyle; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -308,10 +309,13 @@ public class CasinomainuiController { controller.refreshHighscores(); Stage stage = new Stage(); + stage.initStyle(StageStyle.TRANSPARENT); stage.setTitle("Casono Highscores"); String iconPath = getClass().getResource("/images/logoinverted.png").toExternalForm(); stage.getIcons().add(new Image(iconPath)); - stage.setScene(new Scene(root)); + Scene scene = new Scene(root); + scene.setFill(javafx.scene.paint.Color.TRANSPARENT); + stage.setScene(scene); stage.show(); stage.setAlwaysOnTop(true); stage.toFront(); diff --git a/src/main/resources/ui-structure/gameuicomponents/HighscoreView.fxml b/src/main/resources/ui-structure/gameuicomponents/HighscoreView.fxml index 7008f4c..165eb0d 100644 --- a/src/main/resources/ui-structure/gameuicomponents/HighscoreView.fxml +++ b/src/main/resources/ui-structure/gameuicomponents/HighscoreView.fxml @@ -7,11 +7,14 @@ -