mirror of
https://github.com/aseprite/aseprite.git
synced 2025-02-03 20:54:01 +00:00
Minor refactor to doc::Layer flags
This commit is contained in:
parent
9bcc552129
commit
cc889f2b2f
@ -115,10 +115,10 @@ Layer Chunk (0x2004)
|
|||||||
entire layers layout:
|
entire layers layout:
|
||||||
|
|
||||||
WORD Flags:
|
WORD Flags:
|
||||||
LAYER_IS_READABLE = 0x0001
|
1 = Visible
|
||||||
LAYER_IS_WRITABLE = 0x0002
|
2 = Editable
|
||||||
LAYER_IS_LOCKMOVE = 0x0004
|
4 = Lock movement
|
||||||
LAYER_IS_BACKGROUND = 0x0008
|
8 = Background
|
||||||
WORD Layer type (0=normal (image) layer, 1=layer set)
|
WORD Layer type (0=normal (image) layer, 1=layer set)
|
||||||
WORD Layer child level (see NOTE.1)
|
WORD Layer child level (see NOTE.1)
|
||||||
WORD Default layer width in pixels (ignored)
|
WORD Default layer width in pixels (ignored)
|
||||||
|
@ -278,7 +278,7 @@ void App::initialize(int argc, const char* argv[])
|
|||||||
// For each layer, hide other ones and save the sprite.
|
// For each layer, hide other ones and save the sprite.
|
||||||
for (Layer* show : layers) {
|
for (Layer* show : layers) {
|
||||||
for (Layer* hide : layers)
|
for (Layer* hide : layers)
|
||||||
hide->setReadable(hide == show);
|
hide->setVisible(hide == show);
|
||||||
|
|
||||||
std::string frameStr;
|
std::string frameStr;
|
||||||
if (doc->sprite()->totalFrames() > FrameNumber(1))
|
if (doc->sprite()->totalFrames() > FrameNumber(1))
|
||||||
@ -303,7 +303,7 @@ void App::initialize(int argc, const char* argv[])
|
|||||||
// Show only one layer
|
// Show only one layer
|
||||||
if (!importLayerSaveAs.empty()) {
|
if (!importLayerSaveAs.empty()) {
|
||||||
for (Layer* layer : layers)
|
for (Layer* layer : layers)
|
||||||
layer->setReadable(layer->name() == importLayerSaveAs);
|
layer->setVisible(layer->name() == importLayerSaveAs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static_cast<SaveFileBaseCommand*>(command)->setFilename(value.value());
|
static_cast<SaveFileBaseCommand*>(command)->setFilename(value.value());
|
||||||
|
@ -54,8 +54,8 @@ bool BackgroundFromLayerCommand::onEnabled(Context* context)
|
|||||||
{
|
{
|
||||||
return
|
return
|
||||||
context->checkFlags(ContextFlags::ActiveDocumentIsWritable |
|
context->checkFlags(ContextFlags::ActiveDocumentIsWritable |
|
||||||
ContextFlags::ActiveLayerIsReadable |
|
ContextFlags::ActiveLayerIsVisible |
|
||||||
ContextFlags::ActiveLayerIsWritable |
|
ContextFlags::ActiveLayerIsEditable |
|
||||||
ContextFlags::HasActiveImage) &&
|
ContextFlags::HasActiveImage) &&
|
||||||
// Doesn't have a background layer
|
// Doesn't have a background layer
|
||||||
!context->checkFlags(ContextFlags::HasBackgroundLayer);
|
!context->checkFlags(ContextFlags::HasBackgroundLayer);
|
||||||
|
@ -81,8 +81,8 @@ void CelPropertiesCommand::onExecute(Context* context)
|
|||||||
// Mini look for the opacity slider
|
// Mini look for the opacity slider
|
||||||
setup_mini_look(slider_opacity);
|
setup_mini_look(slider_opacity);
|
||||||
|
|
||||||
/* if the layer isn't writable */
|
// If the layer isn't writable
|
||||||
if (!layer->isWritable()) {
|
if (!layer->isEditable()) {
|
||||||
button_ok->setText("Locked");
|
button_ok->setText("Locked");
|
||||||
button_ok->setEnabled(false);
|
button_ok->setEnabled(false);
|
||||||
}
|
}
|
||||||
|
@ -57,8 +57,8 @@ ClearCommand::ClearCommand()
|
|||||||
bool ClearCommand::onEnabled(Context* context)
|
bool ClearCommand::onEnabled(Context* context)
|
||||||
{
|
{
|
||||||
return context->checkFlags(ContextFlags::ActiveDocumentIsWritable |
|
return context->checkFlags(ContextFlags::ActiveDocumentIsWritable |
|
||||||
ContextFlags::ActiveLayerIsReadable |
|
ContextFlags::ActiveLayerIsVisible |
|
||||||
ContextFlags::ActiveLayerIsWritable |
|
ContextFlags::ActiveLayerIsEditable |
|
||||||
ContextFlags::ActiveLayerIsImage);
|
ContextFlags::ActiveLayerIsImage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,8 +54,8 @@ ClearCelCommand::ClearCelCommand()
|
|||||||
bool ClearCelCommand::onEnabled(Context* context)
|
bool ClearCelCommand::onEnabled(Context* context)
|
||||||
{
|
{
|
||||||
return context->checkFlags(ContextFlags::ActiveDocumentIsWritable |
|
return context->checkFlags(ContextFlags::ActiveDocumentIsWritable |
|
||||||
ContextFlags::ActiveLayerIsReadable |
|
ContextFlags::ActiveLayerIsVisible |
|
||||||
ContextFlags::ActiveLayerIsWritable |
|
ContextFlags::ActiveLayerIsEditable |
|
||||||
ContextFlags::ActiveLayerIsImage |
|
ContextFlags::ActiveLayerIsImage |
|
||||||
ContextFlags::HasActiveCel);
|
ContextFlags::HasActiveCel);
|
||||||
}
|
}
|
||||||
|
@ -51,8 +51,8 @@ CutCommand::CutCommand()
|
|||||||
bool CutCommand::onEnabled(Context* context)
|
bool CutCommand::onEnabled(Context* context)
|
||||||
{
|
{
|
||||||
return context->checkFlags(ContextFlags::ActiveDocumentIsWritable |
|
return context->checkFlags(ContextFlags::ActiveDocumentIsWritable |
|
||||||
ContextFlags::ActiveLayerIsReadable |
|
ContextFlags::ActiveLayerIsVisible |
|
||||||
ContextFlags::ActiveLayerIsWritable |
|
ContextFlags::ActiveLayerIsEditable |
|
||||||
ContextFlags::HasVisibleMask |
|
ContextFlags::HasVisibleMask |
|
||||||
ContextFlags::HasActiveImage);
|
ContextFlags::HasActiveImage);
|
||||||
}
|
}
|
||||||
|
@ -53,8 +53,8 @@ bool LayerFromBackgroundCommand::onEnabled(Context* context)
|
|||||||
return context->checkFlags(ContextFlags::ActiveDocumentIsWritable |
|
return context->checkFlags(ContextFlags::ActiveDocumentIsWritable |
|
||||||
ContextFlags::HasActiveSprite |
|
ContextFlags::HasActiveSprite |
|
||||||
ContextFlags::HasActiveLayer |
|
ContextFlags::HasActiveLayer |
|
||||||
ContextFlags::ActiveLayerIsReadable |
|
ContextFlags::ActiveLayerIsVisible |
|
||||||
ContextFlags::ActiveLayerIsWritable |
|
ContextFlags::ActiveLayerIsEditable |
|
||||||
ContextFlags::ActiveLayerIsImage |
|
ContextFlags::ActiveLayerIsImage |
|
||||||
ContextFlags::ActiveLayerIsBackground);
|
ContextFlags::ActiveLayerIsBackground);
|
||||||
}
|
}
|
||||||
|
@ -50,8 +50,8 @@ bool PasteCommand::onEnabled(Context* context)
|
|||||||
return
|
return
|
||||||
(clipboard::get_current_format() == clipboard::ClipboardImage &&
|
(clipboard::get_current_format() == clipboard::ClipboardImage &&
|
||||||
context->checkFlags(ContextFlags::ActiveDocumentIsWritable |
|
context->checkFlags(ContextFlags::ActiveDocumentIsWritable |
|
||||||
ContextFlags::ActiveLayerIsReadable |
|
ContextFlags::ActiveLayerIsVisible |
|
||||||
ContextFlags::ActiveLayerIsWritable |
|
ContextFlags::ActiveLayerIsEditable |
|
||||||
ContextFlags::ActiveLayerIsImage)) ||
|
ContextFlags::ActiveLayerIsImage)) ||
|
||||||
(clipboard::get_current_format() == clipboard::ClipboardDocumentRange &&
|
(clipboard::get_current_format() == clipboard::ClipboardDocumentRange &&
|
||||||
context->checkFlags(ContextFlags::ActiveDocumentIsWritable));
|
context->checkFlags(ContextFlags::ActiveDocumentIsWritable));
|
||||||
|
@ -58,8 +58,8 @@ bool RemoveLayerCommand::onEnabled(Context* context)
|
|||||||
return context->checkFlags(ContextFlags::ActiveDocumentIsWritable |
|
return context->checkFlags(ContextFlags::ActiveDocumentIsWritable |
|
||||||
ContextFlags::HasActiveSprite |
|
ContextFlags::HasActiveSprite |
|
||||||
ContextFlags::HasActiveLayer |
|
ContextFlags::HasActiveLayer |
|
||||||
ContextFlags::ActiveLayerIsReadable |
|
ContextFlags::ActiveLayerIsVisible |
|
||||||
ContextFlags::ActiveLayerIsWritable);
|
ContextFlags::ActiveLayerIsEditable);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RemoveLayerCommand::onExecute(Context* context)
|
void RemoveLayerCommand::onExecute(Context* context)
|
||||||
|
@ -67,11 +67,11 @@ void ContextFlags::update(Context* context)
|
|||||||
if (layer->isBackground())
|
if (layer->isBackground())
|
||||||
m_flags |= ActiveLayerIsBackground;
|
m_flags |= ActiveLayerIsBackground;
|
||||||
|
|
||||||
if (layer->isReadable())
|
if (layer->isVisible())
|
||||||
m_flags |= ActiveLayerIsReadable;
|
m_flags |= ActiveLayerIsVisible;
|
||||||
|
|
||||||
if (layer->isWritable())
|
if (layer->isEditable())
|
||||||
m_flags |= ActiveLayerIsWritable;
|
m_flags |= ActiveLayerIsEditable;
|
||||||
|
|
||||||
if (layer->isImage()) {
|
if (layer->isImage()) {
|
||||||
m_flags |= ActiveLayerIsImage;
|
m_flags |= ActiveLayerIsImage;
|
||||||
|
@ -38,8 +38,8 @@ namespace app {
|
|||||||
ActiveDocumentIsWritable = 1 << 8,
|
ActiveDocumentIsWritable = 1 << 8,
|
||||||
ActiveLayerIsImage = 1 << 9,
|
ActiveLayerIsImage = 1 << 9,
|
||||||
ActiveLayerIsBackground = 1 << 10,
|
ActiveLayerIsBackground = 1 << 10,
|
||||||
ActiveLayerIsReadable = 1 << 11,
|
ActiveLayerIsVisible = 1 << 11,
|
||||||
ActiveLayerIsWritable = 1 << 12,
|
ActiveLayerIsEditable = 1 << 12,
|
||||||
};
|
};
|
||||||
|
|
||||||
ContextFlags();
|
ContextFlags();
|
||||||
|
@ -970,8 +970,8 @@ void DocumentApi::backgroundFromLayer(LayerImage* layer)
|
|||||||
{
|
{
|
||||||
ASSERT(layer);
|
ASSERT(layer);
|
||||||
ASSERT(layer->isImage());
|
ASSERT(layer->isImage());
|
||||||
ASSERT(layer->isReadable());
|
ASSERT(layer->isVisible());
|
||||||
ASSERT(layer->isWritable());
|
ASSERT(layer->isEditable());
|
||||||
ASSERT(layer->sprite() != NULL);
|
ASSERT(layer->sprite() != NULL);
|
||||||
ASSERT(layer->sprite()->backgroundLayer() == NULL);
|
ASSERT(layer->sprite()->backgroundLayer() == NULL);
|
||||||
|
|
||||||
@ -1041,8 +1041,8 @@ void DocumentApi::layerFromBackground(Layer* layer)
|
|||||||
{
|
{
|
||||||
ASSERT(layer != NULL);
|
ASSERT(layer != NULL);
|
||||||
ASSERT(layer->isImage());
|
ASSERT(layer->isImage());
|
||||||
ASSERT(layer->isReadable());
|
ASSERT(layer->isVisible());
|
||||||
ASSERT(layer->isWritable());
|
ASSERT(layer->isEditable());
|
||||||
ASSERT(layer->isBackground());
|
ASSERT(layer->isBackground());
|
||||||
ASSERT(layer->sprite() != NULL);
|
ASSERT(layer->sprite() != NULL);
|
||||||
ASSERT(layer->sprite()->backgroundLayer() != NULL);
|
ASSERT(layer->sprite()->backgroundLayer() != NULL);
|
||||||
@ -1053,7 +1053,7 @@ void DocumentApi::layerFromBackground(Layer* layer)
|
|||||||
}
|
}
|
||||||
|
|
||||||
layer->setBackground(false);
|
layer->setBackground(false);
|
||||||
layer->setMoveable(true);
|
layer->setMovable(true);
|
||||||
layer->setName("Layer 0");
|
layer->setName("Layer 0");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -676,7 +676,7 @@ static Layer* ase_file_read_layer_chunk(FILE* f, Sprite* sprite, Layer** previou
|
|||||||
|
|
||||||
if (layer) {
|
if (layer) {
|
||||||
// flags
|
// flags
|
||||||
layer->setFlags(flags);
|
layer->setFlags(static_cast<LayerFlags>(flags));
|
||||||
|
|
||||||
// name
|
// name
|
||||||
layer->setName(name.c_str());
|
layer->setName(name.c_str());
|
||||||
@ -701,12 +701,12 @@ static void ase_file_write_layer_chunk(FILE* f, ASE_FrameHeader* frame_header, L
|
|||||||
ChunkWriter chunk(f, frame_header, ASE_FILE_CHUNK_LAYER);
|
ChunkWriter chunk(f, frame_header, ASE_FILE_CHUNK_LAYER);
|
||||||
|
|
||||||
// Flags
|
// Flags
|
||||||
fputw(layer->getFlags(), f);
|
fputw(static_cast<int>(layer->flags()), f);
|
||||||
|
|
||||||
/* layer type */
|
// Layer type
|
||||||
fputw(layer->isImage() ? 0: (layer->isFolder() ? 1: -1), f);
|
fputw(layer->isImage() ? 0: (layer->isFolder() ? 1: -1), f);
|
||||||
|
|
||||||
/* layer child level */
|
// Layer child level
|
||||||
LayerFolder* parent = layer->parent();
|
LayerFolder* parent = layer->parent();
|
||||||
int child_level = -1;
|
int child_level = -1;
|
||||||
while (parent != NULL) {
|
while (parent != NULL) {
|
||||||
|
@ -72,7 +72,7 @@ LayerImage* create_flatten_layer_copy(Sprite* dstSprite, const Layer* srcLayer,
|
|||||||
// in the given "frame".
|
// in the given "frame".
|
||||||
static bool has_cels(const Layer* layer, FrameNumber frame)
|
static bool has_cels(const Layer* layer, FrameNumber frame)
|
||||||
{
|
{
|
||||||
if (!layer->isReadable())
|
if (!layer->isVisible())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
switch (layer->type()) {
|
switch (layer->type()) {
|
||||||
|
@ -1307,8 +1307,8 @@ bool Editor::canDraw()
|
|||||||
{
|
{
|
||||||
return (m_layer != NULL &&
|
return (m_layer != NULL &&
|
||||||
m_layer->isImage() &&
|
m_layer->isImage() &&
|
||||||
m_layer->isReadable() &&
|
m_layer->isVisible() &&
|
||||||
m_layer->isWritable());
|
m_layer->isEditable());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Editor::isInsideSelection()
|
bool Editor::isInsideSelection()
|
||||||
|
@ -203,7 +203,7 @@ bool StandbyState::onMouseDown(Editor* editor, MouseMessage* msg)
|
|||||||
"<<You can't move the `Background' layer."
|
"<<You can't move the `Background' layer."
|
||||||
"||&Close");
|
"||&Close");
|
||||||
}
|
}
|
||||||
else if (!layer->isMoveable()) {
|
else if (!layer->isMovable()) {
|
||||||
Alert::show(PACKAGE "<<The layer movement is locked.||&Close");
|
Alert::show(PACKAGE "<<The layer movement is locked.||&Close");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -235,7 +235,7 @@ bool StandbyState::onMouseDown(Editor* editor, MouseMessage* msg)
|
|||||||
int x, y, opacity;
|
int x, y, opacity;
|
||||||
Image* image = location.image(&x, &y, &opacity);
|
Image* image = location.image(&x, &y, &opacity);
|
||||||
if (image) {
|
if (image) {
|
||||||
if (!layer->isWritable()) {
|
if (!layer->isEditable()) {
|
||||||
Alert::show(PACKAGE "<<The layer is locked.||&Close");
|
Alert::show(PACKAGE "<<The layer is locked.||&Close");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -249,7 +249,7 @@ bool StandbyState::onMouseDown(Editor* editor, MouseMessage* msg)
|
|||||||
|
|
||||||
// Move selected pixels
|
// Move selected pixels
|
||||||
if (editor->isInsideSelection() && msg->left()) {
|
if (editor->isInsideSelection() && msg->left()) {
|
||||||
if (!layer->isWritable()) {
|
if (!layer->isEditable()) {
|
||||||
Alert::show(PACKAGE "<<The layer is locked.||&Close");
|
Alert::show(PACKAGE "<<The layer is locked.||&Close");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -303,7 +303,7 @@ tools::ToolLoop* create_tool_loop(Editor* editor, Context* context)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If the active layer is not visible.
|
// If the active layer is not visible.
|
||||||
if (!layer->isReadable()) {
|
if (!layer->isVisible()) {
|
||||||
Alert::show(PACKAGE
|
Alert::show(PACKAGE
|
||||||
"<<The current layer is hidden,"
|
"<<The current layer is hidden,"
|
||||||
"<<make it visible and try again"
|
"<<make it visible and try again"
|
||||||
@ -311,7 +311,7 @@ tools::ToolLoop* create_tool_loop(Editor* editor, Context* context)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
// If the active layer is read-only.
|
// If the active layer is read-only.
|
||||||
else if (!layer->isWritable()) {
|
else if (!layer->isEditable()) {
|
||||||
Alert::show(PACKAGE
|
Alert::show(PACKAGE
|
||||||
"<<The current layer is locked,"
|
"<<The current layer is locked,"
|
||||||
"<<unlock it and try again"
|
"<<unlock it and try again"
|
||||||
|
@ -531,9 +531,9 @@ bool Timeline::onProcessMessage(Message* msg)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case A_PART_HEADER_EYE: {
|
case A_PART_HEADER_EYE: {
|
||||||
bool newReadableState = !allLayersVisible();
|
bool newVisibleState = !allLayersVisible();
|
||||||
for (size_t i=0; i<m_layers.size(); i++)
|
for (size_t i=0; i<m_layers.size(); i++)
|
||||||
m_layers[i]->setReadable(newReadableState);
|
m_layers[i]->setVisible(newVisibleState);
|
||||||
|
|
||||||
// Redraw all views.
|
// Redraw all views.
|
||||||
m_document->notifyGeneralUpdate();
|
m_document->notifyGeneralUpdate();
|
||||||
@ -541,9 +541,9 @@ bool Timeline::onProcessMessage(Message* msg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
case A_PART_HEADER_PADLOCK: {
|
case A_PART_HEADER_PADLOCK: {
|
||||||
bool newWritableState = !allLayersUnlocked();
|
bool newEditableState = !allLayersUnlocked();
|
||||||
for (size_t i=0; i<m_layers.size(); i++)
|
for (size_t i=0; i<m_layers.size(); i++)
|
||||||
m_layers[i]->setWritable(newWritableState);
|
m_layers[i]->setEditable(newEditableState);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -607,7 +607,7 @@ bool Timeline::onProcessMessage(Message* msg)
|
|||||||
if (m_hot_layer == m_clk_layer && validLayer(m_hot_layer)) {
|
if (m_hot_layer == m_clk_layer && validLayer(m_hot_layer)) {
|
||||||
Layer* layer = m_layers[m_clk_layer];
|
Layer* layer = m_layers[m_clk_layer];
|
||||||
ASSERT(layer != NULL);
|
ASSERT(layer != NULL);
|
||||||
layer->setReadable(!layer->isReadable());
|
layer->setVisible(!layer->isVisible());
|
||||||
|
|
||||||
// Redraw all views.
|
// Redraw all views.
|
||||||
m_document->notifyGeneralUpdate();
|
m_document->notifyGeneralUpdate();
|
||||||
@ -619,7 +619,7 @@ bool Timeline::onProcessMessage(Message* msg)
|
|||||||
if (m_hot_layer == m_clk_layer && validLayer(m_hot_layer)) {
|
if (m_hot_layer == m_clk_layer && validLayer(m_hot_layer)) {
|
||||||
Layer* layer = m_layers[m_clk_layer];
|
Layer* layer = m_layers[m_clk_layer];
|
||||||
ASSERT(layer != NULL);
|
ASSERT(layer != NULL);
|
||||||
layer->setWritable(!layer->isWritable());
|
layer->setEditable(!layer->isEditable());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1158,18 +1158,18 @@ void Timeline::drawLayer(ui::Graphics* g, LayerIndex layerIdx)
|
|||||||
if (!clip)
|
if (!clip)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Draw the eye (readable flag).
|
// Draw the eye (visible flag).
|
||||||
bounds = getPartBounds(A_PART_LAYER_EYE_ICON, layerIdx);
|
bounds = getPartBounds(A_PART_LAYER_EYE_ICON, layerIdx);
|
||||||
drawPart(g, bounds, NULL,
|
drawPart(g, bounds, NULL,
|
||||||
layer->isReadable() ? m_timelineOpenEyeStyle: m_timelineClosedEyeStyle,
|
layer->isVisible() ? m_timelineOpenEyeStyle: m_timelineClosedEyeStyle,
|
||||||
is_active,
|
is_active,
|
||||||
(hotlayer && m_hot_part == A_PART_LAYER_EYE_ICON),
|
(hotlayer && m_hot_part == A_PART_LAYER_EYE_ICON),
|
||||||
(clklayer && m_clk_part == A_PART_LAYER_EYE_ICON));
|
(clklayer && m_clk_part == A_PART_LAYER_EYE_ICON));
|
||||||
|
|
||||||
// Draw the padlock (writable flag).
|
// Draw the padlock (editable flag).
|
||||||
bounds = getPartBounds(A_PART_LAYER_PADLOCK_ICON, layerIdx);
|
bounds = getPartBounds(A_PART_LAYER_PADLOCK_ICON, layerIdx);
|
||||||
drawPart(g, bounds, NULL,
|
drawPart(g, bounds, NULL,
|
||||||
layer->isWritable() ? m_timelineOpenPadlockStyle: m_timelineClosedPadlockStyle,
|
layer->isEditable() ? m_timelineOpenPadlockStyle: m_timelineClosedPadlockStyle,
|
||||||
is_active,
|
is_active,
|
||||||
(hotlayer && m_hot_part == A_PART_LAYER_PADLOCK_ICON),
|
(hotlayer && m_hot_part == A_PART_LAYER_PADLOCK_ICON),
|
||||||
(clklayer && m_clk_part == A_PART_LAYER_PADLOCK_ICON));
|
(clklayer && m_clk_part == A_PART_LAYER_PADLOCK_ICON));
|
||||||
@ -1755,8 +1755,8 @@ void Timeline::updateStatusBar(ui::Message* msg)
|
|||||||
if (layer != NULL) {
|
if (layer != NULL) {
|
||||||
sb->setStatusText(0, "Layer '%s' [%s%s]",
|
sb->setStatusText(0, "Layer '%s' [%s%s]",
|
||||||
layer->name().c_str(),
|
layer->name().c_str(),
|
||||||
layer->isReadable() ? "visible": "hidden",
|
layer->isVisible() ? "visible": "hidden",
|
||||||
layer->isWritable() ? "": " locked");
|
layer->isEditable() ? "": " locked");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1765,7 +1765,7 @@ void Timeline::updateStatusBar(ui::Message* msg)
|
|||||||
if (layer != NULL) {
|
if (layer != NULL) {
|
||||||
sb->setStatusText(0, "Layer '%s' is %s",
|
sb->setStatusText(0, "Layer '%s' is %s",
|
||||||
layer->name().c_str(),
|
layer->name().c_str(),
|
||||||
layer->isReadable() ? "visible": "hidden");
|
layer->isVisible() ? "visible": "hidden");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1774,7 +1774,7 @@ void Timeline::updateStatusBar(ui::Message* msg)
|
|||||||
if (layer != NULL) {
|
if (layer != NULL) {
|
||||||
sb->setStatusText(0, "Layer '%s' is %s",
|
sb->setStatusText(0, "Layer '%s' is %s",
|
||||||
layer->name().c_str(),
|
layer->name().c_str(),
|
||||||
layer->isWritable() ? "unlocked (modifiable)": "locked (read-only)");
|
layer->isEditable() ? "unlocked (editable)": "locked (read-only)");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1878,7 +1878,7 @@ void Timeline::setScroll(int x, int y)
|
|||||||
bool Timeline::allLayersVisible()
|
bool Timeline::allLayersVisible()
|
||||||
{
|
{
|
||||||
for (size_t i=0; i<m_layers.size(); i++)
|
for (size_t i=0; i<m_layers.size(); i++)
|
||||||
if (!m_layers[i]->isReadable())
|
if (!m_layers[i]->isVisible())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -1887,7 +1887,7 @@ bool Timeline::allLayersVisible()
|
|||||||
bool Timeline::allLayersInvisible()
|
bool Timeline::allLayersInvisible()
|
||||||
{
|
{
|
||||||
for (size_t i=0; i<m_layers.size(); i++)
|
for (size_t i=0; i<m_layers.size(); i++)
|
||||||
if (m_layers[i]->isReadable())
|
if (m_layers[i]->isVisible())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -1896,7 +1896,7 @@ bool Timeline::allLayersInvisible()
|
|||||||
bool Timeline::allLayersLocked()
|
bool Timeline::allLayersLocked()
|
||||||
{
|
{
|
||||||
for (size_t i=0; i<m_layers.size(); i++)
|
for (size_t i=0; i<m_layers.size(); i++)
|
||||||
if (m_layers[i]->isWritable())
|
if (m_layers[i]->isEditable())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -1905,7 +1905,7 @@ bool Timeline::allLayersLocked()
|
|||||||
bool Timeline::allLayersUnlocked()
|
bool Timeline::allLayersUnlocked()
|
||||||
{
|
{
|
||||||
for (size_t i=0; i<m_layers.size(); i++)
|
for (size_t i=0; i<m_layers.size(); i++)
|
||||||
if (!m_layers[i]->isWritable())
|
if (!m_layers[i]->isEditable())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -33,7 +33,7 @@ using namespace undo;
|
|||||||
|
|
||||||
SetLayerFlags::SetLayerFlags(ObjectsContainer* objects, Layer* layer)
|
SetLayerFlags::SetLayerFlags(ObjectsContainer* objects, Layer* layer)
|
||||||
: m_layerId(objects->addObject(layer))
|
: m_layerId(objects->addObject(layer))
|
||||||
, m_flags(layer->getFlags())
|
, m_flags(uint32_t(layer->flags()))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ void SetLayerFlags::revert(ObjectsContainer* objects, UndoersCollector* redoers)
|
|||||||
// Push another SetLayerFlags as redoer
|
// Push another SetLayerFlags as redoer
|
||||||
redoers->pushUndoer(new SetLayerFlags(objects, layer));
|
redoers->pushUndoer(new SetLayerFlags(objects, layer));
|
||||||
|
|
||||||
layer->setFlags(m_flags);
|
layer->setFlags(LayerFlags(m_flags));
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace undoers
|
} // namespace undoers
|
||||||
|
@ -390,7 +390,7 @@ Image* RenderEngine::renderSprite(int source_x, int source_y,
|
|||||||
{
|
{
|
||||||
void (*zoomed_func)(Image*, const Image*, const Palette*, int, int, int, int, int);
|
void (*zoomed_func)(Image*, const Image*, const Palette*, int, int, int, int, int);
|
||||||
const LayerImage* background = m_sprite->backgroundLayer();
|
const LayerImage* background = m_sprite->backgroundLayer();
|
||||||
bool need_checked_bg = (background != NULL ? !background->isReadable(): true);
|
bool need_checked_bg = (background != NULL ? !background->isVisible(): true);
|
||||||
uint32_t bg_color = 0;
|
uint32_t bg_color = 0;
|
||||||
Image *image;
|
Image *image;
|
||||||
|
|
||||||
@ -573,7 +573,7 @@ void RenderEngine::renderLayer(
|
|||||||
int blend_mode)
|
int blend_mode)
|
||||||
{
|
{
|
||||||
// we can't read from this layer
|
// we can't read from this layer
|
||||||
if (!layer->isReadable())
|
if (!layer->isVisible())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
switch (layer->type()) {
|
switch (layer->type()) {
|
||||||
|
@ -21,9 +21,9 @@ namespace doc {
|
|||||||
ImagesCollector::ImagesCollector(Layer* layer,
|
ImagesCollector::ImagesCollector(Layer* layer,
|
||||||
FrameNumber frame,
|
FrameNumber frame,
|
||||||
bool allFrames,
|
bool allFrames,
|
||||||
bool forWrite)
|
bool forEdit)
|
||||||
: m_allFrames(allFrames)
|
: m_allFrames(allFrames)
|
||||||
, m_forWrite(forWrite)
|
, m_forEdit(forEdit)
|
||||||
{
|
{
|
||||||
collectFromLayer(layer, frame);
|
collectFromLayer(layer, frame);
|
||||||
}
|
}
|
||||||
@ -32,10 +32,10 @@ void ImagesCollector::collectFromLayer(Layer* layer, FrameNumber frame)
|
|||||||
{
|
{
|
||||||
const Sprite* sprite = layer->sprite();
|
const Sprite* sprite = layer->sprite();
|
||||||
|
|
||||||
if (!layer->isReadable())
|
if (!layer->isVisible())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_forWrite && !layer->isWritable())
|
if (m_forEdit && !layer->isEditable())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
switch (layer->type()) {
|
switch (layer->type()) {
|
||||||
|
@ -47,12 +47,12 @@ namespace doc {
|
|||||||
// Parameters:
|
// Parameters:
|
||||||
// * allFrames: True if you want to collect images from all frames
|
// * allFrames: True if you want to collect images from all frames
|
||||||
// or false if you need images from the given "frame" param.
|
// or false if you need images from the given "frame" param.
|
||||||
// * forWrite: True if you will modify the images (it is used to avoid
|
// * forEdit: True if you will modify the images (it is used to avoid
|
||||||
// returning images from layers which are read-only/write-locked).
|
// returning images from layers which are read-only/write-locked).
|
||||||
ImagesCollector(Layer* layer,
|
ImagesCollector(Layer* layer,
|
||||||
FrameNumber frame,
|
FrameNumber frame,
|
||||||
bool allFrames,
|
bool allFrames,
|
||||||
bool forWrite);
|
bool forEdit);
|
||||||
|
|
||||||
ItemsIterator begin() { return m_items.begin(); }
|
ItemsIterator begin() { return m_items.begin(); }
|
||||||
ItemsIterator end() { return m_items.end(); }
|
ItemsIterator end() { return m_items.end(); }
|
||||||
@ -66,7 +66,7 @@ namespace doc {
|
|||||||
|
|
||||||
Items m_items;
|
Items m_items;
|
||||||
bool m_allFrames;
|
bool m_allFrames;
|
||||||
bool m_forWrite;
|
bool m_forEdit;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace doc
|
} // namespace doc
|
||||||
|
@ -24,16 +24,15 @@ namespace doc {
|
|||||||
|
|
||||||
Layer::Layer(ObjectType type, Sprite* sprite)
|
Layer::Layer(ObjectType type, Sprite* sprite)
|
||||||
: Object(type)
|
: Object(type)
|
||||||
|
, m_sprite(sprite)
|
||||||
|
, m_parent(NULL)
|
||||||
|
, m_flags(LayerFlags(
|
||||||
|
int(LayerFlags::Visible) |
|
||||||
|
int(LayerFlags::Editable)))
|
||||||
{
|
{
|
||||||
ASSERT(type == ObjectType::LayerImage || type == ObjectType::LayerFolder);
|
ASSERT(type == ObjectType::LayerImage || type == ObjectType::LayerFolder);
|
||||||
|
|
||||||
setName("Layer");
|
setName("Layer");
|
||||||
|
|
||||||
m_sprite = sprite;
|
|
||||||
m_parent = NULL;
|
|
||||||
m_flags =
|
|
||||||
LAYER_IS_READABLE |
|
|
||||||
LAYER_IS_WRITABLE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Layer::~Layer()
|
Layer::~Layer()
|
||||||
@ -210,7 +209,7 @@ void LayerImage::configureAsBackground()
|
|||||||
ASSERT(sprite() != NULL);
|
ASSERT(sprite() != NULL);
|
||||||
ASSERT(sprite()->backgroundLayer() == NULL);
|
ASSERT(sprite()->backgroundLayer() == NULL);
|
||||||
|
|
||||||
setMoveable(false);
|
setMovable(false);
|
||||||
setBackground(true);
|
setBackground(true);
|
||||||
setName("Background");
|
setName("Background");
|
||||||
|
|
||||||
@ -303,7 +302,7 @@ void LayerFolder::stackLayer(Layer* layer, Layer* after)
|
|||||||
|
|
||||||
void layer_render(const Layer* layer, Image* image, int x, int y, FrameNumber frame)
|
void layer_render(const Layer* layer, Image* image, int x, int y, FrameNumber frame)
|
||||||
{
|
{
|
||||||
if (!layer->isReadable())
|
if (!layer->isVisible())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
switch (layer->type()) {
|
switch (layer->type()) {
|
||||||
|
@ -28,11 +28,11 @@ namespace doc {
|
|||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// Layer class
|
// Layer class
|
||||||
|
|
||||||
enum {
|
enum class LayerFlags {
|
||||||
LAYER_IS_READABLE = 0x0001,
|
Visible = 1, // Can be read
|
||||||
LAYER_IS_WRITABLE = 0x0002,
|
Editable = 2, // Can be written
|
||||||
LAYER_IS_LOCKMOVE = 0x0004,
|
LockMove = 4, // Cannot be moved
|
||||||
LAYER_IS_BACKGROUND = 0x0008,
|
Background = 8, // Stack order cannot be changed
|
||||||
};
|
};
|
||||||
|
|
||||||
class Layer : public Object {
|
class Layer : public Object {
|
||||||
@ -57,18 +57,35 @@ namespace doc {
|
|||||||
|
|
||||||
bool isImage() const { return type() == ObjectType::LayerImage; }
|
bool isImage() const { return type() == ObjectType::LayerImage; }
|
||||||
bool isFolder() const { return type() == ObjectType::LayerFolder; }
|
bool isFolder() const { return type() == ObjectType::LayerFolder; }
|
||||||
bool isBackground() const { return (m_flags & LAYER_IS_BACKGROUND) == LAYER_IS_BACKGROUND; }
|
|
||||||
bool isMoveable() const { return (m_flags & LAYER_IS_LOCKMOVE) == 0; }
|
|
||||||
bool isReadable() const { return (m_flags & LAYER_IS_READABLE) == LAYER_IS_READABLE; }
|
|
||||||
bool isWritable() const { return (m_flags & LAYER_IS_WRITABLE) == LAYER_IS_WRITABLE; }
|
|
||||||
|
|
||||||
void setBackground(bool b) { if (b) m_flags |= LAYER_IS_BACKGROUND; else m_flags &= ~LAYER_IS_BACKGROUND; }
|
bool isBackground() const { return hasFlags(LayerFlags::Background); }
|
||||||
void setMoveable(bool b) { if (b) m_flags &= ~LAYER_IS_LOCKMOVE; else m_flags |= LAYER_IS_LOCKMOVE; }
|
bool isVisible() const { return hasFlags(LayerFlags::Visible); }
|
||||||
void setReadable(bool b) { if (b) m_flags |= LAYER_IS_READABLE; else m_flags &= ~LAYER_IS_READABLE; }
|
bool isEditable() const { return hasFlags(LayerFlags::Editable); }
|
||||||
void setWritable(bool b) { if (b) m_flags |= LAYER_IS_WRITABLE; else m_flags &= ~LAYER_IS_WRITABLE; }
|
bool isMovable() const { return !hasFlags(LayerFlags::LockMove); }
|
||||||
|
|
||||||
uint32_t getFlags() const { return m_flags; }
|
void setBackground(bool state) { switchFlags(LayerFlags::Background, state); }
|
||||||
void setFlags(uint32_t flags) { m_flags = flags; }
|
void setVisible (bool state) { switchFlags(LayerFlags::Visible, state); }
|
||||||
|
void setEditable (bool state) { switchFlags(LayerFlags::Editable, state); }
|
||||||
|
void setMovable (bool state) { switchFlags(LayerFlags::LockMove, !state); }
|
||||||
|
|
||||||
|
LayerFlags flags() const {
|
||||||
|
return m_flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hasFlags(LayerFlags flags) const {
|
||||||
|
return (int(m_flags) & int(flags)) == int(flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setFlags(LayerFlags flags) {
|
||||||
|
m_flags = flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
void switchFlags(LayerFlags flags, bool state) {
|
||||||
|
if (state)
|
||||||
|
m_flags = LayerFlags(int(m_flags) | int(flags));
|
||||||
|
else
|
||||||
|
m_flags = LayerFlags(int(m_flags) & ~int(flags));
|
||||||
|
}
|
||||||
|
|
||||||
virtual void getCels(CelList& cels) const = 0;
|
virtual void getCels(CelList& cels) const = 0;
|
||||||
|
|
||||||
@ -76,7 +93,7 @@ namespace doc {
|
|||||||
std::string m_name; // layer name
|
std::string m_name; // layer name
|
||||||
Sprite* m_sprite; // owner of the layer
|
Sprite* m_sprite; // owner of the layer
|
||||||
LayerFolder* m_parent; // parent layer
|
LayerFolder* m_parent; // parent layer
|
||||||
unsigned short m_flags;
|
LayerFlags m_flags; // stack order cannot be changed
|
||||||
|
|
||||||
// Disable assigment
|
// Disable assigment
|
||||||
Layer& operator=(const Layer& other);
|
Layer& operator=(const Layer& other);
|
||||||
|
@ -35,8 +35,8 @@ void write_layer(std::ostream& os, LayerSubObjectsSerializer* subObjects, Layer*
|
|||||||
if (!name.empty())
|
if (!name.empty())
|
||||||
os.write(name.c_str(), name.size()); // Name
|
os.write(name.c_str(), name.size()); // Name
|
||||||
|
|
||||||
write32(os, layer->getFlags()); // Flags
|
write32(os, static_cast<int>(layer->flags())); // Flags
|
||||||
write16(os, static_cast<int>(layer->type())); // Type
|
write16(os, static_cast<int>(layer->type())); // Type
|
||||||
|
|
||||||
switch (layer->type()) {
|
switch (layer->type()) {
|
||||||
|
|
||||||
@ -136,7 +136,7 @@ Layer* read_layer(std::istream& is, LayerSubObjectsSerializer* subObjects, Sprit
|
|||||||
|
|
||||||
if (layer != NULL) {
|
if (layer != NULL) {
|
||||||
layer->setName(&name[0]);
|
layer->setName(&name[0]);
|
||||||
layer->setFlags(flags);
|
layer->setFlags(static_cast<LayerFlags>(flags));
|
||||||
}
|
}
|
||||||
|
|
||||||
return layer.release();
|
return layer.release();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user