mirror of
https://github.com/aseprite/aseprite.git
synced 2025-03-30 04:20:23 +00:00
Add LayerLock command
This commit is contained in:
parent
0f1868dee9
commit
9c6f6f3114
@ -708,6 +708,7 @@
|
||||
<menu text="&Layer">
|
||||
<item command="LayerProperties" text="&Properties..." />
|
||||
<item command="LayerVisibility" text="&Visible" />
|
||||
<item command="LayerLock" text="Loc&k Layers" />
|
||||
<item command="OpenGroup" text="&Open Group" />
|
||||
<separator />
|
||||
<item command="NewLayer" text="&New Layer" />
|
||||
|
@ -280,6 +280,7 @@ add_library(app-lib
|
||||
commands/cmd_keyboard_shortcuts.cpp
|
||||
commands/cmd_launch.cpp
|
||||
commands/cmd_layer_from_background.cpp
|
||||
commands/cmd_layer_lock.cpp
|
||||
commands/cmd_layer_opacity.cpp
|
||||
commands/cmd_layer_properties.cpp
|
||||
commands/cmd_layer_visibility.cpp
|
||||
|
98
src/app/commands/cmd_layer_lock.cpp
Normal file
98
src/app/commands/cmd_layer_lock.cpp
Normal file
@ -0,0 +1,98 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2017 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
// the End-User License Agreement for Aseprite.
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "app/app.h"
|
||||
#include "app/commands/command.h"
|
||||
#include "app/context_access.h"
|
||||
#include "app/modules/gui.h"
|
||||
#include "app/ui/timeline/timeline.h"
|
||||
#include "doc/image.h"
|
||||
#include "doc/layer.h"
|
||||
|
||||
namespace app {
|
||||
|
||||
using namespace ui;
|
||||
|
||||
class LayerLockCommand : public Command {
|
||||
public:
|
||||
LayerLockCommand();
|
||||
Command* clone() const override { return new LayerLockCommand(*this); }
|
||||
|
||||
protected:
|
||||
bool onEnabled(Context* context) override;
|
||||
bool onChecked(Context* context) override;
|
||||
void onExecute(Context* context) override;
|
||||
};
|
||||
|
||||
LayerLockCommand::LayerLockCommand()
|
||||
: Command("LayerLock",
|
||||
"Lock Layers",
|
||||
CmdRecordableFlag)
|
||||
{
|
||||
}
|
||||
|
||||
bool LayerLockCommand::onEnabled(Context* context)
|
||||
{
|
||||
return context->checkFlags(ContextFlags::ActiveDocumentIsWritable |
|
||||
ContextFlags::HasActiveLayer);
|
||||
}
|
||||
|
||||
bool LayerLockCommand::onChecked(Context* context)
|
||||
{
|
||||
const ContextReader reader(context);
|
||||
if (!reader.document() ||
|
||||
!reader.layer())
|
||||
return false;
|
||||
|
||||
SelectedLayers selLayers;
|
||||
auto range = App::instance()->timeline()->range();
|
||||
if (range.enabled()) {
|
||||
selLayers = range.selectedLayers();
|
||||
}
|
||||
else {
|
||||
selLayers.insert(const_cast<Layer*>(reader.layer()));
|
||||
}
|
||||
bool lock = false;
|
||||
for (auto layer : selLayers) {
|
||||
if (layer && !layer->isEditable())
|
||||
lock = true;
|
||||
}
|
||||
return lock;
|
||||
}
|
||||
|
||||
void LayerLockCommand::onExecute(Context* context)
|
||||
{
|
||||
ContextWriter writer(context);
|
||||
SelectedLayers selLayers;
|
||||
auto range = App::instance()->timeline()->range();
|
||||
if (range.enabled()) {
|
||||
selLayers = range.selectedLayers();
|
||||
}
|
||||
else {
|
||||
selLayers.insert(writer.layer());
|
||||
}
|
||||
bool anyLock = false;
|
||||
for (auto layer : selLayers) {
|
||||
if (!layer->isEditable())
|
||||
anyLock = true;
|
||||
}
|
||||
for (auto layer : selLayers) {
|
||||
layer->setEditable(anyLock);
|
||||
}
|
||||
|
||||
update_screen_for_document(writer.document());
|
||||
}
|
||||
|
||||
Command* CommandFactory::createLayerLockCommand()
|
||||
{
|
||||
return new LayerLockCommand;
|
||||
}
|
||||
|
||||
} // namespace app
|
@ -63,6 +63,7 @@ FOR_EACH_COMMAND(InvertMask)
|
||||
FOR_EACH_COMMAND(KeyboardShortcuts)
|
||||
FOR_EACH_COMMAND(Launch)
|
||||
FOR_EACH_COMMAND(LayerFromBackground)
|
||||
FOR_EACH_COMMAND(LayerLock)
|
||||
FOR_EACH_COMMAND(LayerOpacity)
|
||||
FOR_EACH_COMMAND(LayerProperties)
|
||||
FOR_EACH_COMMAND(LayerVisibility)
|
||||
|
Loading…
x
Reference in New Issue
Block a user