From 1df345c996de433dd88eeaa2ea74fe332ac3a469 Mon Sep 17 00:00:00 2001 From: Victor Date: Thu, 24 Aug 2017 14:44:09 +0300 Subject: [PATCH] Add virtual full HD screen --- app/build.gradle | 1 + .../main/java/com/annimon/hotarufx/Main.java | 17 +++++++++++++++ .../annimon/hotarufx/visual/Composition.java | 21 ++++++++++++++----- .../hotarufx/visual/CompositionTest.java | 21 +++++++++++++++++++ 4 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 app/src/test/java/com/annimon/hotarufx/visual/CompositionTest.java diff --git a/app/build.gradle b/app/build.gradle index 3ee3a95..e375ce8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,6 +11,7 @@ repositories { dependencies { compileOnly 'org.projectlombok:lombok:1.16.18' + testCompileOnly 'org.projectlombok:lombok:1.16.18' testRuntime 'org.junit.platform:junit-platform-launcher:1.0.0-RC2' testRuntime 'org.junit.jupiter:junit-jupiter-engine:5.0.0-RC2' testRuntime 'org.junit.vintage:junit-vintage-engine:4.12.0-RC2' diff --git a/app/src/main/java/com/annimon/hotarufx/Main.java b/app/src/main/java/com/annimon/hotarufx/Main.java index 7962f42..66a2dd6 100644 --- a/app/src/main/java/com/annimon/hotarufx/Main.java +++ b/app/src/main/java/com/annimon/hotarufx/Main.java @@ -1,9 +1,11 @@ package com.annimon.hotarufx; import com.annimon.hotarufx.visual.Composition; +import com.annimon.hotarufx.visual.objects.CircleNode; import javafx.application.Application; import javafx.scene.Group; import javafx.scene.paint.Color; +import javafx.scene.paint.Paint; import javafx.stage.Stage; import lombok.val; @@ -13,6 +15,21 @@ public class Main extends Application { public void start(Stage primaryStage) { val group = new Group(); val composition = new Composition(1280, 720, Color.WHITE, group); + + val colors = new Paint[] {Color.GREEN, Color.RED}; + val halfWidth = composition.getVirtualWidth() / 2; + val halfHeight = composition.getVirtualHeight() / 2; + for (int y = -1; y <= 1; y++) { + for (int x = -1; x <= 1; x++) { + val circle = new CircleNode(); + circle.getCircle().setFill(colors[Math.abs(x * y)]); + circle.getCircle().setCenterX(x * halfWidth); + circle.getCircle().setCenterY(y * halfHeight); + circle.getCircle().setRadius(50); + circle.render(composition); + } + } + primaryStage.setTitle("HotaruFX"); primaryStage.setScene(composition.getScene()); primaryStage.show(); diff --git a/app/src/main/java/com/annimon/hotarufx/visual/Composition.java b/app/src/main/java/com/annimon/hotarufx/visual/Composition.java index 2cf6193..b916e86 100644 --- a/app/src/main/java/com/annimon/hotarufx/visual/Composition.java +++ b/app/src/main/java/com/annimon/hotarufx/visual/Composition.java @@ -15,13 +15,24 @@ public class Composition { private final Scene scene; @Getter - private final int width, height; + private final int + virtualWidth, virtualHeight, + sceneWidth, sceneHeight; + @Getter + private final double factor; - public Composition(int width, int height, Paint background, Group group) { - this.width = width; - this.height = height; + public Composition(int sceneWidth, int sceneHeight, Paint background, Group group) { + this.sceneWidth = sceneWidth; + this.sceneHeight = sceneHeight; + virtualHeight = 1080; + factor = virtualHeight / (double) sceneHeight; + virtualWidth = (int) (sceneWidth * factor); + group.setScaleX(1d / factor); + group.setScaleY(1d / factor); + group.setTranslateX(sceneWidth / 2); + group.setTranslateY(sceneHeight / 2); this.group = group; - this.scene = new Scene(group, width, height, background); + this.scene = new Scene(group, sceneWidth, sceneHeight, background); } public void add(Node node) { diff --git a/app/src/test/java/com/annimon/hotarufx/visual/CompositionTest.java b/app/src/test/java/com/annimon/hotarufx/visual/CompositionTest.java new file mode 100644 index 0000000..0e267b0 --- /dev/null +++ b/app/src/test/java/com/annimon/hotarufx/visual/CompositionTest.java @@ -0,0 +1,21 @@ +package com.annimon.hotarufx.visual; + +import javafx.scene.Group; +import javafx.scene.paint.Color; +import org.junit.jupiter.api.Test; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.junit.jupiter.api.Assertions.*; + +class CompositionTest { + + @Test + void testVirtualSize() { + Composition composition; + composition = new Composition(1280, 720, Color.WHITE, new Group()); + assertThat(composition.getVirtualWidth(), is(1920)); + + composition = new Composition(1280, 1280, Color.WHITE, new Group()); + assertThat(composition.getVirtualWidth(), is(1080)); + } +} \ No newline at end of file