diff --git a/Sources/armory/logicnode/GetGlobalCanvasScaleNode.hx b/Sources/armory/logicnode/GetGlobalCanvasScaleNode.hx new file mode 100644 index 00000000..03bec63f --- /dev/null +++ b/Sources/armory/logicnode/GetGlobalCanvasScaleNode.hx @@ -0,0 +1,22 @@ +package armory.logicnode; + +import iron.Scene; +import armory.trait.internal.CanvasScript; + +class GetGlobalCanvasScaleNode extends LogicNode { + + var canvas: CanvasScript; + + public function new(tree: LogicTree) { + super(tree); + } + +#if arm_ui + override function get(from: Int): Dynamic { + canvas = Scene.active.getTrait(CanvasScript); + if (canvas == null) canvas = Scene.active.camera.getTrait(CanvasScript); + + return canvas.getUiScale(); + } +#end +} diff --git a/Sources/armory/logicnode/SetGlobalCanvasScaleNode.hx b/Sources/armory/logicnode/SetGlobalCanvasScaleNode.hx new file mode 100644 index 00000000..c7be7af6 --- /dev/null +++ b/Sources/armory/logicnode/SetGlobalCanvasScaleNode.hx @@ -0,0 +1,25 @@ +package armory.logicnode; + +import iron.Scene; +import armory.trait.internal.CanvasScript; + +class SetGlobalCanvasScaleNode extends LogicNode { + + var canvas: CanvasScript; + var factor: Float; + + public function new(tree: LogicTree) { + super(tree); + } + +#if arm_ui + override function run(from: Int) { + factor = inputs[1].get(); + canvas = Scene.active.getTrait(CanvasScript); + if (canvas == null) canvas = Scene.active.camera.getTrait(CanvasScript); + + canvas.setUiScale(factor); + runOutput(0); + } +#end +} diff --git a/Sources/armory/trait/internal/CanvasScript.hx b/Sources/armory/trait/internal/CanvasScript.hx index 92c585e1..d0d90179 100644 --- a/Sources/armory/trait/internal/CanvasScript.hx +++ b/Sources/armory/trait/internal/CanvasScript.hx @@ -114,13 +114,19 @@ class CanvasScript extends Trait { } /** - * Set UI scale factor. - * @param factor Scale factor. - */ - public function setUiScale(factor:Float) { + Set the UI scale factor. + **/ + public inline function setUiScale(factor: Float) { cui.setScale(factor); } + /** + Get the UI scale factor. + **/ + public inline function getUiScale(): Float { + return cui.ops.scaleFactor; + } + /** * Set visibility of canvas * @param visible Whether canvas should be visible or not diff --git a/blender/arm/logicnode/canvas/LN_get_global_canvas_scale.py b/blender/arm/logicnode/canvas/LN_get_global_canvas_scale.py new file mode 100644 index 00000000..ca832f21 --- /dev/null +++ b/blender/arm/logicnode/canvas/LN_get_global_canvas_scale.py @@ -0,0 +1,11 @@ +from arm.logicnode.arm_nodes import * + + +class GetGlobalCanvasScaleNode(ArmLogicTreeNode): + """Returns the scale of the entire UI Canvas.""" + bl_idname = 'LNGetGlobalCanvasScaleNode' + bl_label = 'Get Global Canvas Scale' + arm_version = 1 + + def arm_init(self, context): + self.add_output('ArmFloatSocket', 'Scale') diff --git a/blender/arm/logicnode/canvas/LN_set_global_canvas_scale.py b/blender/arm/logicnode/canvas/LN_set_global_canvas_scale.py new file mode 100644 index 00000000..3a86f84a --- /dev/null +++ b/blender/arm/logicnode/canvas/LN_set_global_canvas_scale.py @@ -0,0 +1,14 @@ +from arm.logicnode.arm_nodes import * + + +class SetGlobalCanvasScaleNode(ArmLogicTreeNode): + """Sets the scale of the entire UI Canvas.""" + bl_idname = 'LNSetGlobalCanvasScaleNode' + bl_label = 'Set Global Canvas Scale' + arm_version = 1 + + def arm_init(self, context): + self.add_input('ArmNodeSocketAction', 'In') + self.add_input('ArmFloatSocket', 'Scale', default_value=1.0) + + self.add_output('ArmNodeSocketAction', 'Out')