diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2023-03-20 15:17:14 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2023-03-20 15:17:14 +0100 |
commit | 833ba009037ebec6dcce1688b9bfd59ae1049304 (patch) | |
tree | 5acebe147ec1d26b83c76a67b063479b6512f9a1 | |
parent | e1c4111a106482b55e6ff82b12d64f4fedb18347 (diff) |
anim-crop-tool: fix fixed width/height scaling
-rw-r--r-- | anim-crop-tool/main.cpp | 8 | ||||
-rw-r--r-- | serialize/anim.cpp | 4 | ||||
-rw-r--r-- | src/anim.hpp | 8 |
3 files changed, 10 insertions, 10 deletions
diff --git a/anim-crop-tool/main.cpp b/anim-crop-tool/main.cpp index a2a94e63..e7ccf582 100644 --- a/anim-crop-tool/main.cpp +++ b/anim-crop-tool/main.cpp @@ -94,7 +94,7 @@ static bool load_file(anim_group& group, options& opts, anim_atlas_& atlas, Stri if (opts.scale.type != anim_scale_type::ratio) { float new_width = opts.scale.scale_to_({(unsigned)size.width, (unsigned)size.height})[0]; - opts.scale = {new_width / (float)size.width}; + opts.scale = anim_scale::ratio{new_width / (float)size.width}; } const auto dest_size = fm_begin( @@ -211,11 +211,11 @@ static std::tuple<options, Arguments, bool> parse_cmdline(int argc, const char* options opts; if (!args.value<StringView>("width").isEmpty()) - opts.scale = {args.value<unsigned>("width"), true}; + opts.scale = anim_scale::fixed{args.value<unsigned>("width"), true}; else if (!args.value<StringView>("height").isEmpty()) - opts.scale = {args.value<unsigned>("height"), false}; + opts.scale = anim_scale::fixed{args.value<unsigned>("height"), false}; else if (!args.value<StringView>("scale").isEmpty()) - opts.scale = {args.value<float>("scale")}; + opts.scale = anim_scale::ratio{args.value<float>("scale")}; opts.output_dir = Path::join(loader.startup_directory(), args.value<StringView>("output")); opts.input_file = Path::join(loader.startup_directory(), args.value<StringView>("input")); diff --git a/serialize/anim.cpp b/serialize/anim.cpp index c5a6418b..8d867489 100644 --- a/serialize/anim.cpp +++ b/serialize/anim.cpp @@ -135,11 +135,11 @@ void adl_serializer<floormat::anim_scale>::from_json(const json& j, floormat::an { auto factor = (float)j[1]; fm_soft_assert(factor > 0 && factor <= 1); - val = {factor}; + val = anim_scale::ratio{factor}; } else if (bool is_width = type == "width"_s; is_width || type == "height"_s) { - val = {(unsigned)j[1], is_width}; + val = anim_scale::fixed{(unsigned)j[1], is_width}; fm_soft_assert(val.f.width_or_height > 0); } else diff --git a/src/anim.hpp b/src/anim.hpp index c6315bcf..fe455128 100644 --- a/src/anim.hpp +++ b/src/anim.hpp @@ -33,7 +33,7 @@ enum class anim_scale_type : unsigned char { invalid, ratio, fixed, }; struct anim_scale final { struct ratio { float f; }; - struct fixed { bool is_width; unsigned width_or_height; }; + struct fixed { unsigned width_or_height; bool is_width; }; struct empty {}; union { struct ratio r; @@ -44,8 +44,8 @@ struct anim_scale final constexpr anim_scale() = default; constexpr anim_scale(const anim_scale&) = default; constexpr anim_scale& operator=(const anim_scale&) = default; - constexpr anim_scale(float ratio) : r{ratio}, type{anim_scale_type::ratio} {} - constexpr anim_scale(unsigned width_or_height, bool is_width) : f{is_width, width_or_height}, type{anim_scale_type::ratio} {} + constexpr anim_scale(fixed x) noexcept : f{x}, type{anim_scale_type::fixed} {} + constexpr anim_scale(ratio x) noexcept : r{x}, type{anim_scale_type::ratio} {} Vector2ui scale_to(Vector2ui image_size) const; Vector2 scale_to_(Vector2ui image_size) const; }; @@ -55,7 +55,7 @@ struct anim_def final String object_name, anim_name; std::vector<anim_group> groups; Vector2ui pixel_size; - anim_scale scale = anim_scale{1}; + anim_scale scale = anim_scale::ratio{1}; size_t nframes = 0, fps = 0, actionframe = 0; }; |