1
0
mirror of https://github.com/aNNiMON/HotaruFX.git synced 2024-09-19 14:14:21 +03:00

Ability to set composition background

This commit is contained in:
Victor 2017-09-07 21:20:47 +03:00
parent 378cc26d49
commit e88a1d637d
2 changed files with 39 additions and 13 deletions

View File

@ -6,10 +6,12 @@ import com.annimon.hotarufx.lib.NodeValue;
import com.annimon.hotarufx.lib.NumberValue; import com.annimon.hotarufx.lib.NumberValue;
import com.annimon.hotarufx.lib.Types; import com.annimon.hotarufx.lib.Types;
import com.annimon.hotarufx.visual.Composition; import com.annimon.hotarufx.visual.Composition;
import com.annimon.hotarufx.visual.PropertyType;
import com.annimon.hotarufx.visual.visitors.RenderVisitor; import com.annimon.hotarufx.visual.visitors.RenderVisitor;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import javafx.scene.paint.Paint;
import lombok.val; import lombok.val;
import static com.annimon.hotarufx.bundles.FunctionInfo.of; import static com.annimon.hotarufx.bundles.FunctionInfo.of;
import static com.annimon.hotarufx.bundles.FunctionType.COMMON; import static com.annimon.hotarufx.bundles.FunctionType.COMMON;
@ -30,32 +32,35 @@ public class CompositionBundle implements Bundle {
private static Function composition(Context context) { private static Function composition(Context context) {
return args -> { return args -> {
final int width, height; final Composition composition;
final double frameRate;
switch (args.length) { switch (args.length) {
case 0: case 0:
width = 1280; composition = new Composition();
height = 720;
frameRate = 30d;
break; break;
case 1: case 1:
width = 1280; double frameRate = args[0].asNumber();
height = 720; composition = new Composition(frameRate);
frameRate = args[0].asNumber();
break; break;
case 2: case 2:
width = args[0].asInt(); int width = args[0].asInt();
height = args[1].asInt(); int height = args[1].asInt();
frameRate = 30d; composition = new Composition(width, height);
break; break;
case 3: case 3:
width = args[0].asInt();
height = args[1].asInt();
frameRate = args[2].asNumber();
composition = new Composition(width, height, frameRate);
break;
case 4:
default: default:
width = args[0].asInt(); width = args[0].asInt();
height = args[1].asInt(); height = args[1].asInt();
frameRate = args[2].asNumber(); frameRate = args[2].asNumber();
val background = PropertyType.PAINT.<Paint>getFromHFX().apply(args[3]);
composition = new Composition(width, height, frameRate, background);
break; break;
} }
val composition = new Composition(width, height, frameRate);
val scene = composition.getScene(); val scene = composition.getScene();
context.composition(composition); context.composition(composition);
context.variables().put("Width", NumberValue.of(scene.getVirtualWidth())); context.variables().put("Width", NumberValue.of(scene.getVirtualWidth()));

View File

@ -3,6 +3,7 @@ package com.annimon.hotarufx.visual;
import javafx.scene.Group; import javafx.scene.Group;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import lombok.Getter; import lombok.Getter;
import lombok.val; import lombok.val;
@ -21,9 +22,29 @@ public class Composition {
@Getter @Getter
private final VirtualScene scene; private final VirtualScene scene;
@Getter
private final Paint background;
public Composition() {
this(1280, 720);
}
public Composition(double frameRate) {
this(1280, 720, frameRate);
}
public Composition(int sceneWidth, int sceneHeight) {
this(sceneWidth, sceneHeight, 30);
}
public Composition(int sceneWidth, int sceneHeight, double frameRate) { public Composition(int sceneWidth, int sceneHeight, double frameRate) {
this(sceneWidth, sceneHeight, frameRate, Color.WHITE);
}
public Composition(int sceneWidth, int sceneHeight, double frameRate, Paint background) {
this.sceneWidth = sceneWidth; this.sceneWidth = sceneWidth;
this.sceneHeight = sceneHeight; this.sceneHeight = sceneHeight;
this.background = background;
virtualHeight = 1080; virtualHeight = 1080;
factor = virtualHeight / (double) sceneHeight; factor = virtualHeight / (double) sceneHeight;
virtualWidth = (int) (sceneWidth * factor); virtualWidth = (int) (sceneWidth * factor);
@ -41,6 +62,6 @@ public class Composition {
} }
public Scene produceAnimationScene() { public Scene produceAnimationScene() {
return new Scene(scene.getGroup(), sceneWidth, sceneHeight); return new Scene(scene.getGroup(), sceneWidth, sceneHeight, background);
} }
} }