Add options to merge duplicates/ignore empty cels in Export Sprite Sheet

This commit is contained in:
David Capello 2019-10-23 21:09:56 -03:00
parent 0a2d5e171b
commit 13d042f346
4 changed files with 35 additions and 0 deletions

View File

@ -459,6 +459,8 @@
<option id="trim" type="bool" default="false" />
<option id="trim_by_grid" type="bool" default="false" />
<option id="extrude" type="bool" default="false" />
<option id="merge_duplicates" type="bool" default="false" />
<option id="ignore_empty" type="bool" default="false" />
<option id="open_generated" type="bool" default="false" />
<option id="layer" type="std::string" />
<option id="frame_tag" type="std::string" />

View File

@ -577,6 +577,10 @@ trim_by_grid = By Grid
trim_by_grid_tooltip = Trims by grid boundaries instead of pixel by pixel
extrude = Extrude
extrude_tooltip = Adds a border to each frame duplicating the pixels of its edges
merge_dups = Merge Dups
merge_dups_tooltip = Merge Duplicate Frames
ignore_empty = Ignore Empty
ignore_empty_tooltip = Ignore Empty Frames
layers = Layers:
split_layers = Split Layers
split_layers_tooltip = Generates one sprite for each layer

View File

@ -55,6 +55,11 @@
<expr id="inner_padding" text="0" tooltip="@.inner_tooltip" />
</grid>
</vbox>
<separator id="padding_separator" vertical="true" />
<vbox>
<check id="merge_dups" text="@.merge_dups" tooltip="@.merge_dups_tooltip" />
<check id="ignore_empty" text="@.ignore_empty" tooltip="@.ignore_empty_tooltip" />
</vbox>
</hbox>
<separator horizontal="true" text="@.output" cell_hspan="4" cell_align="horizontal" />

View File

@ -71,6 +71,8 @@ struct ExportSpriteSheetParams : public NewParams {
Param<bool> trim { this, false, "trim" };
Param<bool> trimByGrid { this, false, "trimByGrid" };
Param<bool> extrude { this, false, "extrude" };
Param<bool> ignoreEmpty { this, false, "ignoreEmpty" };
Param<bool> mergeDuplicates { this, false, "mergeDuplicates" };
Param<bool> openGenerated { this, false, "openGenerated" };
Param<std::string> layer { this, std::string(), "layer" };
Param<std::string> tag { this, std::string(), "tag" };
@ -177,6 +179,8 @@ void update_doc_exporter_from_params(DocExporter& exporter,
const bool trimCels = params.trim();
const bool trimByGrid = params.trimByGrid();
const bool extrude = params.extrude();
const bool ignoreEmpty = params.ignoreEmpty();
const bool mergeDuplicates = params.mergeDuplicates();
const bool splitLayers = params.splitLayers();
const bool splitTags = params.splitTags();
const bool listLayers = params.listLayers();
@ -234,6 +238,8 @@ void update_doc_exporter_from_params(DocExporter& exporter,
exporter.setTrimCels(trimCels);
exporter.setTrimByGrid(trimByGrid);
exporter.setExtrude(extrude);
exporter.setIgnoreEmptyCels(ignoreEmpty);
exporter.setMergeDuplicates(mergeDuplicates);
if (listLayers) exporter.setListLayers(true);
if (listTags) exporter.setListTags(true);
if (listSlices) exporter.setListSlices(true);
@ -326,6 +332,8 @@ public:
trimEnabled()->isSelected()) &&
params.trimByGrid());
extrudeEnabled()->setSelected(params.extrude());
mergeDups()->setSelected(params.mergeDuplicates());
ignoreEmpty()->setSelected(params.ignoreEmpty());
borderPadding()->setTextf("%d", params.borderPadding());
shapePadding()->setTextf("%d", params.shapePadding());
@ -379,6 +387,8 @@ public:
shapePadding()->Change.connect(base::Bind<void>(&ExportSpriteSheetWindow::generatePreview, this));
innerPadding()->Change.connect(base::Bind<void>(&ExportSpriteSheetWindow::generatePreview, this));
extrudeEnabled()->Click.connect(base::Bind<void>(&ExportSpriteSheetWindow::generatePreview, this));
mergeDups()->Click.connect(base::Bind<void>(&ExportSpriteSheetWindow::generatePreview, this));
ignoreEmpty()->Click.connect(base::Bind<void>(&ExportSpriteSheetWindow::generatePreview, this));
imageEnabled()->Click.connect(base::Bind<void>(&ExportSpriteSheetWindow::onImageEnabledChange, this));
imageFilename()->Click.connect(base::Bind<void>(&ExportSpriteSheetWindow::onImageFilename, this));
dataEnabled()->Click.connect(base::Bind<void>(&ExportSpriteSheetWindow::onDataEnabledChange, this));
@ -433,6 +443,8 @@ public:
params.trim (trimValue());
params.trimByGrid (trimByGridValue());
params.extrude (extrudeValue());
params.mergeDuplicates (mergeDupsValue());
params.ignoreEmpty (ignoreEmptyValue());
params.openGenerated (openGeneratedValue());
params.layer (layerValue());
params.tag (tagValue());
@ -577,6 +589,14 @@ private:
return (extrudeValue() ? 1: 0);
}
bool mergeDupsValue() const {
return mergeDups()->isSelected();
}
bool ignoreEmptyValue() const {
return ignoreEmpty()->isSelected();
}
bool openGeneratedValue() const {
return openGenerated()->isSelected();
}
@ -1103,6 +1123,8 @@ void ExportSpriteSheetCommand::onExecute(Context* context)
if (!params.trim.isSet()) params.trim( docPref.spriteSheet.trim());
if (!params.trimByGrid.isSet()) params.trimByGrid( docPref.spriteSheet.trimByGrid());
if (!params.extrude.isSet()) params.extrude( docPref.spriteSheet.extrude());
if (!params.mergeDuplicates.isSet()) params.mergeDuplicates( docPref.spriteSheet.mergeDuplicates());
if (!params.ignoreEmpty.isSet()) params.ignoreEmpty( docPref.spriteSheet.ignoreEmpty());
if (!params.openGenerated.isSet()) params.openGenerated( docPref.spriteSheet.openGenerated());
if (!params.layer.isSet()) params.layer( docPref.spriteSheet.layer());
if (!params.tag.isSet()) params.tag( docPref.spriteSheet.frameTag());
@ -1141,6 +1163,8 @@ void ExportSpriteSheetCommand::onExecute(Context* context)
docPref.spriteSheet.trim (params.trim());
docPref.spriteSheet.trimByGrid (params.trimByGrid());
docPref.spriteSheet.extrude (params.extrude());
docPref.spriteSheet.mergeDuplicates (params.mergeDuplicates());
docPref.spriteSheet.ignoreEmpty (params.ignoreEmpty());
docPref.spriteSheet.openGenerated (params.openGenerated());
docPref.spriteSheet.layer (params.layer());
docPref.spriteSheet.frameTag (params.tag());