Exemple #1
0
        internal static Task <Rect> Select(SelectControl2.ModeType mode, Rect previousRegion)
        {
            _taskCompletionSource = new TaskCompletionSource <Rect>();

            Selectors.Clear();

            foreach (var monitor in Monitor.AllMonitorsGranular())
            {
                var selector = new RegionSelector();
                selector.Select(monitor, mode, previousRegion, RegionSelected, RegionChanged, RegionAborted);

                Selectors.Add(selector);
            }

            //Return only when the region gets selected.
            return(_taskCompletionSource.Task);
        }
        public void Select(Monitor monitor, SelectControl2.ModeType mode, Rect previousRegion, Action <Rect> selected, Action <Monitor> changed, Action aborted)
        {
            //Resize to fit given window.
            Left   = monitor.Bounds.Left;
            Top    = monitor.Bounds.Top;
            Width  = monitor.Bounds.Width;
            Height = monitor.Bounds.Height;

            Monitor = monitor;

            _scale    = monitor.Dpi / 96d;
            _selected = selected;
            _changed  = changed;
            _aborted  = aborted;

            SelectControl.BackImage = CaptureBackground();
            SelectControl.Mode      = mode;

            if (mode == SelectControl2.ModeType.Region)
            {
                //Since each region selector is attached to a single screen, the selection must be translated.
                if (!previousRegion.IsEmpty)
                {
                    previousRegion.Offset(monitor.Bounds.Left * -1, monitor.Bounds.Right * -1);
                }

                SelectControl.Selected = previousRegion;
                SelectControl.Windows.Clear();
            }
            else if (mode == SelectControl2.ModeType.Window)
            {
                var win = Native.EnumerateWindows();

                //Take into consederation each screen dpi.
                //Adjust the position of the window.

                SelectControl.Windows = win.AdjustPosition(monitor.Bounds.Left, monitor.Bounds.Top);
            }

            //Call the selector to select the region.
            SelectControl.IsPickingRegion = true;
            Show();
        }