summaryrefslogtreecommitdiffhomepage
path: root/anim-crop-tool
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2023-11-04 16:49:22 +0100
committerStanislaw Halik <sthalik@misaki.pl>2023-11-04 16:59:25 +0100
commit555bd6dce82143394b93380b42212df99d201495 (patch)
treeaec14dd9a32633834595d8a4ae1f3376ecd59a68 /anim-crop-tool
parent7984e3a949278265d7893e60521fc6a23a22aaef (diff)
b
Diffstat (limited to 'anim-crop-tool')
-rw-r--r--anim-crop-tool/main.cpp52
1 files changed, 13 insertions, 39 deletions
diff --git a/anim-crop-tool/main.cpp b/anim-crop-tool/main.cpp
index 65045fd4..2068d662 100644
--- a/anim-crop-tool/main.cpp
+++ b/anim-crop-tool/main.cpp
@@ -1,10 +1,12 @@
#include "atlas.hpp"
-#include "serialize/magnum-vector2i.hpp"
-#include "serialize/json-helper.hpp"
-#include "serialize/anim.hpp"
+#include "compat/assert.hpp"
#include "compat/defs.hpp"
#include "compat/sysexits.hpp"
+#include "compat/fix-argv0.hpp"
#include "loader/loader.hpp"
+#include "serialize/magnum-vector2i.hpp"
+#include "serialize/json-helper.hpp"
+#include "serialize/anim.hpp"
#include <cerrno>
#include <cmath>
@@ -22,10 +24,8 @@
#include <Corrade/Utility/Path.h>
#include <opencv2/core/mat.hpp>
-#include <opencv2/imgcodecs/imgcodecs.hpp>
#include <opencv2/imgproc/imgproc.hpp>
-
-#include "compat/assert.hpp"
+#include <opencv2/imgcodecs/imgcodecs.hpp>
using namespace floormat;
@@ -96,10 +96,12 @@ static bool load_file(anim_group& group, options& opts, anim_atlas_& atlas, Stri
opts.scale = anim_scale::ratio{new_width / (float)size.width};
}
- const auto dest_size = fm_begin(
+ cv::Size dest_size;
+ {
auto xy = opts.scale.scale_to({(unsigned)size.width, (unsigned)size.height});
- return cv::Size{(int)xy[0], (int)xy[1]};
- );
+ dest_size = cv::Size{(int)xy[0], (int)xy[1]};
+ }
+
const auto factor = (float)dest_size.width / (float)size.width;
if (size.width < dest_size.width || size.height < dest_size.height)
@@ -179,22 +181,6 @@ static bool load_directory(anim_group& group, options& opts, anim_atlas_& atlas)
return true;
}
-static char* fix_argv0(char* argv0) noexcept
-{
-#ifdef _WIN32
- if (auto* c = strrchr(argv0, '\\'); c && c[1])
- {
- if (auto* s = strrchr(c, '.'); s && !strcmp(".exe", s))
- *s = '\0';
- return c+1;
- }
-#else
- if (auto* c = strrchr(argv0, '/'); c && c[1])
- return c+1;
-#endif
- return argv0;
-}
-
using Corrade::Utility::Arguments;
static std::tuple<options, Arguments, bool> parse_cmdline(int argc, const char* const* argv) noexcept
@@ -232,18 +218,6 @@ static std::tuple<options, Arguments, bool> parse_cmdline(int argc, const char*
return EX_USAGE;
}
-[[nodiscard]] static bool check_atlas_name(StringView str) noexcept
-{
- if (str.isEmpty())
- return false;
- if (str.findAny("\\<>&;:^'\" ") || str.find("/."))
- return false;
- if (str[0] == '.' || str[0] == '/')
- return false;
-
- return true;
-}
-
int main(int argc, char** argv)
{
argv[0] = fix_argv0(argv[0]);
@@ -253,13 +227,13 @@ int main(int argc, char** argv)
auto anim_info = json_helper::from_json<anim_def>(opts.input_file);
- if (!check_atlas_name(anim_info.object_name))
+ if (!loader.check_atlas_name(anim_info.object_name))
{
Error{} << "error: atlas object name" << anim_info.object_name << "is invalid";
return EX_DATAERR;
}
- if (!anim_info.anim_name.isEmpty() && !check_atlas_name(anim_info.anim_name))
+ if (!anim_info.anim_name.isEmpty() && !loader.check_atlas_name(anim_info.anim_name))
{
Error{} << "error: atlas animation name" << anim_info.object_name << "is invalid";
return EX_DATAERR;