- changed contentAnchorPane to Grid Pane temporarily so added child will be able to resize natively
- implemented zooming when resizing
Bugs:
- horizontal resizing works as intended, but vertical resizing will result in canvas moving far too left
- need to solve the right and bottom empty space when resizing

#story[1248]
This commit is contained in:
Zhi You Tan
2017-09-06 01:26:12 +12:00
parent 5fb8a0c2c1
commit d67566e217
3 changed files with 188 additions and 83 deletions
+53 -2
View File
@@ -11,6 +11,8 @@ import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.ObservableList;
import javafx.geometry.Point2D;
import javafx.scene.Group;
@@ -26,10 +28,8 @@ import javafx.scene.shape.Circle;
import javafx.scene.shape.Polygon;
import javafx.scene.text.Text;
import javafx.util.Duration;
import seng302.model.ClientYacht;
import seng302.gameServer.messages.RoundingSide;
import seng302.model.ClientYacht;
import seng302.model.Colors;
import seng302.model.GeoPoint;
import seng302.model.Limit;
import seng302.model.mark.CompoundMark;
@@ -142,6 +142,55 @@ public class GameView extends Pane {
gameObjects.add(raceBorder);
gameObjects.add(markers);
initializeTimer();
// DEBUG USE
gameObjects.add(new Circle(0, 0, 10, Color.RED));
gameObjects.add(new Circle(0, 960, 10, Color.RED));
gameObjects.add(new Circle(1280, 960, 10, Color.RED));
gameObjects.add(new Circle(1280, 0, 10, Color.RED));
// --------
this.widthProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue,
Number newValue) {
scaleFactor = (newValue.doubleValue() - 180) / canvasWidth;
double maxVertical = 960 * scaleFactor;
if (oldValue.doubleValue() != 0.0 && maxVertical < getScene().getHeight()) {
setScaleX(scaleFactor);
setScaleY(scaleFactor);
setTranslateX(0 - ((1 - scaleFactor) * oldValue.doubleValue() / 2));
setTranslateY(0 - ((1 - scaleFactor) * getScene().getHeight() / 2));
System.out.println("Width: " + newValue);
System.out.println("Scale X: " + getScaleX());
System.out.println("Transition X: " + getTranslateX());
System.out.println("Get Height: " + getScene().getHeight());
System.out.println("Get Width: " + getScene().getWidth());
}
}
});
this.heightProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue,
Number newValue) {
scaleFactor = (newValue.doubleValue() - 40) / canvasHeight;
double maxHorizontal = 1530 * scaleFactor;
if (oldValue.doubleValue() != 0.0 && maxHorizontal < getScene().getWidth()) {
setScaleX(scaleFactor);
setScaleY(scaleFactor);
setTranslateX(0 - ((1 - scaleFactor) * getScene().getWidth() / 2));
setTranslateY(0 - ((1 - scaleFactor) * oldValue.doubleValue() / 2));
System.out.println("Height: " + newValue);
System.out.println("Scale Y: " + getScaleY());
System.out.println("Transition Y: " + getTranslateY());
System.out.println("Get Height: " + getScene().getHeight());
System.out.println("Get Width: " + getScene().getWidth());
}
}
});
}
private void initializeTimer() {
@@ -440,7 +489,9 @@ public class GameView extends Pane {
* Enables zoom. Has to be called after this is added to a scene.
*/
public void enableZoom () {
System.out.println("enable zoom");
if (this.getScene() != null) {
System.out.println("can zoom");
this.getScene().addEventHandler(KeyEvent.KEY_PRESSED, (event) -> {
if (event.getCode() == KeyCode.Z) {
zoomIn();
@@ -25,7 +25,7 @@ import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Slider;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
@@ -64,7 +64,7 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel
@FXML
private Text timerLabel;
@FXML
private AnchorPane contentAnchorPane;
private GridPane contentAnchorPane;
@FXML
private Text windArrowText, windDirectionText;
@FXML