mirror of
https://github.com/aseprite/aseprite.git
synced 2025-04-15 20:42:40 +00:00
Fix crash trying to move the selection from a empty cel
This commit is contained in:
parent
d1fc7f643a
commit
0b3ec08987
@ -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();
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user