Merge pull request #187 from informatik-ag-ngl/f/do_a_barrel_roll
implemented "DO A BARREL ROLL!" - Easteregg
This commit is contained in:
commit
7eefaa3556
@ -6,21 +6,26 @@ import java.io.ByteArrayInputStream;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.util.Random;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javafx.animation.RotateTransition;
|
||||
import javafx.application.Platform;
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.Node;
|
||||
import javafx.scene.control.*;
|
||||
import javafx.scene.control.Alert.AlertType;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.scene.image.ImageView;
|
||||
import javafx.scene.input.KeyCode;
|
||||
import javafx.scene.input.KeyEvent;
|
||||
import javafx.scene.layout.GridPane;
|
||||
import javafx.scene.paint.Color;
|
||||
import javafx.stage.FileChooser;
|
||||
import javafx.util.Duration;
|
||||
|
||||
import envoy.client.data.*;
|
||||
import envoy.client.data.audio.AudioRecorder;
|
||||
@ -50,6 +55,9 @@ import envoy.util.EnvoyLog;
|
||||
*/
|
||||
public final class ChatScene implements Restorable {
|
||||
|
||||
@FXML
|
||||
private GridPane scene;
|
||||
|
||||
@FXML
|
||||
private Label contactLabel;
|
||||
|
||||
@ -71,6 +79,9 @@ public final class ChatScene implements Restorable {
|
||||
@FXML
|
||||
private Button settingsButton;
|
||||
|
||||
@FXML
|
||||
private Button rotateButton;
|
||||
|
||||
@FXML
|
||||
private TextArea messageTextArea;
|
||||
|
||||
@ -121,6 +132,7 @@ public final class ChatScene implements Restorable {
|
||||
voiceButton.setGraphic(new ImageView(IconUtil.loadIconThemeSensitive("microphone", DEFAULT_ICON_SIZE)));
|
||||
attachmentButton.setGraphic(new ImageView(IconUtil.loadIconThemeSensitive("attachment", DEFAULT_ICON_SIZE)));
|
||||
attachmentView.setImage(DEFAULT_ATTACHMENT_VIEW_IMAGE);
|
||||
rotateButton.setGraphic(new ImageView(IconUtil.loadIconThemeSensitive("rotate", (int) (DEFAULT_ICON_SIZE * 1.5))));
|
||||
|
||||
// Listen to received messages
|
||||
eventBus.register(MessageCreationEvent.class, e -> {
|
||||
@ -346,6 +358,28 @@ public final class ChatScene implements Restorable {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotates every element in our application by 360° in at most 2.75s.
|
||||
*
|
||||
* @since Envoy Client v0.1-beta
|
||||
*/
|
||||
@FXML
|
||||
private void doABarrelRoll() {
|
||||
// contains all Node objects in ChatScene in alphabetical order
|
||||
final var rotatableNodes = new Node[] { attachmentButton, attachmentView, contactLabel, infoLabel, messageList, messageTextArea,
|
||||
postButton, remainingChars, rotateButton, scene, settingsButton, userList, voiceButton };
|
||||
final var random = new Random();
|
||||
for (final var node : rotatableNodes) {
|
||||
// Defines at most four whole rotation in at most 4s
|
||||
final var rotateTransition = new RotateTransition(Duration.seconds(random.nextDouble() * 3 + 1), node);
|
||||
rotateTransition.setByAngle((random.nextInt(3) + 1) * 360);
|
||||
rotateTransition.play();
|
||||
// This is needed as for some strange reason objects could stop before being
|
||||
// rotated back to 0°
|
||||
rotateTransition.setOnFinished(e -> node.setRotate(0));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the text length of the {@code messageTextArea}, adjusts the
|
||||
* {@code remainingChars} label and checks whether to send the message
|
||||
|
@ -15,9 +15,10 @@
|
||||
<?import javafx.scene.layout.GridPane?>
|
||||
<?import javafx.scene.layout.RowConstraints?>
|
||||
|
||||
<GridPane hgap="5.0" maxHeight="-Infinity" maxWidth="-Infinity"
|
||||
minHeight="400.0" minWidth="350.0" prefHeight="400.0" prefWidth="600.0"
|
||||
vgap="2.0" xmlns="http://javafx.com/javafx/11.0.1"
|
||||
<GridPane fx:id="scene" hgap="5.0" maxHeight="-Infinity"
|
||||
maxWidth="-Infinity" minHeight="400.0" minWidth="350.0"
|
||||
prefHeight="400.0" prefWidth="600.0" vgap="2.0"
|
||||
xmlns="http://javafx.com/javafx/11.0.1"
|
||||
xmlns:fx="http://javafx.com/fxml/1"
|
||||
fx:controller="envoy.client.ui.controller.ChatScene">
|
||||
<columnConstraints>
|
||||
@ -99,6 +100,12 @@
|
||||
<Insets right="10.0" />
|
||||
</GridPane.margin>
|
||||
<buttons>
|
||||
<Button fx:id="rotateButton" mnemonicParsing="false"
|
||||
onAction="#doABarrelRoll">
|
||||
<padding>
|
||||
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
|
||||
</padding>
|
||||
</Button>
|
||||
<Button fx:id="attachmentButton" disable="true"
|
||||
mnemonicParsing="false" onAction="#attachmentButtonClicked">
|
||||
<padding>
|
||||
|
BIN
src/main/resources/icons/dark/rotate.png
Normal file
BIN
src/main/resources/icons/dark/rotate.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
BIN
src/main/resources/icons/light/rotate.png
Normal file
BIN
src/main/resources/icons/light/rotate.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
Reference in New Issue
Block a user