public override void Redo() { Document doc = PintaCore.Workspace.ActiveDocument; // Copy the paste to the temp layer doc.CreateSelectionLayer(); doc.ShowSelectionLayer = true; using (Cairo.Context g = new Cairo.Context(doc.SelectionLayer.Surface)) { g.DrawPixbuf(paste_image, new Cairo.Point(0, 0)); } Swap(); PintaCore.Workspace.Invalidate(); PintaCore.Tools.SetCurrentTool(Catalog.GetString("Move Selected Pixels")); }
private void HandlerPintaCoreActionsEditPasteActivated(object sender, EventArgs e) { Document doc = PintaCore.Workspace.ActiveDocument; PintaCore.Tools.Commit(); Gtk.Clipboard cb = Gtk.Clipboard.Get(Gdk.Atom.Intern("CLIPBOARD", false)); Path p; // Don't dispose this, as we're going to give it to the history Gdk.Pixbuf image = cb.WaitForImage(); if (image == null) { return; } Gdk.Size canvas_size = PintaCore.Workspace.ImageSize; // If the image being pasted is larger than the canvas size, allow the user to optionally resize the canvas if (image.Width > canvas_size.Width || image.Height > canvas_size.Height) { string message = Catalog.GetString("The image being pasted is larger than the canvas size. What would you like to do?"); var enlarge_dialog = new MessageDialog(PintaCore.Chrome.MainWindow, DialogFlags.Modal, MessageType.Question, ButtonsType.None, message); enlarge_dialog.AddButton(Catalog.GetString("Expand canvas"), ResponseType.Accept); enlarge_dialog.AddButton(Catalog.GetString("Don't change canvas size"), ResponseType.Reject); enlarge_dialog.AddButton(Stock.Cancel, ResponseType.Cancel); enlarge_dialog.DefaultResponse = ResponseType.Accept; ResponseType response = (ResponseType)enlarge_dialog.Run(); enlarge_dialog.Destroy(); if (response == ResponseType.Accept) { PintaCore.Workspace.ResizeCanvas(image.Width, image.Height, Pinta.Core.Anchor.Center); PintaCore.Actions.View.UpdateCanvasScale(); } else if (response == ResponseType.Cancel || response == ResponseType.DeleteEvent) { return; } } // Copy the paste to the temp layer doc.CreateSelectionLayer(); doc.ShowSelectionLayer = true; using (Cairo.Context g = new Cairo.Context(doc.SelectionLayer.Surface)) { g.DrawPixbuf(image, new Cairo.Point(0, 0)); p = g.CreateRectanglePath(new Rectangle(0, 0, image.Width, image.Height)); } PintaCore.Tools.SetCurrentTool(Catalog.GetString("Move Selected Pixels")); Path old_path = doc.SelectionPath; bool old_show_selection = doc.ShowSelection; doc.SelectionPath = p; doc.ShowSelection = true; doc.Workspace.Invalidate(); doc.History.PushNewItem(new PasteHistoryItem(image, old_path, old_show_selection)); }