[aseprite] 63/134: Fix crash using eyedropper above a (hidden) selection handle

Tobias Hansen thansen at moszumanska.debian.org
Sat Mar 14 17:10:05 UTC 2015


This is an automated email from the git hooks/post-receive script.

thansen pushed a commit to branch master
in repository aseprite.

commit 3ba3b48fd707224e88a76e0535abb71d8b8a7b1e
Author: David Capello <davidcapello at gmail.com>
Date:   Thu Nov 13 11:23:45 2014 -0300

    Fix crash using eyedropper above a (hidden) selection handle
    
    We need to be in a Selection ink to start moving pixels from transform
    handles.
---
 src/app/ui/editor/standby_state.cpp | 103 +++++++++++++++++++-----------------
 src/app/ui/editor/standby_state.h   |   1 +
 2 files changed, 56 insertions(+), 48 deletions(-)

diff --git a/src/app/ui/editor/standby_state.cpp b/src/app/ui/editor/standby_state.cpp
index 60fdedd..ce16984 100644
--- a/src/app/ui/editor/standby_state.cpp
+++ b/src/app/ui/editor/standby_state.cpp
@@ -195,50 +195,49 @@ bool StandbyState::onMouseDown(Editor* editor, MouseMessage* msg)
     return true;
   }
 
-  // Transform selected pixels
-  if (document->isMaskVisible() &&
-      m_decorator->getTransformHandles(editor)) {
-    TransformHandles* transfHandles = m_decorator->getTransformHandles(editor);
-
-    // Get the handle covered by the mouse.
-    HandleType handle = transfHandles->getHandleAtPoint(editor,
-                                                        msg->position(),
-                                                        document->getTransformation());
-
-    if (handle != NoHandle) {
-      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;
-        }
+  // Call the eyedropper command
+  if (clickedInk->isEyedropper()) {
+    callEyedropper(editor);
+    return true;
+  }
 
-        // Change to MovingPixelsState
-        transformSelection(editor, msg, handle);
+  if (clickedInk->isSelection()) {
+    // Transform selected pixels
+    if (document->isMaskVisible() && m_decorator->getTransformHandles(editor)) {
+      TransformHandles* transfHandles = m_decorator->getTransformHandles(editor);
+
+      // Get the handle covered by the mouse.
+      HandleType handle = transfHandles->getHandleAtPoint(editor,
+        msg->position(),
+        document->getTransformation());
+
+      if (handle != NoHandle) {
+        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, handle);
+        }
+        return true;
       }
-      return true;
     }
-  }
 
-  // Move selected pixels
-  if (editor->isInsideSelection() &&
-      currentTool->getInk(0)->isSelection() &&
-      msg->left()) {
-    if (!layer->isWritable()) {
-      Alert::show(PACKAGE "<<The layer is locked.||&Close");
+    // Move selected pixels
+    if (editor->isInsideSelection() && msg->left()) {
+      if (!layer->isWritable()) {
+        Alert::show(PACKAGE "<<The layer is locked.||&Close");
+        return true;
+      }
+
+      // Change to MovingPixelsState
+      transformSelection(editor, msg, MoveHandle);
       return true;
     }
-
-    // Change to MovingPixelsState
-    transformSelection(editor, msg, MoveHandle);
-    return true;
-  }
-
-  // Call the eyedropper command
-  if (clickedInk->isEyedropper()) {
-    onMouseMove(editor, msg);
-    return true;
   }
 
   // Start the Tool-Loop
@@ -263,16 +262,8 @@ bool StandbyState::onMouseMove(Editor* editor, MouseMessage* msg)
   // We control eyedropper tool from here. TODO move this to another place
   if (msg->left() || msg->right()) {
     tools::Ink* clickedInk = editor->getCurrentEditorInk();
-    if (clickedInk->isEyedropper()) {
-      Command* eyedropper_cmd =
-        CommandsModule::instance()->getCommandByName(CommandId::Eyedropper);
-      bool fg = (static_cast<tools::PickInk*>(clickedInk)->target() == tools::PickInk::Fg);
-
-      Params params;
-      params.set("target", fg ? "foreground": "background");
-
-      UIContext::instance()->executeCommand(eyedropper_cmd, &params);
-    }
+    if (clickedInk->isEyedropper())
+      callEyedropper(editor);
   }
 
   editor->moveDrawingCursor();
@@ -561,6 +552,22 @@ void StandbyState::transformSelection(Editor* editor, MouseMessage* msg, HandleT
   }
 }
 
+void StandbyState::callEyedropper(Editor* editor)
+{
+  tools::Ink* clickedInk = editor->getCurrentEditorInk();
+  if (!clickedInk->isEyedropper())
+    return;
+
+  Command* eyedropper_cmd =
+    CommandsModule::instance()->getCommandByName(CommandId::Eyedropper);
+  bool fg = (static_cast<tools::PickInk*>(clickedInk)->target() == tools::PickInk::Fg);
+
+  Params params;
+  params.set("target", fg ? "foreground": "background");
+
+  UIContext::instance()->executeCommand(eyedropper_cmd, &params);
+}
+
 //////////////////////////////////////////////////////////////////////
 // Decorator
 
diff --git a/src/app/ui/editor/standby_state.h b/src/app/ui/editor/standby_state.h
index 1ad96e4..23bfaee 100644
--- a/src/app/ui/editor/standby_state.h
+++ b/src/app/ui/editor/standby_state.h
@@ -76,6 +76,7 @@ namespace app {
 
   private:
     void transformSelection(Editor* editor, ui::MouseMessage* msg, HandleType handle);
+    void callEyedropper(Editor* editor);
 
     Decorator* m_decorator;
   };

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/aseprite.git



More information about the Pkg-games-commits mailing list