From 55fd6b9939e0abf639a10fc68a2fc919a557cf5d Mon Sep 17 00:00:00 2001 From: Siphalor Date: Fri, 10 Jul 2020 14:24:35 +0200 Subject: [PATCH] Add some hover effects --- .../de/siphalor/was/visual/JFXVisual.java | 13 +----- .../de/siphalor/was/visual/jfx/JFXUtil.java | 11 +++++ .../was/visual/jfx/QuestController.java | 46 ++++++++++++------- .../was/visual/jfx/StorageSlotController.java | 35 +++++++++----- src/main/resources/assets/jfx/main.css | 16 +++++-- .../resources/assets/jfx/quest_widget.fxml | 2 +- .../resources/assets/jfx/storage_slot.fxml | 5 +- .../assets/textures/bin_bordered.svg | 4 +- 8 files changed, 83 insertions(+), 49 deletions(-) diff --git a/src/main/java/de/siphalor/was/visual/JFXVisual.java b/src/main/java/de/siphalor/was/visual/JFXVisual.java index 671d860..a474623 100644 --- a/src/main/java/de/siphalor/was/visual/JFXVisual.java +++ b/src/main/java/de/siphalor/was/visual/JFXVisual.java @@ -9,10 +9,7 @@ import de.siphalor.was.content.quest.Quest; import de.siphalor.was.content.resource.Resource; import de.siphalor.was.game.Balance; import de.siphalor.was.util.PersistentInputStream; -import de.siphalor.was.visual.jfx.BalanceEntry; -import de.siphalor.was.visual.jfx.MainController; -import de.siphalor.was.visual.jfx.QuestController; -import de.siphalor.was.visual.jfx.StorageSlotController; +import de.siphalor.was.visual.jfx.*; import javafx.animation.FadeTransition; import javafx.animation.Interpolator; import javafx.application.Application; @@ -83,13 +80,7 @@ public class JFXVisual extends Application implements Visual { I18n i18n = I18n.getInstance(); controller.budgetLabel.setText(i18n.format("game.budget", budget)); - if (budget < 0) { - if (!controller.budgetLabel.getStyleClass().contains("red")) { - controller.budgetLabel.getStyleClass().add("red"); - } - } else { - controller.budgetLabel.getStyleClass().remove("red"); - } + JFXUtil.setStyleClass(controller.budgetLabel, "red", budget < 0); controller.totalIncomeLabel.setText(i18n.format("game.balance.total-income", totalIncome)); controller.totalLossLabel.setText(i18n.format("game.balance.total-loss", totalLoss)); diff --git a/src/main/java/de/siphalor/was/visual/jfx/JFXUtil.java b/src/main/java/de/siphalor/was/visual/jfx/JFXUtil.java index 46fe9ca..8db59e6 100644 --- a/src/main/java/de/siphalor/was/visual/jfx/JFXUtil.java +++ b/src/main/java/de/siphalor/was/visual/jfx/JFXUtil.java @@ -1,5 +1,6 @@ package de.siphalor.was.visual.jfx; +import javafx.scene.Node; import javafx.scene.image.Image; import javafx.scene.image.PixelReader; import javafx.scene.image.PixelWriter; @@ -22,4 +23,14 @@ public class JFXUtil { return res; } + + public static void setStyleClass(Node node, String clazz, boolean active) { + if (active) { + if (!node.getStyleClass().contains(clazz)) { + node.getStyleClass().add(clazz); + } + } else { + node.getStyleClass().remove(clazz); + } + } } diff --git a/src/main/java/de/siphalor/was/visual/jfx/QuestController.java b/src/main/java/de/siphalor/was/visual/jfx/QuestController.java index 829eaee..d459c89 100644 --- a/src/main/java/de/siphalor/was/visual/jfx/QuestController.java +++ b/src/main/java/de/siphalor/was/visual/jfx/QuestController.java @@ -30,6 +30,23 @@ public class QuestController { WhatAStorage.getInstance().abandonQuest(getIndex()); } + private boolean canDropHere(DragEvent dragEvent) { + if (type != Quest.Type.OUT) { + return false; + } + if (dragEvent.getDragboard().hasContent(DraggedProduct.FORMAT)) { + DraggedProduct product = (DraggedProduct) dragEvent.getDragboard().getContent(DraggedProduct.FORMAT); + if (product instanceof DraggedProduct.Quest) { + DraggedProduct.Quest quest = (DraggedProduct.Quest) product; + return WhatAStorage.getInstance().canQuestsResolve(quest.index, getIndex()); + } else if (product instanceof DraggedProduct.Slot) { + DraggedProduct.Slot slot = (DraggedProduct.Slot) product; + return WhatAStorage.getInstance().canDeliverProduct(getIndex(), slot.x, slot.y); + } + } + return false; + } + @FXML private void onDragDetected(MouseEvent event) { if (type == Quest.Type.IN) { @@ -44,24 +61,21 @@ public class QuestController { event.consume(); } + @FXML + private void onDragEntered(DragEvent dragEvent) { + JFXUtil.setStyleClass(questContainer, "drop-hover", canDropHere(dragEvent)); + } + + @FXML + private void onDragExited(DragEvent dragEvent) { + JFXUtil.setStyleClass(questContainer, "drop-hover", false); + } + @FXML private void onDragOver(DragEvent dragEvent) { - Dragboard dragboard = dragEvent.getDragboard(); - if (dragboard.hasContent(DraggedProduct.FORMAT)) { - DraggedProduct product = (DraggedProduct) dragboard.getContent(DraggedProduct.FORMAT); - if (product instanceof DraggedProduct.Slot) { - DraggedProduct.Slot slot = (DraggedProduct.Slot) product; - if (WhatAStorage.getInstance().canDeliverProduct(getIndex(), slot.x, slot.y)) { - dragEvent.acceptTransferModes(TransferMode.MOVE); - dragEvent.consume(); - } - } else if (product instanceof DraggedProduct.Quest) { - DraggedProduct.Quest quest = (DraggedProduct.Quest) product; - if ((WhatAStorage.getInstance().canQuestsResolve(quest.index, getIndex()))) { - dragEvent.acceptTransferModes(TransferMode.MOVE); - dragEvent.consume(); - } - } + if (canDropHere(dragEvent)) { + dragEvent.acceptTransferModes(TransferMode.MOVE); + dragEvent.consume(); } } diff --git a/src/main/java/de/siphalor/was/visual/jfx/StorageSlotController.java b/src/main/java/de/siphalor/was/visual/jfx/StorageSlotController.java index f739f57..55b37f1 100644 --- a/src/main/java/de/siphalor/was/visual/jfx/StorageSlotController.java +++ b/src/main/java/de/siphalor/was/visual/jfx/StorageSlotController.java @@ -30,6 +30,18 @@ public class StorageSlotController { this.y = y; } + private boolean canDropHere(DragEvent dragEvent) { + if (dragEvent.getGestureSource() != slot && dragEvent.getDragboard().hasContent(DraggedProduct.FORMAT)) { + DraggedProduct origin = (DraggedProduct) dragEvent.getDragboard().getContent(DraggedProduct.FORMAT); + if (origin instanceof DraggedProduct.Quest) { + return WhatAStorage.getInstance().canStoreProduct(((DraggedProduct.Quest) origin).index, x, y); + } else if (origin instanceof DraggedProduct.Slot){ + return WhatAStorage.getInstance().canMoveProduct(((DraggedProduct.Slot) origin).x, ((DraggedProduct.Slot) origin).y, x, y); + } + } + return false; + } + @FXML private void onDragDetected(MouseEvent event) { int index; @@ -54,19 +66,20 @@ public class StorageSlotController { event.consume(); } + @FXML + private void onDragEntered(DragEvent dragEvent) { + JFXUtil.setStyleClass(slot, "drop-hover", canDropHere(dragEvent)); + } + + @FXML + private void onDragExited(DragEvent dragEvent) { + JFXUtil.setStyleClass(slot, "drop-hover", false); + } + @FXML private void onDragOver(DragEvent dragEvent) { - if (dragEvent.getGestureSource() != slot && dragEvent.getDragboard().hasContent(DraggedProduct.FORMAT)) { - DraggedProduct origin = (DraggedProduct) dragEvent.getDragboard().getContent(DraggedProduct.FORMAT); - if (origin instanceof DraggedProduct.Quest) { - if (WhatAStorage.getInstance().canStoreProduct(((DraggedProduct.Quest) origin).index, x, y)) { - dragEvent.acceptTransferModes(TransferMode.MOVE); - } - } else if (origin instanceof DraggedProduct.Slot){ - if (WhatAStorage.getInstance().canMoveProduct(((DraggedProduct.Slot) origin).x, ((DraggedProduct.Slot) origin).y, x, y)) { - dragEvent.acceptTransferModes(TransferMode.MOVE); - } - } + if (canDropHere(dragEvent)) { + dragEvent.acceptTransferModes(TransferMode.MOVE); } dragEvent.consume(); } diff --git a/src/main/resources/assets/jfx/main.css b/src/main/resources/assets/jfx/main.css index 836e694..4c37320 100644 --- a/src/main/resources/assets/jfx/main.css +++ b/src/main/resources/assets/jfx/main.css @@ -37,10 +37,16 @@ Label.green { .quest-container { -fx-border-width: 0 0 1 0; -fx-border-color: #aaaaaa; - -fx-background-color: #eeeeee; + -fx-background-color: #ffffff; +} +.quest-container.quest-out { + -fx-background-color: #dddddd; } .quest-container.quest-out ImageView { - -fx-blend-mode: hard-light; + #-fx-blend-mode: lighten; +} +.quest-container.quest-out.drop-hover { + -fx-background-color: #eeeeee; } .quest-reward { -fx-text-fill: #457229; @@ -76,8 +82,10 @@ Label.green { } #storage-grid > * { - -fx-border-color: #dddddd; - -fx-border-width: 1; + -fx-background-color: #ffffff; +} +#storage-grid > .drop-hover { + -fx-background-color: #eeeeee; } .storage-slot-item-title { -fx-end-margin: 10; diff --git a/src/main/resources/assets/jfx/quest_widget.fxml b/src/main/resources/assets/jfx/quest_widget.fxml index 94dd3bd..f4e8551 100644 --- a/src/main/resources/assets/jfx/quest_widget.fxml +++ b/src/main/resources/assets/jfx/quest_widget.fxml @@ -10,7 +10,7 @@ - + diff --git a/src/main/resources/assets/jfx/storage_slot.fxml b/src/main/resources/assets/jfx/storage_slot.fxml index f0661e5..f6d4c70 100644 --- a/src/main/resources/assets/jfx/storage_slot.fxml +++ b/src/main/resources/assets/jfx/storage_slot.fxml @@ -9,7 +9,7 @@ - + @@ -36,7 +36,6 @@ - @@ -46,7 +45,6 @@ - @@ -56,7 +54,6 @@ - diff --git a/src/main/resources/assets/textures/bin_bordered.svg b/src/main/resources/assets/textures/bin_bordered.svg index 338208f..6f6f1eb 100644 --- a/src/main/resources/assets/textures/bin_bordered.svg +++ b/src/main/resources/assets/textures/bin_bordered.svg @@ -494,7 +494,7 @@ inkscape:current-layer="layer4" inkscape:document-units="mm" inkscape:cy="240.10718" - inkscape:cx="145.00338" + inkscape:cx="85.404383" inkscape:zoom="0.98994949" inkscape:pageshadow="2" inkscape:pageopacity="0.0" @@ -522,7 +522,7 @@