bool StandbyState::onSetCursor(Editor* editor, const gfx::Point& mouseScreenPos) { tools::Ink* ink = editor->getCurrentEditorInk(); // See if the cursor is in some selection handle. if (m_decorator->onSetCursor(ink, editor, mouseScreenPos)) return true; if (ink) { // If the current tool change selection (e.g. rectangular marquee, etc.) if (ink->isSelection()) { // Move pixels if (editor->isInsideSelection()) { EditorCustomizationDelegate* customization = editor->getCustomizationDelegate(); if ((customization) && int(customization->getPressedKeyAction(KeyContext::TranslatingSelection) & KeyAction::CopySelection)) editor->showMouseCursor(kArrowPlusCursor); else editor->showMouseCursor(kMoveCursor); return true; } } else if (ink->isEyedropper()) { editor->showMouseCursor(kEyedropperCursor); return true; } else if (ink->isZoom()) { editor->showMouseCursor(kMagnifierCursor); return true; } else if (ink->isScrollMovement()) { editor->showMouseCursor(kScrollCursor); return true; } else if (ink->isCelMovement()) { editor->showMouseCursor(kMoveCursor); return true; } else if (ink->isSlice()) { editor->showBrushPreview(mouseScreenPos); return true; } } // Draw if (editor->canDraw()) { editor->showBrushPreview(mouseScreenPos); } // Forbidden else { editor->showMouseCursor(kForbiddenCursor); } return true; }
void StandbyState::transformSelection(Editor* editor, MouseMessage* msg, HandleType handle) { Document* document = editor->document(); for (auto docView : UIContext::instance()->getAllDocumentViews(document)) { if (docView->editor()->isMovingPixels()) { // TODO Transfer moving pixels state to this editor docView->editor()->dropMovingPixels(); } } try { // Clear brush preview, as the extra cel will be replaced with the // transformed image. editor->brushPreview().hide(); EditorCustomizationDelegate* customization = editor->getCustomizationDelegate(); base::UniquePtr<Image> tmpImage(new_image_from_mask(editor->getSite())); PixelsMovementPtr pixelsMovement( new PixelsMovement(UIContext::instance(), editor->getSite(), tmpImage, document->mask(), "Transformation")); // If the Ctrl key is pressed start dragging a copy of the selection if ((customization) && int(customization->getPressedKeyAction(KeyContext::TranslatingSelection) & KeyAction::CopySelection)) pixelsMovement->copyMask(); else pixelsMovement->cutMask(); editor->setState(EditorStatePtr(new MovingPixelsState(editor, msg, pixelsMovement, handle))); } catch (const LockedDocumentException&) { // Other editor is locking the document. // TODO steal the PixelsMovement of the other editor and use it for this one. StatusBar::instance()->showTip(1000, "The sprite is locked in other editor"); editor->showMouseCursor(kForbiddenCursor); } catch (const std::bad_alloc&) { StatusBar::instance()->showTip(1000, "Not enough memory to transform the selection"); editor->showMouseCursor(kForbiddenCursor); } }