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