Exemple #1
0
        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();
            }
        }
Exemple #2
0
        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);
                    }
                }
            }
        }