diff --git a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/controllers/GameController.java b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/controllers/GameController.java index 7e0ff749349593285f409bf9fd85a890d73454b6..87cf63d93ff943125a32cf5666bb53bbff5fd017 100644 --- a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/controllers/GameController.java +++ b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/controllers/GameController.java @@ -7,12 +7,24 @@ import edu.ntnu.idatt2003.mappevurderingprog2.models.Transform2D; import edu.ntnu.idatt2003.mappevurderingprog2.models.Vector2D; import edu.ntnu.idatt2003.mappevurderingprog2.models.chaos.ChaosGame; import edu.ntnu.idatt2003.mappevurderingprog2.models.chaos.ChaosGameDescription; +import edu.ntnu.idatt2003.mappevurderingprog2.models.chaos.ChaosGameDescriptionFactory; import edu.ntnu.idatt2003.mappevurderingprog2.models.chaos.ChaosGameFileHandler; import java.util.ArrayList; import java.util.List; public class GameController { + public void createSierpinskiTriangle() { + ChaosGame.getInstance().setDescription(ChaosGameDescriptionFactory.createSierpinskiTriangle()); + } + + public void createBarnsleyFern() { + ChaosGame.getInstance().setDescription(ChaosGameDescriptionFactory.createBarnsleyFern()); + } + + public void createJuliaTransformation() { + ChaosGame.getInstance().setDescription(ChaosGameDescriptionFactory.createStandardJuliaTransformation()); + } public void updateCanvasCoordinates(Vector2D minCoords, Vector2D maxCoords) { ChaosGameDescription description = ChaosGame.getInstance().getDescription(); description.setMaxCoords(maxCoords); @@ -50,14 +62,6 @@ public class GameController { ChaosGame.getInstance().setCanvas(width, height); } - public int getHeight() { - return ChaosGame.getInstance().getCanvas().getHeight(); - } - - public int getWidth() { - return ChaosGame.getInstance().getCanvas().getWidth(); - } - public void setChaosGameSteps(int steps) { ChaosGame.getInstance().setSteps(steps); } diff --git a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/chaos/ChaosGame.java b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/chaos/ChaosGame.java index bcbeb9a1ca4b41d6add3012d17adb4497d9d3919..3d2341fc13b9f48446cfc6b5d0479660e5362d45 100644 --- a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/chaos/ChaosGame.java +++ b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/chaos/ChaosGame.java @@ -7,7 +7,6 @@ import edu.ntnu.idatt2003.mappevurderingprog2.models.Matrix2x2; import edu.ntnu.idatt2003.mappevurderingprog2.models.Transform2D; import edu.ntnu.idatt2003.mappevurderingprog2.models.UserInterface; import edu.ntnu.idatt2003.mappevurderingprog2.models.Vector2D; -import edu.ntnu.idatt2003.mappevurderingprog2.views.Components.JuliaTransformationButton; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/BarnsleyFernButton.java b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/BarnsleyFernButton.java deleted file mode 100644 index 96824414f08a14d009c1d7e157334bab3c40f07a..0000000000000000000000000000000000000000 --- a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/BarnsleyFernButton.java +++ /dev/null @@ -1,13 +0,0 @@ -package edu.ntnu.idatt2003.mappevurderingprog2.views.Components; - -import edu.ntnu.idatt2003.mappevurderingprog2.controllers.GameController; -import edu.ntnu.idatt2003.mappevurderingprog2.models.chaos.ChaosGame; -import edu.ntnu.idatt2003.mappevurderingprog2.models.chaos.ChaosGameDescriptionFactory; -import edu.ntnu.idatt2003.mappevurderingprog2.views.View; -import javafx.scene.canvas.Canvas; - -public class BarnsleyFernButton extends TransformationButton { - public BarnsleyFernButton(View view, Canvas mainCanvas, GameController gameController) { - super("Barnsley Fern", gameController, view, mainCanvas, ChaosGameDescriptionFactory.createBarnsleyFern(), 200, 200); - } -} \ No newline at end of file diff --git a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/ExistingFractalsMenu.java b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/ExistingFractalsMenu.java index 9f5b74c2311d8d6a361eee54bcdddf6046def6b1..5694d5d48b08896889b328fd1a8fac00eed13686 100644 --- a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/ExistingFractalsMenu.java +++ b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/ExistingFractalsMenu.java @@ -17,14 +17,32 @@ public class ExistingFractalsMenu extends VBox { public ExistingFractalsMenu(View view, GameController gameController) { Label headline = new Label("Choose existing fractal"); headline.setStyle("-fx-font-size: 16px; -fx-font-weight: bold;"); - SierpinskiTriangleButton sierpinskiButton = new SierpinskiTriangleButton(view, view.getMainCanvas(), gameController); - BarnsleyFernButton barnsleyButton = new BarnsleyFernButton(view, view.getMainCanvas(), gameController); - JuliaTransformationButton juliaButton = new JuliaTransformationButton(view, view.getMainCanvas(), gameController); + Button sierpinskiTriangleButton = new Button("Sierpinski Triangle"); + sierpinskiTriangleButton.setOnAction(event -> { + gameController.createSierpinskiTriangle(); + gameController.setChaosGameSteps(1000000); + gameController.setChaosCanvasSize(200, 200); + gameController.runTransformation(); + }); + Button barnsleyFernButton = new Button("Barnsley Fern"); + barnsleyFernButton.setOnAction(event -> { + gameController.createBarnsleyFern(); + gameController.setChaosGameSteps(1000000); + gameController.setChaosCanvasSize(200, 200); + gameController.runTransformation(); + }); + Button juliaButton = new Button("Julia Transformation"); + juliaButton.setOnAction(event -> { + gameController.createJuliaTransformation(); + gameController.setChaosGameSteps(1000000); + gameController.setChaosCanvasSize(200, 200); + gameController.runTransformation(); + }); Button savedFractalsButton = new Button("Saved Fractals"); savedFractalsButton.setOnAction(event -> showSavedFractalsDialog(gameController)); - getChildren().addAll(headline, sierpinskiButton, barnsleyButton, juliaButton, savedFractalsButton); + getChildren().addAll(headline, sierpinskiTriangleButton, barnsleyFernButton, juliaButton, savedFractalsButton); setAlignment(Pos.TOP_CENTER); setSpacing(10); } diff --git a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/ExtraUserOptions.java b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/ExtraUserOptions.java index e7cc801ee539b62965703a31437d43fecba5f168..5866e59ebde9a5171b0160682ca6108ad050173b 100644 --- a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/ExtraUserOptions.java +++ b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/ExtraUserOptions.java @@ -19,11 +19,17 @@ public class ExtraUserOptions extends VBox { private final Button resetViewButton; private final Button clearCanvasButton; - private final Slider zoomSlider; private final Node node; private final RotationButton rotationButton; private final InformationButton informationButton; private GameController gameController; + private Zoom zoom; + private Button zoomInButton; + private Button zoomOutButton; + private Button upButton; + private Button downButton; + private Button leftButton; + private Button rightButton; public ExtraUserOptions(Node node, GameController gameController) { this.node = node; @@ -32,7 +38,14 @@ public class ExtraUserOptions extends VBox { clearCanvasButton = new Button("Clear Canvas"); rotationButton = new RotationButton(node); informationButton = new InformationButton("Additional Information"); - zoomSlider = new Slider(0.5, 4.0, 1.0); + this.zoom = new Zoom(gameController); + this.zoomInButton = new Button("+"); + this.zoomOutButton = new Button("-"); + this.upButton = new Button("Up"); + this.downButton = new Button("Down"); + this.leftButton = new Button("Left"); + this.rightButton = new Button("Right"); + setupZoomButtons(); extraUserOptionsLabel(); Label rotationLabel = new Label("Rotate the view"); @@ -41,9 +54,24 @@ public class ExtraUserOptions extends VBox { Label zoomLabel = new Label("Zoom"); zoomLabel.setStyle("-fx-font-size: 14px; "); + Label navigateLabel = new Label("Navigate"); + navigateLabel.setStyle("-fx-font-size: 14px; "); + + HBox zoomControls = new HBox(zoomInButton, zoomOutButton); + zoomControls.setAlignment(Pos.CENTER); + zoomControls.setSpacing(10); + + HBox leftRightControls = new HBox(leftButton, rightButton); + leftRightControls.setAlignment(Pos.CENTER); + leftRightControls.setSpacing(10); + this.getChildren().addAll( zoomLabel, - createZoomSliderWithLabels(), + zoomControls, + navigateLabel, + upButton, + leftRightControls, + downButton, rotationLabel, rotationButton, createSeparator(), @@ -54,28 +82,24 @@ public class ExtraUserOptions extends VBox { extraUserOptionsInitialize(); } - - private HBox createZoomSliderWithLabels() { - Label zoomInLabel = new Label("In"); - Label zoomOutLabel = new Label("Out"); - zoomSlider.setPrefWidth(100); - - HBox sliderWithLabels = new HBox(zoomOutLabel, zoomSlider, zoomInLabel); - sliderWithLabels.setSpacing(10); - return sliderWithLabels; + private void setupZoomButtons() { + zoomInButton.setOnAction(event -> zoom.zoomIn()); + zoomOutButton.setOnAction(event -> zoom.zoomOut()); + upButton.setOnAction(event -> zoom.moveUp(0.03)); + downButton.setOnAction(event -> zoom.moveDown(0.03)); + leftButton.setOnAction(event -> zoom.moveLeft(0.03)); + rightButton.setOnAction(event -> zoom.moveRight(0.03)); } private void extraUserOptionsInitialize() { extraUserOptionsSizeAndPositioning(); extraUserOptionsStyling(); - sliderToZoom(); resetZoomButton(); clearCanvasButton(); } private void resetZoomButton() { resetViewButton.setOnAction(event -> { - zoomSlider.setValue(1.0); node.getTransforms().clear(); node.setTranslateX(0); node.setTranslateY(0); @@ -98,15 +122,7 @@ public class ExtraUserOptions extends VBox { setStyle("-fx-background-color: #eed9c4;"); } - private void sliderToZoom() { - zoomSlider.valueProperty().addListener((observable, oldValue, newValue) -> { - double zoomFactor = newValue.doubleValue(); - node.getTransforms().clear(); - node.getTransforms().add(new javafx.scene.transform.Scale( - zoomFactor, zoomFactor, node.getBoundsInParent().getWidth() - / 2, node.getBoundsInParent().getHeight() / 2)); - }); - } + private void clearCanvasButton() { clearCanvasButton.setOnAction(event -> { diff --git a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/JuliaTransformationButton.java b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/JuliaTransformationButton.java deleted file mode 100644 index 93f5e4d756a07b0560d9a67ef1910a40bcd57a20..0000000000000000000000000000000000000000 --- a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/JuliaTransformationButton.java +++ /dev/null @@ -1,13 +0,0 @@ -package edu.ntnu.idatt2003.mappevurderingprog2.views.Components; - -import edu.ntnu.idatt2003.mappevurderingprog2.controllers.GameController; -import edu.ntnu.idatt2003.mappevurderingprog2.models.chaos.ChaosGame; -import edu.ntnu.idatt2003.mappevurderingprog2.models.chaos.ChaosGameDescriptionFactory; -import edu.ntnu.idatt2003.mappevurderingprog2.views.View; -import javafx.scene.canvas.Canvas; - -public class JuliaTransformationButton extends TransformationButton { - public JuliaTransformationButton(View view, Canvas mainCanvas, GameController gameController) { - super("Julia Transformation", gameController, view, mainCanvas, ChaosGameDescriptionFactory.createStandardJuliaTransformation(), 200, 200); - } -} \ No newline at end of file diff --git a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/Menu.java b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/Menu.java index 45b5f6d43914e65df2c8f1d314cbe3246d6b4350..cfea2ccb6c8c32306c554c2b2def81e372d1b405 100644 --- a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/Menu.java +++ b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/Menu.java @@ -2,7 +2,9 @@ package edu.ntnu.idatt2003.mappevurderingprog2.views.Components; import edu.ntnu.idatt2003.mappevurderingprog2.controllers.GameController; import edu.ntnu.idatt2003.mappevurderingprog2.views.View; +import javafx.application.Platform; import javafx.geometry.Pos; +import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.Separator; import javafx.scene.layout.VBox; @@ -11,27 +13,29 @@ public class Menu extends VBox { private ExistingFractalsMenu existingFractalsMenu; private CreateFractalMenu createFractalMenu; private CurrentFractalMenu editFractalMenu; - private ExtraUserOptions extraUserOptions; + private Button quitButton; public Menu(View view, GameController gameController) { existingFractalsMenu = new ExistingFractalsMenu(view, gameController); createFractalMenu = new CreateFractalMenu(view, gameController); editFractalMenu = new CurrentFractalMenu(view, gameController); - extraUserOptions = new ExtraUserOptions(view.getMainCanvas(), gameController); + quitButton = new Button("Quit application"); initializeMenu(); } private void initializeMenu() { Label menuLabel = new Label("Menu"); menuLabel.setStyle("-fx-font-size: 20px; -fx-font-weight: bold;-fx-font-family: 'Times New Roman'"); - setPrefWidth(200); - getChildren().addAll(menuLabel, new Separator(), + quitButton.setStyle("-fx-background-color: red; -fx-text-fill: white; -fx-font-weight: bold;"); + quitButton.setOnAction(e -> Platform.exit()); + getChildren().addAll(menuLabel, + new Separator(), existingFractalsMenu, createFractalMenu, editFractalMenu, new Separator(), - extraUserOptions); + quitButton); setAlignment(Pos.TOP_CENTER); setSpacing(20); diff --git a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/SierpinskiTriangleButton.java b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/SierpinskiTriangleButton.java deleted file mode 100644 index 34228cb57ef91bcb71f9af0ae387134ee1e4976f..0000000000000000000000000000000000000000 --- a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/SierpinskiTriangleButton.java +++ /dev/null @@ -1,12 +0,0 @@ -package edu.ntnu.idatt2003.mappevurderingprog2.views.Components; - -import edu.ntnu.idatt2003.mappevurderingprog2.controllers.GameController; -import edu.ntnu.idatt2003.mappevurderingprog2.models.chaos.ChaosGameDescriptionFactory; -import edu.ntnu.idatt2003.mappevurderingprog2.views.View; -import javafx.scene.canvas.Canvas; - -public class SierpinskiTriangleButton extends TransformationButton{ - public SierpinskiTriangleButton(View view, Canvas mainCanvas, GameController gameController) { - super("Sierpinski Triangle", gameController, view, mainCanvas, ChaosGameDescriptionFactory.createSierpinskiTriangle(), 200, 200); - } -} diff --git a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/TransformationButton.java b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/TransformationButton.java deleted file mode 100644 index c4320e74fb10d8a3589bc69e799d3b43ea181d38..0000000000000000000000000000000000000000 --- a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/TransformationButton.java +++ /dev/null @@ -1,42 +0,0 @@ -package edu.ntnu.idatt2003.mappevurderingprog2.views.Components; - -import edu.ntnu.idatt2003.mappevurderingprog2.controllers.GameController; -import edu.ntnu.idatt2003.mappevurderingprog2.models.chaos.ChaosCanvas; -import edu.ntnu.idatt2003.mappevurderingprog2.models.chaos.ChaosGame; -import edu.ntnu.idatt2003.mappevurderingprog2.models.chaos.ChaosGameDescription; -import edu.ntnu.idatt2003.mappevurderingprog2.utils.Colorpalette; -import edu.ntnu.idatt2003.mappevurderingprog2.views.View; -import javafx.scene.canvas.Canvas; -import javafx.scene.canvas.GraphicsContext; -import javafx.scene.control.Button; - -public abstract class TransformationButton extends Button { - protected GraphicsContext gc; - protected Canvas transformationCanvas; - protected View view; - protected ChaosGameDescription chaosGameDescription; - protected int height; - protected int width; - private GameController gameController; - - public TransformationButton(String label, GameController gameController, View view, Canvas transformationCanvas, ChaosGameDescription chaosGameDescription, int height, int width) { - super(label); - this.gameController = gameController; - this.view = view; - this.transformationCanvas = transformationCanvas; - this.gc = transformationCanvas.getGraphicsContext2D(); - this.chaosGameDescription = chaosGameDescription; - this.height = height; - this.width = width; - - this.setOnAction(event -> { - gameController.setChaosGameSteps(1000000); - gameController.setChaosGameDescription(chaosGameDescription); - gameController.setChaosCanvasSize(width, height); - gameController.runTransformation(); - if (gameController.getOutOfBoundsCount() > 0) { - UserFeedback.showErrorPopup("Error", gameController.getOutOfBoundsCount() + " points were out of bounds. Try adjusting the max and min coordinates."); - } - }); - } -} diff --git a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/Zoom.java b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/Zoom.java index e16357789b247554c9813467cad0dee53f016c95..620215e606a64499b4414e7fa8c5af68c9924928 100644 --- a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/Zoom.java +++ b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/Zoom.java @@ -1,69 +1,72 @@ package edu.ntnu.idatt2003.mappevurderingprog2.views.Components; import edu.ntnu.idatt2003.mappevurderingprog2.controllers.GameController; -import javafx.scene.Node; -import javafx.scene.control.Slider; -import javafx.scene.transform.Scale; +import edu.ntnu.idatt2003.mappevurderingprog2.models.Vector2D; public class Zoom { - - private double mouseX, mouseY; private GameController gameController; - private Slider zoomSlider; - public Zoom(Node node, GameController gameController) { + public Zoom(GameController gameController) { this.gameController = gameController; - zoomSlider = new Slider(0.5, 4.0, 1.0); - setUpZoomSlider(); - setUpZoomAndMovement(node); } - public void setUpZoomAndMovement(Node node) { - zoomInAndOut(node); - screenMovement(node); - bindSliderToZoom(node); + public void zoomIn() { + adjustZoom(0.9); + } + + public void zoomOut() { + adjustZoom(1.1); + } + + public void moveLeft(double amount) { + translateView(-amount, 0); } - private void zoomInAndOut(Node node) { - node.setOnScroll(event -> { - double zoomFactor = 1.05; - double deltaY = event.getDeltaY(); - if (deltaY < 0) { - zoomFactor = 2.0 - zoomFactor; - } - Scale scale = new Scale(zoomFactor, zoomFactor, event.getX(), event.getY()); - node.getTransforms().add(scale); - - event.consume(); - }); + public void moveRight(double amount) { + translateView(amount, 0); } - private void screenMovement(Node node) { - node.setOnMousePressed(event -> { - mouseX = event.getSceneX(); - mouseY = event.getSceneY(); - }); - - node.setOnMouseDragged(event -> { - double deltaX = event.getSceneX() - mouseX; - double deltaY = event.getSceneY() - mouseY; - node.setTranslateX(node.getTranslateX() + deltaX); - node.setTranslateY(node.getTranslateY() + deltaY); - mouseX = event.getSceneX(); - mouseY = event.getSceneY(); - }); + public void moveUp(double amount) { + translateView(0, amount); } - private void bindSliderToZoom(Node node) { - zoomSlider.valueProperty().addListener((observable, oldValue, newValue) -> { - double zoomFactor = newValue.doubleValue(); - node.getTransforms().clear(); - node.getTransforms().add(new Scale(zoomFactor, zoomFactor, node.getBoundsInParent().getWidth() / 2, node.getBoundsInParent().getHeight() / 2)); - }); + public void moveDown(double amount) { + translateView(0, -amount); } - private void setUpZoomSlider() { - zoomSlider.valueProperty().addListener((observable, oldValue, newValue) -> { - }); + private void adjustZoom(double adjustFactor) { + Vector2D currentMin = gameController.getCurrentMinCoords(); + Vector2D currentMax = gameController.getCurrentMaxCoords(); + + double centerX = (currentMax.getX0() + currentMin.getX0()) / 2; + double centerY = (currentMax.getX1() + currentMin.getX1()) / 2; + + double newMinX = centerX + (currentMin.getX0() - centerX) * adjustFactor; + double newMaxX = centerX + (currentMax.getX0() - centerX) * adjustFactor; + double newMinY = centerY + (currentMin.getX1() - centerY) * adjustFactor; + double newMaxY = centerY + (currentMax.getX1() - centerY) * adjustFactor; + + updateCoordinates(newMinX, newMaxX, newMinY, newMaxY); + } + + private void translateView(double deltaX, double deltaY) { + Vector2D currentMin = gameController.getCurrentMinCoords(); + Vector2D currentMax = gameController.getCurrentMaxCoords(); + + double newMinX = currentMin.getX0() + deltaX; + double newMaxX = currentMax.getX0() + deltaX; + double newMinY = currentMin.getX1() + deltaY; + double newMaxY = currentMax.getX1() + deltaY; + + updateCoordinates(newMinX, newMaxX, newMinY, newMaxY); + } + + private void updateCoordinates(double newMinX, double newMaxX, double newMinY, double newMaxY) { + Vector2D newMin = new Vector2D(newMinX, newMinY); + Vector2D newMax = new Vector2D(newMaxX, newMaxY); + + gameController.updateCanvasCoordinates(newMin, newMax); + gameController.setChaosCanvasSize(200, 200); + gameController.runTransformation(); } -} \ No newline at end of file +} diff --git a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/View.java b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/View.java index 2e434f702480f622c2b93dadee3111d4d7a44701..87da3af5f5f0143611b13aa29f9d9351d1623410 100644 --- a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/View.java +++ b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/View.java @@ -2,9 +2,7 @@ package edu.ntnu.idatt2003.mappevurderingprog2.views; import edu.ntnu.idatt2003.mappevurderingprog2.controllers.GameController; import edu.ntnu.idatt2003.mappevurderingprog2.views.Components.ExtraUserOptions; -import edu.ntnu.idatt2003.mappevurderingprog2.views.Components.JuliaDialog; import edu.ntnu.idatt2003.mappevurderingprog2.views.Components.Menu; -import edu.ntnu.idatt2003.mappevurderingprog2.views.Components.Zoom; import edu.ntnu.idatt2003.mappevurderingprog2.models.chaos.ChaosCanvas; import edu.ntnu.idatt2003.mappevurderingprog2.models.chaos.ChaosGame; import edu.ntnu.idatt2003.mappevurderingprog2.models.chaos.ChaosGameObserver; @@ -27,14 +25,12 @@ public class View extends BorderPane implements ChaosGameObserver { private Canvas mainCanvas; private GameController gameController; private Menu menu; + private ExtraUserOptions extraUserOptions; private int greenThreshold, blueThreshold, redThreshold; - private Zoom zoom; public View(GameController gameController) { this.gameController = gameController; this.mainCanvas = new Canvas(600, 400); - this.zoom = new Zoom(mainCanvas, gameController); - zoom.setUpZoomAndMovement(mainCanvas); } public Canvas getMainCanvas() { @@ -92,7 +88,13 @@ public class View extends BorderPane implements ChaosGameObserver { this.setBackground(new Background(new BackgroundFill(Colorpalette.Primary, CornerRadii.EMPTY, Insets.EMPTY))); this.setCenter(mainCanvas); this.menu = new Menu(this, gameController); + menu.setPrefWidth(Size.getScreenWidth() * 0.15); + menu.setMaxWidth(Size.getScreenWidth() * 0.15); + this.extraUserOptions = new ExtraUserOptions(this.getMainCanvas(), gameController); + extraUserOptions.setPrefWidth(Size.getScreenWidth() * 0.15); + extraUserOptions.setMaxWidth(Size.getScreenWidth() * 0.15); this.setLeft(menu); + this.setRight(extraUserOptions); return new Scene(this, Size.getScreenWidth(), Size.getScreenHeight()); } diff --git a/src/main/resources/transformations/ZoomedIn b/src/main/resources/transformations/ZoomedIn new file mode 100644 index 0000000000000000000000000000000000000000..ba79156e35865d2ebebddd170df290ede570e708 --- /dev/null +++ b/src/main/resources/transformations/ZoomedIn @@ -0,0 +1,6 @@ +Affine2D +0.31734899055740784, 0.43734899055740795 +0.502651009442592, 0.6226510094425921 +0.500000, 0.000000, 0.000000, 0.500000, 0.0, 0.0 +0.500000, 0.000000, 0.000000, 0.500000, 0.5, 0.0 +0.500000, 0.000000, 0.000000, 0.500000, 0.25, 0.5 diff --git a/src/test/java/edu/ntnu/idatt2003/mappevurderingprog2/AffineTransform2DPositiveTest.java b/src/test/java/edu/ntnu/idatt2003/mappevurderingprog2/AffineTransform2DPositiveTest.java index 4b67c27d1906344770251a905b46ccab51f06469..3e8ae156b87662960990b30d7da33dbd8b08345b 100644 --- a/src/test/java/edu/ntnu/idatt2003/mappevurderingprog2/AffineTransform2DPositiveTest.java +++ b/src/test/java/edu/ntnu/idatt2003/mappevurderingprog2/AffineTransform2DPositiveTest.java @@ -39,7 +39,9 @@ public class AffineTransform2DPositiveTest { Matrix2x2 matrix = new Matrix2x2(1, 0, 0, 1); Vector2D vector = new Vector2D(1, 1); AffineTransform2D transform = new AffineTransform2D(matrix, vector); - Vector2D result = transform.transform(new Vector2D(1, 1)); - assertEquals(new Vector2D(2, 2), result); + Vector2D point = new Vector2D(1, 1); + Vector2D result = transform.transform(point); + assertEquals(2, result.getX0()); + assertEquals(2, result.getX1()); } } \ No newline at end of file