mirror of
https://github.com/aseprite/aseprite.git
synced 2024-10-04 05:50:15 +00:00
Improved import sprite sheet dialog (from #1987)
This commit is contained in:
parent
29a4c6f744
commit
855c7d8ee3
@ -443,6 +443,7 @@
|
||||
<section id="import_sprite_sheet">
|
||||
<option id="type" type="app::SpriteSheetType" default="app::SpriteSheetType::Rows" />
|
||||
<option id="bounds" type="gfx::Rect" default="gfx::Rect(0, 0, 0, 0)" />
|
||||
<option id="padding_enabled" type="bool" default="false" />
|
||||
<option id="padding_bounds" type="gfx::Size" default="gfx::Size(0, 0)" />
|
||||
<option id="partial_tiles" type="bool" default="false" />
|
||||
</section>
|
||||
|
@ -630,7 +630,7 @@ x = X:
|
||||
y = Y:
|
||||
width = Width:
|
||||
height = Height:
|
||||
padding = Padding:
|
||||
padding = Padding
|
||||
horizontal_padding = Horizontal:
|
||||
vertical_padding = Vertical:
|
||||
partial_tiles = Include partial tiles at bottom/right edges
|
||||
|
@ -24,15 +24,12 @@
|
||||
<label text="@.height" />
|
||||
<expr id="height" text="16" />
|
||||
|
||||
<separator text="@.padding" horizontal="true" cell_hspan="4" />
|
||||
<check id="padding_enabled" text="@.padding" cell_hspan="4" />
|
||||
|
||||
<label text="@.horizontal_padding" />
|
||||
<label text="@.horizontal_padding" id="horizontal_padding_label" />
|
||||
<expr id="horizontal_padding" text="0" />
|
||||
<label text="" cell_hspan="2" />
|
||||
|
||||
<label text="@.vertical_padding" />
|
||||
<label text="@.vertical_padding" id="vertical_padding_label" />
|
||||
<expr id="vertical_padding" text="0" />
|
||||
<label text="" cell_hspan="2" />
|
||||
|
||||
<check id="partial_tiles" text="@.partial_tiles" cell_hspan="4" />
|
||||
|
||||
|
@ -74,6 +74,7 @@ public:
|
||||
y()->Change.connect(base::Bind<void>(&ImportSpriteSheetWindow::onEntriesChange, this));
|
||||
width()->Change.connect(base::Bind<void>(&ImportSpriteSheetWindow::onEntriesChange, this));
|
||||
height()->Change.connect(base::Bind<void>(&ImportSpriteSheetWindow::onEntriesChange, this));
|
||||
paddingEnabled()->Click.connect(base::Bind<void>(&ImportSpriteSheetWindow::onPaddingEnabledChange, this));
|
||||
horizontalPadding()->Change.connect(base::Bind<void>(&ImportSpriteSheetWindow::onEntriesChange, this));
|
||||
verticalPadding()->Change.connect(base::Bind<void>(&ImportSpriteSheetWindow::onEntriesChange, this));
|
||||
partialTiles()->Click.connect(base::Bind<void>(&ImportSpriteSheetWindow::onEntriesChange, this));
|
||||
@ -87,6 +88,8 @@ public:
|
||||
selectActiveDocument();
|
||||
m_fileOpened = false;
|
||||
}
|
||||
|
||||
onPaddingEnabledChange();
|
||||
}
|
||||
|
||||
~ImportSpriteSheetWindow() {
|
||||
@ -101,6 +104,10 @@ public:
|
||||
return partialTiles()->isSelected();
|
||||
}
|
||||
|
||||
bool paddingEnabledValue() const {
|
||||
return paddingEnabled()->isSelected();
|
||||
}
|
||||
|
||||
bool ok() const {
|
||||
return closer() == import();
|
||||
}
|
||||
@ -208,13 +215,20 @@ protected:
|
||||
}
|
||||
|
||||
void onChangePadding(const gfx::Size& padding) override {
|
||||
m_padding = padding;
|
||||
if (padding.w < 0)
|
||||
m_padding.w = 0;
|
||||
if (padding.h < 0)
|
||||
m_padding.h = 0;
|
||||
horizontalPadding()->setTextf("%d", m_padding.w);
|
||||
verticalPadding()->setTextf("%d", m_padding.h);
|
||||
if (paddingEnabled()->isSelected()) {
|
||||
m_padding = padding;
|
||||
if (padding.w < 0)
|
||||
m_padding.w = 0;
|
||||
if (padding.h < 0)
|
||||
m_padding.h = 0;
|
||||
horizontalPadding()->setTextf("%d", m_padding.w);
|
||||
verticalPadding()->setTextf("%d", m_padding.h);
|
||||
}
|
||||
else {
|
||||
m_padding = gfx::Size(0, 0);
|
||||
horizontalPadding()->setTextf("%d", 0);
|
||||
verticalPadding()->setTextf("%d", 0);
|
||||
}
|
||||
}
|
||||
|
||||
std::string onGetContextBarHelp() override {
|
||||
@ -251,14 +265,19 @@ private:
|
||||
sheetType()->setSelectedItemIndex((int)app::SpriteSheetType::Rows-1);
|
||||
|
||||
gfx::Rect defBounds = m_docPref->importSpriteSheet.bounds();
|
||||
gfx::Size defPaddingBounds = m_docPref->importSpriteSheet.paddingBounds();
|
||||
if (defBounds.isEmpty())
|
||||
defBounds = m_docPref->grid.bounds();
|
||||
onChangeRectangle(defBounds);
|
||||
|
||||
gfx::Size defPaddingBounds = m_docPref->importSpriteSheet.paddingBounds();
|
||||
if (defPaddingBounds.w < 0 || defPaddingBounds.h < 0)
|
||||
defPaddingBounds = gfx::Size(0, 0);
|
||||
onChangePadding(defPaddingBounds);
|
||||
|
||||
paddingEnabled()->setSelected(m_docPref->importSpriteSheet.paddingEnabled());
|
||||
partialTiles()->setSelected(m_docPref->importSpriteSheet.partialTiles());
|
||||
onEntriesChange();
|
||||
onPaddingEnabledChange();
|
||||
}
|
||||
}
|
||||
|
||||
@ -314,6 +333,32 @@ private:
|
||||
}
|
||||
}
|
||||
|
||||
void onPaddingEnabledChange() {
|
||||
const bool state = paddingEnabled()->isSelected();
|
||||
horizontalPaddingLabel()->setVisible(state);
|
||||
horizontalPadding()->setVisible(state);
|
||||
verticalPaddingLabel()->setVisible(state);
|
||||
verticalPadding()->setVisible(state);
|
||||
if (m_docPref) {
|
||||
if (state)
|
||||
onChangePadding(m_docPref->importSpriteSheet.paddingBounds());
|
||||
else {
|
||||
m_docPref->importSpriteSheet.paddingBounds(m_padding);
|
||||
onChangePadding(gfx::Size(0, 0));
|
||||
}
|
||||
}
|
||||
|
||||
onEntriesChange();
|
||||
resize();
|
||||
}
|
||||
|
||||
void resize() {
|
||||
gfx::Size reqSize = sizeHint();
|
||||
moveWindow(gfx::Rect(origin(), reqSize));
|
||||
layout();
|
||||
invalidate();
|
||||
}
|
||||
|
||||
Context* m_context;
|
||||
Doc* m_document;
|
||||
Editor* m_editor;
|
||||
@ -354,6 +399,7 @@ void ImportSpriteSheetCommand::onExecute(Context* context)
|
||||
gfx::Rect frameBounds = window.frameBounds();
|
||||
gfx::Size padThickness = window.paddingThickness();
|
||||
bool partialTiles = window.partialTilesValue();
|
||||
bool paddingEnable = window.paddingEnabledValue();
|
||||
auto sheetType = window.sheetTypeValue();
|
||||
|
||||
ASSERT(document);
|
||||
@ -466,6 +512,7 @@ void ImportSpriteSheetCommand::onExecute(Context* context)
|
||||
docPref->importSpriteSheet.bounds(frameBounds);
|
||||
docPref->importSpriteSheet.partialTiles(partialTiles);
|
||||
docPref->importSpriteSheet.paddingBounds(padThickness);
|
||||
docPref->importSpriteSheet.paddingEnabled(paddingEnable);
|
||||
}
|
||||
}
|
||||
catch (...) {
|
||||
|
@ -79,6 +79,12 @@ gfx::Rect SelectBoxState::getBoxBounds() const
|
||||
|
||||
void SelectBoxState::setBoxBounds(const gfx::Rect& box)
|
||||
{
|
||||
if (hasFlag(Flags::PaddingRulers)) {
|
||||
int w = m_rulers[PV].position() - m_rulers[V2].position();
|
||||
int h = m_rulers[PH].position() - m_rulers[H2].position();
|
||||
m_rulers[PH] = Ruler(Ruler::Horizontal, m_rulers[H2].position() + h);
|
||||
m_rulers[PV] = Ruler(Ruler::Vertical, m_rulers[V2].position() + w);
|
||||
}
|
||||
m_rulers[H1] = Ruler(Ruler::Horizontal, box.y);
|
||||
m_rulers[H2] = Ruler(Ruler::Horizontal, box.y+box.h);
|
||||
m_rulers[V1] = Ruler(Ruler::Vertical, box.x);
|
||||
@ -186,12 +192,20 @@ bool SelectBoxState::onMouseMove(Editor* editor, MouseMessage* msg)
|
||||
|
||||
switch (ruler.orientation()) {
|
||||
case Ruler::Horizontal:
|
||||
if (hasFlag(Flags::PaddingRulers) && (i == H2)) {
|
||||
int pad = m_rulers[PH].position() - m_rulers[H2].position();
|
||||
m_rulers[PH].setPosition(start.position() + delta.y + pad);
|
||||
}
|
||||
ruler.setPosition(start.position() + delta.y);
|
||||
if (msg->modifiers() == os::kKeyShiftModifier)
|
||||
oppRuler.setPosition(editor->sprite()->height()
|
||||
- start.position() - delta.y);
|
||||
break;
|
||||
case Ruler::Vertical:
|
||||
if (hasFlag(Flags::PaddingRulers) && (i == V2)) {
|
||||
int pad = m_rulers[PV].position() - m_rulers[V2].position();
|
||||
m_rulers[PV].setPosition(start.position() + delta.x + pad);
|
||||
}
|
||||
ruler.setPosition(start.position() + delta.x);
|
||||
if (msg->modifiers() == os::kKeyShiftModifier)
|
||||
oppRuler.setPosition(editor->sprite()->width()
|
||||
|
Loading…
Reference in New Issue
Block a user