void StandbyState::transformSelection(Editor* editor, MouseMessage* msg, HandleType handle) { try { EditorCustomizationDelegate* customization = editor->getCustomizationDelegate(); Document* document = editor->document(); base::UniquePtr<Image> tmpImage(new_image_from_mask(editor->getSite())); gfx::Point origin = document->mask()->bounds().getOrigin(); int opacity = 255; PixelsMovementPtr pixelsMovement( new PixelsMovement(UIContext::instance(), editor->getSite(), tmpImage, origin, opacity, "Transformation")); // If the Ctrl key is pressed start dragging a copy of the selection if (customization && customization->isCopySelectionKeyPressed()) 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"); ui::set_mouse_cursor(kForbiddenCursor); } catch (const std::bad_alloc&) { StatusBar::instance()->showTip(1000, "Not enough memory to transform the selection"); ui::set_mouse_cursor(kForbiddenCursor); } }
void NewBrushCommand::createBrush(const Mask* mask) { doc::ImageRef image(new_image_from_mask( UIContext::instance()->activeSite(), mask)); if (!image) return; // New brush doc::BrushRef brush(new doc::Brush()); brush->setImage(image.get()); brush->setPatternOrigin(mask->bounds().getOrigin()); // TODO add a active stock property in app::Context ContextBar* ctxBar = App::instance()->getMainWindow()->getContextBar(); int slot = ctxBar->addBrush(brush); ctxBar->setActiveBrush(brush); // Get the shortcut for this brush and show it to the user Params params; params.set("change", "custom"); params.set("slot", base::convert_to<std::string>(slot).c_str()); Key* key = KeyboardShortcuts::instance()->command( CommandId::ChangeBrush, params); if (key && !key->accels().empty()) { std::string tooltip; tooltip += "Shortcut: "; tooltip += key->accels().front().toString(); StatusBar::instance()->showTip(2000, tooltip.c_str()); } }
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); } }