Disable more commands to edit reference layers

* Disable filters (e.g. replace color, adjust hue, etc.)
* Disable cut/copy/paste/clear
This commit is contained in:
David Capello 2018-06-29 16:36:01 -03:00
parent ec8266ea48
commit cc1e76490c
2 changed files with 25 additions and 13 deletions

View File

@ -66,7 +66,9 @@ FilterManagerImpl::FilterManagerImpl(Context* context, Filter* filter)
{ {
int x, y; int x, y;
Image* image = m_site.image(&x, &y); Image* image = m_site.image(&x, &y);
if (!image) if (!image
|| (m_site.layer() &&
m_site.layer()->isReference()))
throw NoImageException(); throw NoImageException();
init(m_site.cel()); init(m_site.cel());
@ -242,11 +244,16 @@ void FilterManagerImpl::applyToTarget()
case CelsTarget::Selected: { case CelsTarget::Selected: {
auto range = App::instance()->timeline()->range(); auto range = App::instance()->timeline()->range();
if (range.enabled()) if (range.enabled()) {
cels = get_unlocked_unique_cels(m_site.sprite(), range); for (Cel* cel : get_unlocked_unique_cels(m_site.sprite(), range)) {
if (!cel->layer()->isReference())
cels.push_back(cel);
}
}
else if (m_site.cel() && else if (m_site.cel() &&
m_site.layer() && m_site.layer() &&
m_site.layer()->isEditable()) { m_site.layer()->isEditable() &&
!m_site.layer()->isReference()) {
cels.push_back(m_site.cel()); cels.push_back(m_site.cel());
} }
break; break;
@ -254,7 +261,8 @@ void FilterManagerImpl::applyToTarget()
case CelsTarget::All: { case CelsTarget::All: {
for (Cel* cel : m_site.sprite()->uniqueCels()) { for (Cel* cel : m_site.sprite()->uniqueCels()) {
if (cel->layer()->isEditable()) if (cel->layer()->isEditable() &&
!cel->layer()->isReference())
cels.push_back(cel); cels.push_back(cel);
} }
break; break;

View File

@ -467,7 +467,8 @@ bool DocumentView::onCanCut(Context* ctx)
ContextFlags::ActiveLayerIsVisible | ContextFlags::ActiveLayerIsVisible |
ContextFlags::ActiveLayerIsEditable | ContextFlags::ActiveLayerIsEditable |
ContextFlags::HasVisibleMask | ContextFlags::HasVisibleMask |
ContextFlags::HasActiveImage)) ContextFlags::HasActiveImage)
&& !ctx->checkFlags(ContextFlags::ActiveLayerIsReference))
return true; return true;
else if (m_editor->isMovingPixels()) else if (m_editor->isMovingPixels())
return true; return true;
@ -480,7 +481,8 @@ bool DocumentView::onCanCopy(Context* ctx)
if (ctx->checkFlags(ContextFlags::ActiveDocumentIsWritable | if (ctx->checkFlags(ContextFlags::ActiveDocumentIsWritable |
ContextFlags::ActiveLayerIsVisible | ContextFlags::ActiveLayerIsVisible |
ContextFlags::HasVisibleMask | ContextFlags::HasVisibleMask |
ContextFlags::HasActiveImage)) ContextFlags::HasActiveImage)
&& !ctx->checkFlags(ContextFlags::ActiveLayerIsReference))
return true; return true;
else if (m_editor->isMovingPixels()) else if (m_editor->isMovingPixels())
return true; return true;
@ -491,11 +493,12 @@ bool DocumentView::onCanCopy(Context* ctx)
bool DocumentView::onCanPaste(Context* ctx) bool DocumentView::onCanPaste(Context* ctx)
{ {
return return
(clipboard::get_current_format() == clipboard::ClipboardImage && (clipboard::get_current_format() == clipboard::ClipboardImage
ctx->checkFlags(ContextFlags::ActiveDocumentIsWritable | && ctx->checkFlags(ContextFlags::ActiveDocumentIsWritable |
ContextFlags::ActiveLayerIsVisible | ContextFlags::ActiveLayerIsVisible |
ContextFlags::ActiveLayerIsEditable | ContextFlags::ActiveLayerIsEditable |
ContextFlags::ActiveLayerIsImage)); ContextFlags::ActiveLayerIsImage)
&& !ctx->checkFlags(ContextFlags::ActiveLayerIsReference));
} }
bool DocumentView::onCanClear(Context* ctx) bool DocumentView::onCanClear(Context* ctx)
@ -503,7 +506,8 @@ bool DocumentView::onCanClear(Context* ctx)
if (ctx->checkFlags(ContextFlags::ActiveDocumentIsWritable | if (ctx->checkFlags(ContextFlags::ActiveDocumentIsWritable |
ContextFlags::ActiveLayerIsVisible | ContextFlags::ActiveLayerIsVisible |
ContextFlags::ActiveLayerIsEditable | ContextFlags::ActiveLayerIsEditable |
ContextFlags::ActiveLayerIsImage)) { ContextFlags::ActiveLayerIsImage)
&& !ctx->checkFlags(ContextFlags::ActiveLayerIsReference)) {
return true; return true;
} }
else if (m_editor->isMovingPixels()) { else if (m_editor->isMovingPixels()) {