Add feature to allow overriding x/y offsets in GX files

This commit is contained in:
Michael Steenbeek 2024-04-05 15:41:35 +02:00 committed by GitHub
parent c3cf6f01ca
commit a38039f6e4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 31 additions and 4 deletions

View File

@ -486,7 +486,7 @@ std::vector<std::pair<std::string, Image>> ImageTable::GetImageSources(IReadObje
std::vector<std::pair<std::string, Image>> result;
for (auto& jsonImage : jsonImages)
{
if (jsonImage.is_object())
if (jsonImage.is_object() && jsonImage.contains("path"))
{
auto path = Json::GetString(jsonImage["path"]);
auto keepPalette = Json::GetString(jsonImage["palette"]) == "keep";
@ -536,9 +536,36 @@ bool ImageTable::ReadJson(IReadObjectContext* context, json_t& root)
}
else if (jsonImage.is_object())
{
auto images = ParseImages(context, imageSources, jsonImage);
allImages.insert(
allImages.end(), std::make_move_iterator(images.begin()), std::make_move_iterator(images.end()));
if (jsonImage.contains("gx"))
{
auto xOverride = Json::GetNumber<int16_t>(jsonImage["x"], std::numeric_limits<int16_t>::max());
auto yOverride = Json::GetNumber<int16_t>(jsonImage["y"], std::numeric_limits<int16_t>::max());
const bool hasXOverride = xOverride != std::numeric_limits<int16_t>::max();
const bool hasYOverride = yOverride != std::numeric_limits<int16_t>::max();
auto strImage = jsonImage["gx"].get<std::string>();
auto images = ParseImages(context, strImage);
if (hasXOverride || hasYOverride)
{
for (auto& image : images)
{
if (hasXOverride)
image->g1.x_offset = xOverride;
if (hasYOverride)
image->g1.y_offset = yOverride;
}
}
allImages.insert(
allImages.end(), std::make_move_iterator(images.begin()), std::make_move_iterator(images.end()));
}
else
{
auto images = ParseImages(context, imageSources, jsonImage);
allImages.insert(
allImages.end(), std::make_move_iterator(images.begin()), std::make_move_iterator(images.end()));
}
}
}