mirror of
https://github.com/aseprite/aseprite.git
synced 2025-04-10 12:44:53 +00:00
Add --list-slices CLI option
This commit is contained in:
parent
9f76136876
commit
347ccfbb78
@ -332,6 +332,7 @@
|
|||||||
<option id="frame_tag" type="std::string" />
|
<option id="frame_tag" type="std::string" />
|
||||||
<option id="list_layers" type="bool" default="true" />
|
<option id="list_layers" type="bool" default="true" />
|
||||||
<option id="list_frame_tags" type="bool" default="true" />
|
<option id="list_frame_tags" type="bool" default="true" />
|
||||||
|
<option id="list_slices" type="bool" default="true" />
|
||||||
</section>
|
</section>
|
||||||
<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" />
|
||||||
|
@ -96,6 +96,7 @@ json_data_array = Array
|
|||||||
meta = Meta:
|
meta = Meta:
|
||||||
meta_layers = Layers
|
meta_layers = Layers
|
||||||
meta_frame_tags = Frame Tags
|
meta_frame_tags = Frame Tags
|
||||||
|
meta_slices = Slices
|
||||||
open_sprite_sheet = Open generated sprite sheet
|
open_sprite_sheet = Open generated sprite sheet
|
||||||
export = &Export
|
export = &Export
|
||||||
cancel = &Cancel
|
cancel = &Cancel
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!-- Aseprite -->
|
<!-- Aseprite -->
|
||||||
<!-- Copyright (C) 2001-2016 by David Capello -->
|
<!-- Copyright (C) 2001-2017 by David Capello -->
|
||||||
<gui>
|
<gui>
|
||||||
<window id="export_sprite_sheet" text="@.title">
|
<window id="export_sprite_sheet" text="@.title">
|
||||||
<grid columns="4">
|
<grid columns="4">
|
||||||
@ -56,6 +56,7 @@
|
|||||||
<label text="@.meta" />
|
<label text="@.meta" />
|
||||||
<check id="list_layers" text="@.meta_layers" />
|
<check id="list_layers" text="@.meta_layers" />
|
||||||
<check id="list_tags" text="@.meta_frame_tags" />
|
<check id="list_tags" text="@.meta_frame_tags" />
|
||||||
|
<check id="list_slices" text="@.meta_slices" />
|
||||||
</hbox>
|
</hbox>
|
||||||
|
|
||||||
<check id="open_generated" text="@.open_sprite_sheet" cell_hspan="4" />
|
<check id="open_generated" text="@.open_sprite_sheet" cell_hspan="4" />
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (C) 2001-2016 David Capello
|
// Copyright (C) 2001-2017 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
// the End-User License Agreement for Aseprite.
|
// the End-User License Agreement for Aseprite.
|
||||||
@ -60,7 +60,8 @@ AppOptions::AppOptions(int argc, const char* argv[])
|
|||||||
, m_script(m_po.add("script").requiresValue("<filename>").description("Execute a specific script"))
|
, m_script(m_po.add("script").requiresValue("<filename>").description("Execute a specific script"))
|
||||||
#endif
|
#endif
|
||||||
, m_listLayers(m_po.add("list-layers").description("List layers of the next given sprite\nor include layers in JSON data"))
|
, m_listLayers(m_po.add("list-layers").description("List layers of the next given sprite\nor include layers in JSON data"))
|
||||||
, m_listTags(m_po.add("list-tags").description("List tags of the next given sprite sprite\nor include frame tags in JSON data"))
|
, m_listTags(m_po.add("list-tags").description("List tags of the next given sprite\nor include frame tags in JSON data"))
|
||||||
|
, m_listSlices(m_po.add("list-slices").description("List slices of the next given sprite\nor include slices in JSON data"))
|
||||||
, m_oneFrame(m_po.add("oneframe").description("Load just the first frame"))
|
, m_oneFrame(m_po.add("oneframe").description("Load just the first frame"))
|
||||||
, m_verbose(m_po.add("verbose").mnemonic('v').description("Explain what is being done"))
|
, m_verbose(m_po.add("verbose").mnemonic('v').description("Explain what is being done"))
|
||||||
, m_debug(m_po.add("debug").description("Extreme verbose mode and\ncopy log to desktop"))
|
, m_debug(m_po.add("debug").description("Extreme verbose mode and\ncopy log to desktop"))
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (C) 2001-2016 David Capello
|
// Copyright (C) 2001-2017 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
// the End-User License Agreement for Aseprite.
|
// the End-User License Agreement for Aseprite.
|
||||||
@ -75,6 +75,7 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
const Option& listLayers() const { return m_listLayers; }
|
const Option& listLayers() const { return m_listLayers; }
|
||||||
const Option& listTags() const { return m_listTags; }
|
const Option& listTags() const { return m_listTags; }
|
||||||
|
const Option& listSlices() const { return m_listSlices; }
|
||||||
const Option& oneFrame() const { return m_oneFrame; }
|
const Option& oneFrame() const { return m_oneFrame; }
|
||||||
|
|
||||||
bool hasExporterParams() const;
|
bool hasExporterParams() const;
|
||||||
@ -124,6 +125,7 @@ private:
|
|||||||
#endif
|
#endif
|
||||||
Option& m_listLayers;
|
Option& m_listLayers;
|
||||||
Option& m_listTags;
|
Option& m_listTags;
|
||||||
|
Option& m_listSlices;
|
||||||
Option& m_oneFrame;
|
Option& m_oneFrame;
|
||||||
|
|
||||||
Option& m_verbose;
|
Option& m_verbose;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (C) 2016 David Capello
|
// Copyright (C) 2016-2017 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
// the End-User License Agreement for Aseprite.
|
// the End-User License Agreement for Aseprite.
|
||||||
@ -28,6 +28,7 @@ CliOpenFile::CliOpenFile()
|
|||||||
allLayers = false;
|
allLayers = false;
|
||||||
listLayers = false;
|
listLayers = false;
|
||||||
listTags = false;
|
listTags = false;
|
||||||
|
listSlices = false;
|
||||||
ignoreEmpty = false;
|
ignoreEmpty = false;
|
||||||
trim = false;
|
trim = false;
|
||||||
oneFrame = false;
|
oneFrame = false;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (C) 2016 David Capello
|
// Copyright (C) 2016-2017 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
// the End-User License Agreement for Aseprite.
|
// the End-User License Agreement for Aseprite.
|
||||||
@ -32,6 +32,7 @@ namespace app {
|
|||||||
bool allLayers;
|
bool allLayers;
|
||||||
bool listLayers;
|
bool listLayers;
|
||||||
bool listTags;
|
bool listTags;
|
||||||
|
bool listSlices;
|
||||||
bool ignoreEmpty;
|
bool ignoreEmpty;
|
||||||
bool trim;
|
bool trim;
|
||||||
bool oneFrame;
|
bool oneFrame;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (C) 2001-2016 David Capello
|
// Copyright (C) 2001-2017 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
// the End-User License Agreement for Aseprite.
|
// the End-User License Agreement for Aseprite.
|
||||||
@ -375,6 +375,12 @@ void CliProcessor::process()
|
|||||||
if (m_exporter)
|
if (m_exporter)
|
||||||
m_exporter->setListFrameTags(true);
|
m_exporter->setListFrameTags(true);
|
||||||
}
|
}
|
||||||
|
// --list-slices
|
||||||
|
else if (opt == &m_options.listSlices()) {
|
||||||
|
cof.listSlices = true;
|
||||||
|
if (m_exporter)
|
||||||
|
m_exporter->setListSlices(true);
|
||||||
|
}
|
||||||
// --oneframe
|
// --oneframe
|
||||||
else if (opt == &m_options.oneFrame()) {
|
else if (opt == &m_options.oneFrame()) {
|
||||||
cof.oneFrame = true;
|
cof.oneFrame = true;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (C) 2016 David Capello
|
// Copyright (C) 2016-2017 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
// the End-User License Agreement for Aseprite.
|
// the End-User License Agreement for Aseprite.
|
||||||
@ -23,6 +23,7 @@
|
|||||||
#include "doc/frame_tag.h"
|
#include "doc/frame_tag.h"
|
||||||
#include "doc/layer.h"
|
#include "doc/layer.h"
|
||||||
#include "doc/palette.h"
|
#include "doc/palette.h"
|
||||||
|
#include "doc/slice.h"
|
||||||
#include "doc/sprite.h"
|
#include "doc/sprite.h"
|
||||||
|
|
||||||
#ifdef ENABLE_SCRIPTING
|
#ifdef ENABLE_SCRIPTING
|
||||||
@ -65,6 +66,11 @@ void DefaultCliDelegate::afterOpenFile(const CliOpenFile& cof)
|
|||||||
for (doc::FrameTag* tag : cof.document->sprite()->frameTags())
|
for (doc::FrameTag* tag : cof.document->sprite()->frameTags())
|
||||||
std::cout << tag->name() << "\n";
|
std::cout << tag->name() << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cof.listSlices) {
|
||||||
|
for (doc::Slice* slice : cof.document->sprite()->slices())
|
||||||
|
std::cout << slice->name() << "\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DefaultCliDelegate::saveFile(const CliOpenFile& cof)
|
void DefaultCliDelegate::saveFile(const CliOpenFile& cof)
|
||||||
|
@ -66,6 +66,9 @@ void PreviewCliDelegate::afterOpenFile(const CliOpenFile& cof)
|
|||||||
if (cof.listTags)
|
if (cof.listTags)
|
||||||
std::cout << " - List tags\n";
|
std::cout << " - List tags\n";
|
||||||
|
|
||||||
|
if (cof.listSlices)
|
||||||
|
std::cout << " - List slices\n";
|
||||||
|
|
||||||
if (cof.oneFrame)
|
if (cof.oneFrame)
|
||||||
std::cout << " - One frame\n";
|
std::cout << " - One frame\n";
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (C) 2001-2016 David Capello
|
// Copyright (C) 2001-2017 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
// the End-User License Agreement for Aseprite.
|
// the End-User License Agreement for Aseprite.
|
||||||
@ -231,6 +231,7 @@ public:
|
|||||||
dataFormat()->setSelectedItemIndex(int(m_docPref.spriteSheet.dataFormat()));
|
dataFormat()->setSelectedItemIndex(int(m_docPref.spriteSheet.dataFormat()));
|
||||||
listLayers()->setSelected(m_docPref.spriteSheet.listLayers());
|
listLayers()->setSelected(m_docPref.spriteSheet.listLayers());
|
||||||
listTags()->setSelected(m_docPref.spriteSheet.listFrameTags());
|
listTags()->setSelected(m_docPref.spriteSheet.listFrameTags());
|
||||||
|
listSlices()->setSelected(m_docPref.spriteSheet.listSlices());
|
||||||
updateDataFields();
|
updateDataFields();
|
||||||
|
|
||||||
std::string base = site.document()->filename();
|
std::string base = site.document()->filename();
|
||||||
@ -373,6 +374,10 @@ public:
|
|||||||
return listTags()->isSelected();
|
return listTags()->isSelected();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool listSlicesValue() const {
|
||||||
|
return listSlices()->isSelected();
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void onExport() {
|
void onExport() {
|
||||||
@ -633,6 +638,7 @@ void ExportSpriteSheetCommand::onExecute(Context* context)
|
|||||||
docPref.spriteSheet.frameTag(window.frameTagValue());
|
docPref.spriteSheet.frameTag(window.frameTagValue());
|
||||||
docPref.spriteSheet.listLayers(window.listLayersValue());
|
docPref.spriteSheet.listLayers(window.listLayersValue());
|
||||||
docPref.spriteSheet.listFrameTags(window.listFrameTagsValue());
|
docPref.spriteSheet.listFrameTags(window.listFrameTagsValue());
|
||||||
|
docPref.spriteSheet.listSlices(window.listSlicesValue());
|
||||||
|
|
||||||
// Default preferences for future sprites
|
// Default preferences for future sprites
|
||||||
DocumentPreferences& defPref(Preferences::instance().document(nullptr));
|
DocumentPreferences& defPref(Preferences::instance().document(nullptr));
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (C) 2001-2016 David Capello
|
// Copyright (C) 2001-2017 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
// the End-User License Agreement for Aseprite.
|
// the End-User License Agreement for Aseprite.
|
||||||
@ -34,6 +34,7 @@
|
|||||||
#include "doc/primitives.h"
|
#include "doc/primitives.h"
|
||||||
#include "doc/selected_frames.h"
|
#include "doc/selected_frames.h"
|
||||||
#include "doc/selected_layers.h"
|
#include "doc/selected_layers.h"
|
||||||
|
#include "doc/slice.h"
|
||||||
#include "doc/sprite.h"
|
#include "doc/sprite.h"
|
||||||
#include "gfx/packing_rects.h"
|
#include "gfx/packing_rects.h"
|
||||||
#include "gfx/size.h"
|
#include "gfx/size.h"
|
||||||
@ -403,6 +404,7 @@ DocumentExporter::DocumentExporter()
|
|||||||
, m_trimCels(false)
|
, m_trimCels(false)
|
||||||
, m_listFrameTags(false)
|
, m_listFrameTags(false)
|
||||||
, m_listLayers(false)
|
, m_listLayers(false)
|
||||||
|
, m_listSlices(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -889,6 +891,70 @@ void DocumentExporter::createDataFile(const Samples& samples, std::ostream& os,
|
|||||||
os << "\n ]";
|
os << "\n ]";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// meta.slices
|
||||||
|
if (m_listSlices) {
|
||||||
|
os << ",\n"
|
||||||
|
<< " \"slices\": [";
|
||||||
|
|
||||||
|
bool firstSlice = true;
|
||||||
|
for (auto& item : m_documents) {
|
||||||
|
Document* doc = item.doc;
|
||||||
|
Sprite* sprite = doc->sprite();
|
||||||
|
|
||||||
|
// TODO add possibility to export some slices
|
||||||
|
|
||||||
|
for (Slice* slice : sprite->slices()) {
|
||||||
|
if (firstSlice)
|
||||||
|
firstSlice = false;
|
||||||
|
else
|
||||||
|
os << ",";
|
||||||
|
os << "\n { \"name\": \"" << escape_for_json(slice->name()) << "\""
|
||||||
|
<< slice->userData();
|
||||||
|
|
||||||
|
// Keys
|
||||||
|
if (!slice->empty()) {
|
||||||
|
bool firstKey = true;
|
||||||
|
|
||||||
|
os << ", \"keys\": [";
|
||||||
|
for (const auto& key : *slice) {
|
||||||
|
if (firstKey)
|
||||||
|
firstKey = false;
|
||||||
|
else
|
||||||
|
os << ", ";
|
||||||
|
|
||||||
|
const SliceKey* sliceKey = key.value();
|
||||||
|
|
||||||
|
os << "{ \"frame\": " << key.frame() << ", "
|
||||||
|
<< "\"bounds\": {"
|
||||||
|
<< "\"x\": " << sliceKey->bounds().x << ", "
|
||||||
|
<< "\"y\": " << sliceKey->bounds().y << ", "
|
||||||
|
<< "\"w\": " << sliceKey->bounds().w << ", "
|
||||||
|
<< "\"h\": " << sliceKey->bounds().h << " }";
|
||||||
|
|
||||||
|
if (!sliceKey->center().isEmpty()) {
|
||||||
|
os << ", \"center\": {"
|
||||||
|
<< "\"x\": " << sliceKey->center().x << ", "
|
||||||
|
<< "\"y\": " << sliceKey->center().y << ", "
|
||||||
|
<< "\"w\": " << sliceKey->center().w << ", "
|
||||||
|
<< "\"h\": " << sliceKey->center().h << " }";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sliceKey->hasPivot()) {
|
||||||
|
os << ", \"pivot\": {"
|
||||||
|
<< "\"x\": " << sliceKey->pivot().x << ", "
|
||||||
|
<< "\"y\": " << sliceKey->pivot().y << " }";
|
||||||
|
}
|
||||||
|
|
||||||
|
os << " }";
|
||||||
|
}
|
||||||
|
os << "]";
|
||||||
|
}
|
||||||
|
os << " }";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
os << "\n ]";
|
||||||
|
}
|
||||||
|
|
||||||
os << "\n }\n"
|
os << "\n }\n"
|
||||||
<< "}\n";
|
<< "}\n";
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (C) 2001-2016 David Capello
|
// Copyright (C) 2001-2017 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
// the End-User License Agreement for Aseprite.
|
// the End-User License Agreement for Aseprite.
|
||||||
@ -70,6 +70,7 @@ namespace app {
|
|||||||
void setFilenameFormat(const std::string& format) { m_filenameFormat = format; }
|
void setFilenameFormat(const std::string& format) { m_filenameFormat = format; }
|
||||||
void setListFrameTags(bool value) { m_listFrameTags = value; }
|
void setListFrameTags(bool value) { m_listFrameTags = value; }
|
||||||
void setListLayers(bool value) { m_listLayers = value; }
|
void setListLayers(bool value) { m_listLayers = value; }
|
||||||
|
void setListSlices(bool value) { m_listSlices = value; }
|
||||||
|
|
||||||
void addDocument(Document* document,
|
void addDocument(Document* document,
|
||||||
doc::FrameTag* tag,
|
doc::FrameTag* tag,
|
||||||
@ -136,6 +137,7 @@ namespace app {
|
|||||||
doc::ImageBufferPtr m_sampleRenderBuf;
|
doc::ImageBufferPtr m_sampleRenderBuf;
|
||||||
bool m_listFrameTags;
|
bool m_listFrameTags;
|
||||||
bool m_listLayers;
|
bool m_listLayers;
|
||||||
|
bool m_listSlices;
|
||||||
|
|
||||||
// Displacement for each tag from/to frames in case we export
|
// Displacement for each tag from/to frames in case we export
|
||||||
// them. It's used in case we trim frames outside tags and they
|
// them. It's used in case we trim frames outside tags and they
|
||||||
|
@ -1760,12 +1760,8 @@ static void ase_file_write_slices_chunk(FILE* f, ASE_FrameHeader* frame_header,
|
|||||||
int flags = 0;
|
int flags = 0;
|
||||||
for (auto key : range) {
|
for (auto key : range) {
|
||||||
if (key) {
|
if (key) {
|
||||||
if (!key->center().isEmpty()) {
|
if (key->hasCenter()) flags |= ASE_SLICE_FLAG_HAS_CENTER_BOUNDS;
|
||||||
flags |= ASE_SLICE_FLAG_HAS_CENTER_BOUNDS;
|
if (key->hasPivot()) flags |= ASE_SLICE_FLAG_HAS_PIVOT_POINT;
|
||||||
}
|
|
||||||
if (key->hasPivot()) {
|
|
||||||
flags |= ASE_SLICE_FLAG_HAS_PIVOT_POINT;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1785,7 +1781,7 @@ static void ase_file_write_slices_chunk(FILE* f, ASE_FrameHeader* frame_header,
|
|||||||
fputl(key ? key->bounds().h: 0, f);
|
fputl(key ? key->bounds().h: 0, f);
|
||||||
|
|
||||||
if (flags & ASE_SLICE_FLAG_HAS_CENTER_BOUNDS) {
|
if (flags & ASE_SLICE_FLAG_HAS_CENTER_BOUNDS) {
|
||||||
if (key && !key->center().isEmpty()) {
|
if (key && key->hasCenter()) {
|
||||||
fputl(key->center().x, f);
|
fputl(key->center().x, f);
|
||||||
fputl(key->center().y, f);
|
fputl(key->center().y, f);
|
||||||
fputl(key->center().w, f);
|
fputl(key->center().w, f);
|
||||||
@ -1794,8 +1790,8 @@ static void ase_file_write_slices_chunk(FILE* f, ASE_FrameHeader* frame_header,
|
|||||||
else {
|
else {
|
||||||
fputl(0, f);
|
fputl(0, f);
|
||||||
fputl(0, f);
|
fputl(0, f);
|
||||||
fputl(key ? key->bounds().w: 0, f);
|
fputl(0, f);
|
||||||
fputl(key ? key->bounds().h: 0, f);
|
fputl(0, f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ void updateXmlPartFromSliceKey(const SliceKey* key, TiXmlElement* xmlPart)
|
|||||||
{
|
{
|
||||||
xmlPart->SetAttribute("x", key->bounds().x);
|
xmlPart->SetAttribute("x", key->bounds().x);
|
||||||
xmlPart->SetAttribute("y", key->bounds().y);
|
xmlPart->SetAttribute("y", key->bounds().y);
|
||||||
if (key->center().isEmpty()) {
|
if (!key->hasCenter()) {
|
||||||
xmlPart->SetAttribute("w", key->bounds().w);
|
xmlPart->SetAttribute("w", key->bounds().w);
|
||||||
xmlPart->SetAttribute("h", key->bounds().h);
|
xmlPart->SetAttribute("h", key->bounds().h);
|
||||||
if (xmlPart->Attribute("w1")) xmlPart->RemoveAttribute("w1");
|
if (xmlPart->Attribute("w1")) xmlPart->RemoveAttribute("w1");
|
||||||
|
@ -982,7 +982,7 @@ void Editor::drawSlices(ui::Graphics* g)
|
|||||||
.offset(-bounds().origin());
|
.offset(-bounds().origin());
|
||||||
|
|
||||||
// Center slices
|
// Center slices
|
||||||
if (!key->center().isEmpty()) {
|
if (key->hasCenter()) {
|
||||||
gfx::Rect in =
|
gfx::Rect in =
|
||||||
editorToScreen(gfx::Rect(key->center()).offset(key->bounds().origin()))
|
editorToScreen(gfx::Rect(key->center()).offset(key->bounds().origin()))
|
||||||
.offset(-bounds().origin());
|
.offset(-bounds().origin());
|
||||||
|
@ -42,7 +42,7 @@ SliceWindow::SliceWindow(const doc::Sprite* sprite,
|
|||||||
center()->Click.connect(base::Bind<void>(&SliceWindow::onCenterChange, this));
|
center()->Click.connect(base::Bind<void>(&SliceWindow::onCenterChange, this));
|
||||||
pivot()->Click.connect(base::Bind<void>(&SliceWindow::onPivotChange, this));
|
pivot()->Click.connect(base::Bind<void>(&SliceWindow::onPivotChange, this));
|
||||||
|
|
||||||
if (!key->center().isEmpty()) {
|
if (key->hasCenter()) {
|
||||||
center()->setSelected(true);
|
center()->setSelected(true);
|
||||||
centerX()->setTextf("%d", key->center().x);
|
centerX()->setTextf("%d", key->center().x);
|
||||||
centerY()->setTextf("%d", key->center().y);
|
centerY()->setTextf("%d", key->center().y);
|
||||||
|
@ -29,6 +29,7 @@ namespace doc {
|
|||||||
const gfx::Point& pivot = SliceKey::NoPivot);
|
const gfx::Point& pivot = SliceKey::NoPivot);
|
||||||
|
|
||||||
bool isEmpty() const { return m_bounds.isEmpty(); }
|
bool isEmpty() const { return m_bounds.isEmpty(); }
|
||||||
|
bool hasCenter() const { return !m_center.isEmpty(); }
|
||||||
bool hasPivot() const { return m_pivot != NoPivot; }
|
bool hasPivot() const { return m_pivot != NoPivot; }
|
||||||
|
|
||||||
const gfx::Rect& bounds() const { return m_bounds; }
|
const gfx::Rect& bounds() const { return m_bounds; }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user