mirror of
https://github.com/aseprite/aseprite.git
synced 2025-03-29 19:20:09 +00:00
Add Alt+click on timeline to hide all layers except the clicked one
https://community.aseprite.org/t/turn-off-all-other-layers/151
This commit is contained in:
parent
b8c5ad074a
commit
8042bbb60d
@ -551,7 +551,8 @@ static void ase_file_write_layer_chunk(FILE* f, dio::AsepriteFrameHeader* frame_
|
||||
ChunkWriter chunk(f, frame_header, ASE_FILE_CHUNK_LAYER);
|
||||
|
||||
// Flags
|
||||
fputw(static_cast<int>(layer->flags()), f);
|
||||
fputw(static_cast<int>(layer->flags()) &
|
||||
static_cast<int>(doc::LayerFlags::PersistentFlagsMask), f);
|
||||
|
||||
// Layer type
|
||||
fputw((layer->isImage() ? ASE_FILE_LAYER_IMAGE:
|
||||
|
@ -769,8 +769,48 @@ bool Timeline::onProcessMessage(Message* msg)
|
||||
if (validLayer(m_clk.layer)) {
|
||||
Row& row = m_rows[m_clk.layer];
|
||||
Layer* layer = row.layer();
|
||||
ASSERT(layer);
|
||||
if (layer->isVisible())
|
||||
ASSERT(layer)
|
||||
|
||||
// Hide everything or restore alternative state
|
||||
bool oneWithInternalState = false;
|
||||
if (msg->altPressed()) {
|
||||
for (const Row& row : m_rows) {
|
||||
const Layer* l = row.layer();
|
||||
if (l->hasFlags(LayerFlags::Internal_WasVisible)) {
|
||||
oneWithInternalState = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// If there is one layer with the internal state, restore the previous visible state
|
||||
if (oneWithInternalState) {
|
||||
for (Row& row : m_rows) {
|
||||
Layer* l = row.layer();
|
||||
if (l->hasFlags(LayerFlags::Internal_WasVisible)) {
|
||||
l->setVisible(true);
|
||||
l->switchFlags(LayerFlags::Internal_WasVisible, false);
|
||||
}
|
||||
else {
|
||||
l->setVisible(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
// In other case, hide everything
|
||||
else {
|
||||
for (Row& row : m_rows) {
|
||||
Layer* l = row.layer();
|
||||
l->switchFlags(LayerFlags::Internal_WasVisible, l->isVisible());
|
||||
l->setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
regenerateRows();
|
||||
invalidate();
|
||||
|
||||
m_document->notifyGeneralUpdate();
|
||||
}
|
||||
|
||||
if (layer->isVisible() && !oneWithInternalState)
|
||||
m_state = STATE_HIDING_LAYERS;
|
||||
else
|
||||
m_state = STATE_SHOWING_LAYERS;
|
||||
|
@ -417,7 +417,9 @@ doc::Layer* AsepriteDecoder::readLayerChunk(AsepriteHeader* header,
|
||||
|
||||
if (layer) {
|
||||
// flags
|
||||
layer->setFlags(static_cast<doc::LayerFlags>(flags));
|
||||
layer->setFlags(static_cast<doc::LayerFlags>(
|
||||
flags &
|
||||
static_cast<int>(doc::LayerFlags::PersistentFlagsMask)));
|
||||
|
||||
// name
|
||||
layer->setName(name.c_str());
|
||||
|
@ -39,6 +39,10 @@ namespace doc {
|
||||
Collapsed = 32, // Prefer to show this group layer collapsed
|
||||
Reference = 64, // Is a reference layer
|
||||
|
||||
PersistentFlagsMask = 0xffff,
|
||||
|
||||
Internal_WasVisible = 0x10000, // Was visible in the alternative state (Alt+click)
|
||||
|
||||
BackgroundLayerFlags = LockMove | Background,
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user