From 0b3ec08987587c621bd8d4c55939fec67efab828 Mon Sep 17 00:00:00 2001 From: David Capello Date: Sun, 24 Aug 2014 19:37:24 -0300 Subject: [PATCH] Fix crash trying to move the selection from a empty cel --- src/app/ui/editor/pixels_movement.cpp | 5 +++-- src/app/ui/editor/standby_state.cpp | 16 +++++++--------- src/app/util/misc.cpp | 25 +++++++++++++------------ 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/app/ui/editor/pixels_movement.cpp b/src/app/ui/editor/pixels_movement.cpp index 050694adc..a39465467 100644 --- a/src/app/ui/editor/pixels_movement.cpp +++ b/src/app/ui/editor/pixels_movement.cpp @@ -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(); diff --git a/src/app/ui/editor/standby_state.cpp b/src/app/ui/editor/standby_state.cpp index d92902ddf..86c95d10c 100644 --- a/src/app/ui/editor/standby_state.cpp +++ b/src/app/ui/editor/standby_state.cpp @@ -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 "<isWritable()) { - Alert::show(PACKAGE "<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 maskBits(srcMaskBitmap, gfx::Rect(0, 0, srcBounds.w, srcBounds.h)); - LockImageBits::const_iterator mask_it = maskBits.begin(); + if (src) { + const LockImageBits maskBits(srcMaskBitmap, gfx::Rect(0, 0, srcBounds.w, srcBounds.h)); + LockImageBits::const_iterator mask_it = maskBits.begin(); - for (v=0; v= 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)); + } } } }