mirror of
https://github.com/aseprite/aseprite.git
synced 2024-10-05 06:20:10 +00:00
Fix crash using eyedropper above a (hidden) selection handle
We need to be in a Selection ink to start moving pixels from transform handles.
This commit is contained in:
parent
497f0ffee0
commit
3ba3b48fd7
@ -195,9 +195,15 @@ bool StandbyState::onMouseDown(Editor* editor, MouseMessage* msg)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Call the eyedropper command
|
||||||
|
if (clickedInk->isEyedropper()) {
|
||||||
|
callEyedropper(editor);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clickedInk->isSelection()) {
|
||||||
// Transform selected pixels
|
// Transform selected pixels
|
||||||
if (document->isMaskVisible() &&
|
if (document->isMaskVisible() && m_decorator->getTransformHandles(editor)) {
|
||||||
m_decorator->getTransformHandles(editor)) {
|
|
||||||
TransformHandles* transfHandles = m_decorator->getTransformHandles(editor);
|
TransformHandles* transfHandles = m_decorator->getTransformHandles(editor);
|
||||||
|
|
||||||
// Get the handle covered by the mouse.
|
// Get the handle covered by the mouse.
|
||||||
@ -222,9 +228,7 @@ bool StandbyState::onMouseDown(Editor* editor, MouseMessage* msg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Move selected pixels
|
// Move selected pixels
|
||||||
if (editor->isInsideSelection() &&
|
if (editor->isInsideSelection() && msg->left()) {
|
||||||
currentTool->getInk(0)->isSelection() &&
|
|
||||||
msg->left()) {
|
|
||||||
if (!layer->isWritable()) {
|
if (!layer->isWritable()) {
|
||||||
Alert::show(PACKAGE "<<The layer is locked.||&Close");
|
Alert::show(PACKAGE "<<The layer is locked.||&Close");
|
||||||
return true;
|
return true;
|
||||||
@ -234,11 +238,6 @@ bool StandbyState::onMouseDown(Editor* editor, MouseMessage* msg)
|
|||||||
transformSelection(editor, msg, MoveHandle);
|
transformSelection(editor, msg, MoveHandle);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Call the eyedropper command
|
|
||||||
if (clickedInk->isEyedropper()) {
|
|
||||||
onMouseMove(editor, msg);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start the Tool-Loop
|
// 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
|
// We control eyedropper tool from here. TODO move this to another place
|
||||||
if (msg->left() || msg->right()) {
|
if (msg->left() || msg->right()) {
|
||||||
tools::Ink* clickedInk = editor->getCurrentEditorInk();
|
tools::Ink* clickedInk = editor->getCurrentEditorInk();
|
||||||
if (clickedInk->isEyedropper()) {
|
if (clickedInk->isEyedropper())
|
||||||
Command* eyedropper_cmd =
|
callEyedropper(editor);
|
||||||
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, ¶ms);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
editor->moveDrawingCursor();
|
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, ¶ms);
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// Decorator
|
// Decorator
|
||||||
|
|
||||||
|
@ -76,6 +76,7 @@ namespace app {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void transformSelection(Editor* editor, ui::MouseMessage* msg, HandleType handle);
|
void transformSelection(Editor* editor, ui::MouseMessage* msg, HandleType handle);
|
||||||
|
void callEyedropper(Editor* editor);
|
||||||
|
|
||||||
Decorator* m_decorator;
|
Decorator* m_decorator;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user