Fix crash trying to move the selection from a empty cel

This commit is contained in:
David Capello 2014-08-24 19:37:24 -03:00
parent d1fc7f643a
commit 0b3ec08987
3 changed files with 23 additions and 23 deletions

View File

@ -118,8 +118,9 @@ void PixelsMovement::cutMask()
{
{
ContextWriter writer(m_reader);
m_document->getApi().clearMask(m_layer, writer.cel(),
app_get_color_to_clear_layer(m_layer));
if (writer.cel())
m_document->getApi().clearMask(m_layer, writer.cel(),
app_get_color_to_clear_layer(m_layer));
}
copyMask();

View File

@ -225,17 +225,15 @@ bool StandbyState::onMouseDown(Editor* editor, MouseMessage* msg)
if (editor->isInsideSelection() &&
currentTool->getInk(0)->isSelection() &&
msg->left()) {
if (!layer->isWritable()) {
Alert::show(PACKAGE "<<The layer is locked.||&Close");
return true;
}
int x, y, opacity;
Image* image = location.image(&x, &y, &opacity);
if (image) {
if (!layer->isWritable()) {
Alert::show(PACKAGE "<<The layer is locked.||&Close");
return true;
}
// Change to MovingPixelsState
transformSelection(editor, msg, MoveHandle);
}
// Change to MovingPixelsState
transformSelection(editor, msg, MoveHandle);
return true;
}

View File

@ -52,31 +52,32 @@ Image* NewImageFromMask(const DocumentLocation& location)
ASSERT(srcSprite);
ASSERT(srcMask);
ASSERT(srcMaskBitmap);
ASSERT(src);
dst = Image::create(srcSprite->pixelFormat(), srcBounds.w, srcBounds.h);
if (!dst)
return NULL;
// Clear the new image
dst->setMaskColor(src->maskColor());
dst->setMaskColor(src ? src->maskColor(): srcSprite->transparentColor());
clear_image(dst, dst->maskColor());
// Copy the masked zones
const LockImageBits<BitmapTraits> maskBits(srcMaskBitmap, gfx::Rect(0, 0, srcBounds.w, srcBounds.h));
LockImageBits<BitmapTraits>::const_iterator mask_it = maskBits.begin();
if (src) {
const LockImageBits<BitmapTraits> maskBits(srcMaskBitmap, gfx::Rect(0, 0, srcBounds.w, srcBounds.h));
LockImageBits<BitmapTraits>::const_iterator mask_it = maskBits.begin();
for (v=0; v<srcBounds.h; ++v) {
for (u=0; u<srcBounds.w; ++u, ++mask_it) {
ASSERT(mask_it != maskBits.end());
for (v=0; v<srcBounds.h; ++v) {
for (u=0; u<srcBounds.w; ++u, ++mask_it) {
ASSERT(mask_it != maskBits.end());
if (*mask_it) {
getx = u+srcBounds.x-x;
gety = v+srcBounds.y-y;
if (*mask_it) {
getx = u+srcBounds.x-x;
gety = v+srcBounds.y-y;
if ((getx >= 0) && (getx < src->width()) &&
if ((getx >= 0) && (getx < src->width()) &&
(gety >= 0) && (gety < src->height()))
dst->putPixel(u, v, src->getPixel(getx, gety));
dst->putPixel(u, v, src->getPixel(getx, gety));
}
}
}
}