diff --git a/synfig-studio/plugins/lottie-exporter/common/Param.py b/synfig-studio/plugins/lottie-exporter/common/Param.py index 3277719..cfda9ae 100644 --- a/synfig-studio/plugins/lottie-exporter/common/Param.py +++ b/synfig-studio/plugins/lottie-exporter/common/Param.py @@ -172,7 +172,7 @@ class Param: If this parameter is not animated, it generates dummy waypoints and animates this parameter """ - if anim_type in {"vector", "group_layer_scale"}: # This will never happen, can remove this latter + if anim_type in {"vector", "group_layer_scale", "stretch_layer_scale"}: # This will never happen, can remove this latter self.dimension = 2 # Check if we are dealing with convert methods @@ -206,7 +206,7 @@ class Param: """ Internal private method for animating """ - if anim_type in {"vector", "group_layer_scale"}: + if anim_type in {"vector", "group_layer_scale", "stretch_layer_scale"}: self.dimension = 2 # Check if we are dealing with convert methods diff --git a/synfig-studio/plugins/lottie-exporter/common/Vector.py b/synfig-studio/plugins/lottie-exporter/common/Vector.py index 499fffa..efd5a95 100644 --- a/synfig-studio/plugins/lottie-exporter/common/Vector.py +++ b/synfig-studio/plugins/lottie-exporter/common/Vector.py @@ -181,7 +181,7 @@ class Vector: ret = [self.val1, self.val2] elif self.type == "circle_radius": ret = [self.val1, self.val1] - elif self.type in {"rectangle_size", "image_scale", "scale_layer_zoom", "group_layer_scale"}: + elif self.type in {"rectangle_size", "image_scale", "scale_layer_zoom", "group_layer_scale", "stretch_layer_scale"}: ret = [self.val1, self.val3] else: ret = [self.val1] diff --git a/synfig-studio/plugins/lottie-exporter/common/misc.py b/synfig-studio/plugins/lottie-exporter/common/misc.py index a9b9cb7..8433809 100644 --- a/synfig-studio/plugins/lottie-exporter/common/misc.py +++ b/synfig-studio/plugins/lottie-exporter/common/misc.py @@ -145,6 +145,13 @@ def parse_position(animated, i): vec.add_new_val(val) return vec + elif animated.attrib["type"] == "stretch_layer_scale": + val1 = float(animated[i][0][0].text) * 100 + val3 = float(animated[i][0][1].text) * 100 + vec = Vector(val1, get_frame(animated[i]), animated.attrib["type"]) + vec.add_new_val(val3) + return vec + elif animated.attrib["type"] == "group_layer_scale": val1 = float(animated[i][0][0].text) * 100 val3 = float(animated[i][0][1].text) * 100 diff --git a/synfig-studio/plugins/lottie-exporter/effects/controller.py b/synfig-studio/plugins/lottie-exporter/effects/controller.py index 8d1ed75..2119711 100644 --- a/synfig-studio/plugins/lottie-exporter/effects/controller.py +++ b/synfig-studio/plugins/lottie-exporter/effects/controller.py @@ -23,7 +23,7 @@ def gen_effects_controller(lottie, value, anim_type): lottie["ef"] = [] lottie["ef"].append({}) - if anim_type in {"vector", "group_layer_scale"}: + if anim_type in {"vector", "group_layer_scale", "stretch_layer_scale"}: gen_effects_point(lottie["ef"][-1], value, idx) else: gen_effects_slider(lottie["ef"][-1], value, idx) diff --git a/synfig-studio/plugins/lottie-exporter/layers/preComp.py b/synfig-studio/plugins/lottie-exporter/layers/preComp.py index 8853668..3c0383d 100644 --- a/synfig-studio/plugins/lottie-exporter/layers/preComp.py +++ b/synfig-studio/plugins/lottie-exporter/layers/preComp.py @@ -39,11 +39,14 @@ def gen_layer_precomp(lottie, layer, idx): gen_layer_rotate(lottie["ks"], layer) settings.INSIDE_PRECOMP = True elif layer.get_type() == "zoom": - gen_layer_scale(lottie["ks"], layer) + gen_layer_scale(lottie["ks"], layer, "scale_layer") settings.INSIDE_PRECOMP = True elif layer.get_type() == "translate": gen_layer_translate(lottie["ks"], layer) settings.INSIDE_PRECOMP = True + elif layer.get_type() == "stretch": + gen_layer_scale(lottie["ks"], layer, "stretch_layer") + settings.INSIDE_PRECOMP = True settings.lottie_format["assets"].append({}) asset = add_precomp_asset(settings.lottie_format["assets"][-1], layer.getparent(), idx) diff --git a/synfig-studio/plugins/lottie-exporter/layers/scale_layer.py b/synfig-studio/plugins/lottie-exporter/layers/scale_layer.py index 3a2efab..8929235 100644 --- a/synfig-studio/plugins/lottie-exporter/layers/scale_layer.py +++ b/synfig-studio/plugins/lottie-exporter/layers/scale_layer.py @@ -9,7 +9,7 @@ from helpers.transform import gen_helpers_transform sys.path.append("..") -def gen_layer_scale(lottie, layer): +def gen_layer_scale(lottie, layer, layer_name="scale_layer"): """ Help generate transform properties of a scale layer @@ -20,6 +20,10 @@ def gen_layer_scale(lottie, layer): Returns: (None) """ + animation_type = "scale_layer_zoom" + if layer_name == "stretch_layer": + animation_type = "stretch_layer_scale" + center = layer.get_param("center") center.animate("vector") anchor = copy.deepcopy(center) @@ -28,7 +32,7 @@ def gen_layer_scale(lottie, layer): pos = center scale = layer.get_param("amount") # This is scale amount - scale.animate("scale_layer_zoom") + scale.animate(animation_type) anchor.add_offset() if settings.INSIDE_PRECOMP: diff --git a/synfig-studio/plugins/lottie-exporter/settings.py b/synfig-studio/plugins/lottie-exporter/settings.py index 54a4548..ca55687 100644 --- a/synfig-studio/plugins/lottie-exporter/settings.py +++ b/synfig-studio/plugins/lottie-exporter/settings.py @@ -65,7 +65,7 @@ SHAPE_LAYER = {"simple_circle"} SOLID_LAYER = {"SolidColor"} SHAPE_SOLID_LAYER = {"region", "polygon", "outline", "circle", "rectangle", "filled_rectangle", "star"} IMAGE_LAYER = {"import"} -PRE_COMP_LAYER = {"rotate", "zoom", "translate"} +PRE_COMP_LAYER = {"rotate", "zoom", "translate", "stretch"} GROUP_LAYER = {"group", "switch"} SKELETON_LAYER = {"skeleton"} UNKNOWN_LAYER = "unknown_layer"