Skip to content

Commit

Permalink
Use layer index to avoid conflicts when exporting sprites with layers…
Browse files Browse the repository at this point in the history
… that have the same name
  • Loading branch information
martincapello committed Aug 30, 2022
1 parent 6a748db commit 1921443
Show file tree
Hide file tree
Showing 6 changed files with 196 additions and 169 deletions.
17 changes: 14 additions & 3 deletions src/app/commands/cmd_export_sprite_sheet.cpp
Expand Up @@ -76,6 +76,7 @@ struct ExportSpriteSheetParams : public NewParams {
Param<bool> mergeDuplicates { this, false, "mergeDuplicates" };
Param<bool> openGenerated { this, false, "openGenerated" };
Param<std::string> layer { this, std::string(), "layer" };
Param<int> layerIndex { this, -1, "layerIndex" };
Param<std::string> tag { this, std::string(), "tag" };
Param<bool> splitLayers { this, false, "splitLayers" };
Param<bool> splitTags { this, false, "splitTags" };
Expand Down Expand Up @@ -182,6 +183,7 @@ Doc* generate_sprite_sheet_from_params(
const SpriteSheetDataFormat dataFormat = params.dataFormat();
const std::string filenameFormat = params.filenameFormat();
const std::string layerName = params.layer();
const int layerIndex = params.layerIndex();
const std::string tagName = params.tag();
const int borderPadding = std::clamp(params.borderPadding(), 0, 100);
const int shapePadding = std::clamp(params.shapePadding(), 0, 100);
Expand Down Expand Up @@ -212,13 +214,16 @@ Doc* generate_sprite_sheet_from_params(
// If the user choose to render selected layers only, we can
// temporaly make them visible and hide the other ones.
RestoreVisibleLayers layersVisibility;
calculate_visible_layers(site, layerName, layersVisibility);
calculate_visible_layers(site, layerName, layerIndex, layersVisibility);

SelectedLayers selLayers;
if (layerName != kSelectedLayers) {
// TODO add a getLayerByName
int i = sprite->allLayersCount();
for (const Layer* layer : sprite->allLayers()) {
if (layer->name() == layerName) {
i--;
if (layer->name() == layerName && layerIndex == -1 ||
layer->name() == layerName && layerIndex == i) {
selLayers.insert(const_cast<Layer*>(layer));
break;
}
Expand Down Expand Up @@ -374,7 +379,7 @@ class ExportSpriteSheetWindow : public app::gen::ExportSpriteSheet {
}

fill_layers_combobox(
m_sprite, layers(), params.layer());
m_sprite, layers(), params.layer(), params.layerIndex());

fill_frames_combobox(
m_sprite, frames(), params.tag());
Expand Down Expand Up @@ -530,6 +535,7 @@ class ExportSpriteSheetWindow : public app::gen::ExportSpriteSheet {
params.ignoreEmpty (ignoreEmptyValue());
params.openGenerated (openGeneratedValue());
params.layer (layerValue());
params.layerIndex (layerIndex());
params.tag (tagValue());
params.splitLayers (splitLayersValue());
params.splitTags (splitTagsValue());
Expand Down Expand Up @@ -714,6 +720,11 @@ class ExportSpriteSheetWindow : public app::gen::ExportSpriteSheet {
return layers()->getValue();
}

int layerIndex() const {
auto i = layers()->getSelectedItemIndex() - 2;
return i < 0 ? -1 : i;
}

std::string tagValue() const {
return frames()->getValue();
}
Expand Down
3 changes: 3 additions & 0 deletions src/app/commands/cmd_save_file.cpp
Expand Up @@ -343,6 +343,7 @@ void SaveFileCopyAsCommand::onExecute(Context* context)
Doc* doc = context->activeDocument();
std::string outputFilename = params().filename();
std::string layers = kAllLayers;
int layersIndex = -1;
std::string frames = kAllFrames;
bool applyPixelRatio = false;
double scale = params().scale();
Expand Down Expand Up @@ -408,6 +409,7 @@ void SaveFileCopyAsCommand::onExecute(Context* context)
win.savePref();

layers = win.layersValue();
layersIndex = win.layersIndex();
frames = win.framesValue();
scale = win.resizeValue();
applyPixelRatio = win.applyPixelRatio();
Expand Down Expand Up @@ -464,6 +466,7 @@ void SaveFileCopyAsCommand::onExecute(Context* context)
// Selected layers to export
calculate_visible_layers(site,
layers,
layersIndex,
layersVisibility);

// m_selFrames is not empty if fromFrame/toFrame parameters are
Expand Down
8 changes: 7 additions & 1 deletion src/app/ui/export_file_window.cpp
Expand Up @@ -52,7 +52,7 @@ ExportFileWindow::ExportFileWindow(const Doc* doc)

// Default export configuration
setResizeScale(m_docPref.saveCopy.resizeScale());
fill_layers_combobox(m_doc->sprite(), layers(), m_docPref.saveCopy.layer());
fill_layers_combobox(m_doc->sprite(), layers(), m_docPref.saveCopy.layer(), -1);
fill_frames_combobox(m_doc->sprite(), frames(), m_docPref.saveCopy.frameTag());
fill_anidir_combobox(anidir(), m_docPref.saveCopy.aniDir());
pixelRatio()->setSelected(m_docPref.saveCopy.applyPixelRatio());
Expand Down Expand Up @@ -121,6 +121,12 @@ std::string ExportFileWindow::layersValue() const
return layers()->getValue();
}

int ExportFileWindow::layersIndex() const
{
auto i = layers()->getSelectedItemIndex() - 2;
return i < 0 ? -1 : i;
}

std::string ExportFileWindow::framesValue() const
{
return frames()->getValue();
Expand Down
1 change: 1 addition & 0 deletions src/app/ui/export_file_window.h
Expand Up @@ -29,6 +29,7 @@ namespace app {
std::string outputFilenameValue() const;
double resizeValue() const;
std::string layersValue() const;
int layersIndex() const;
std::string framesValue() const;
doc::AniDir aniDirValue() const;
bool applyPixelRatio() const;
Expand Down

0 comments on commit 1921443

Please sign in to comment.