private void Crop(Cairo.Rectangle rectangle) { var normalizedRectangle = CairoHelpers.NormalizeRectangle(rectangle); var croppedScreenshot = new Pixbuf( this.screenshot, (int)normalizedRectangle.X, (int)normalizedRectangle.Y, (int)normalizedRectangle.Width, (int)normalizedRectangle.Height); if (croppedScreenshot == null) { return; } var snippingWindow = this.Parent as SnippingWindow; var imagePath = ScreenshotHelpers.SaveAndReturnPath(croppedScreenshot); if (!string.IsNullOrEmpty(imagePath)) { if (SettingsFeature.Settings.CopyToClipboard) { ScreenshotHelpers.CopyToClipboard(this, croppedScreenshot); } this.Close(snippingWindow); snippingWindow.UpdateInsightsImage(imagePath); snippingWindow.OpenInsights(); } else { this.Close(snippingWindow); var md = new MessageDialog(snippingWindow.Toplevel as Gtk.Window, DialogFlags.Modal, MessageType.Error, ButtonsType.Ok, string.Empty); md.Text = "Error ocurred during snip. Please try again."; md.Response += (o, args) => { md.Destroy(); }; md.Show(); } }
public static void ShowInEveryMonitor(Action <object, UIActionEventArgs> handler) { windows = new List <Window>(); #if MACOS var xamarinMacScreenshots = new List <(string path, CoreGraphics.CGRect bounds)>(); xamarinMacScreenshots = MacOSScreenshotHelpers.Take(); #endif var displayManager = Gdk.DisplayManager.Get(); var displays = displayManager.ListDisplays(); foreach (var display in displays) { for (int i = 0; i < display.NScreens; i++) { var screen = display.GetScreen(i); var monitors = screen.NMonitors; for (int j = 0; j < monitors; j++) { var monitor = screen.GetMonitorGeometry(j); Gdk.Pixbuf screenshot; #if MACOS screenshot = FirstMatchingScreenshot(monitor, xamarinMacScreenshots); if (screenshot.Width != monitor.Width || screenshot.Height != monitor.Height) { var scaled = screenshot.ScaleSimple( monitor.Width, monitor.Height, Gdk.InterpType.Bilinear); screenshot = scaled; } #else screenshot = ScreenshotHelpers.Take(monitor); #endif CreateSnippingWindow(monitor, screenshot, handler); } } } }