Exemplo n.º 1
0
 public MousePosition(int x, int y)
     : this()
 {
     ElementPosition = new System.Windows.Point(x, y);
     Position = new Point(x, y);
     var g = Model.GridSize * Scale;
     GridPoint = new Point((int)(Position.X / g), (int)(Position.Y / g));
 }
Exemplo n.º 2
0
 public MousePosition(Point point)
     : this()
 {
     ElementPosition = new System.Windows.Point(point.X, point.Y);
     Position = point;
     var g = Model.GridSize * Scale;
     GridPoint = new Point((int)(Position.X / g), (int)(Position.Y / g));
 }
        public bool EllipseContains(Ellipse ellipse, System.Windows.Point location)
        {
            var pos     = ellipse.TransformToAncestor(CanvasInfo).Transform(new System.Windows.Point(0, 0));
            var center  = new System.Windows.Point(pos.X + ellipse.Width / 2, pos.Y + ellipse.Height / 2);
            var radiusX = ellipse.Width / 2;
            var radiusY = ellipse.Height / 2;

            if (radiusX <= 0.0 || radiusY <= 0.0)
            {
                return(false);
            }
            var normalized = new System.Windows.Point(location.X - center.X, location.Y - center.Y);

            return(((normalized.X * normalized.X) / (radiusX * radiusX)) + ((normalized.Y * normalized.Y) / (radiusY * radiusY)) <= 1.0);
        }
Exemplo n.º 4
0
        private bool LeftMouseDownOnWheelCanExecute(Image image)
        {
            bool canExecute = false;

            if (image is IInputElement element)
            {
                System.Windows.Point point = Mouse.GetPosition(element);
                double cartX         = point.X - _wheelImageSize / 2;
                double cartY         = -point.Y + _wheelImageSize / 2;
                double length        = Math.Sqrt(Math.Pow(cartX, 2) + Math.Pow(cartY, 2));
                double measureLength = length - _beginningOfWheel;
                canExecute = 0 < measureLength && measureLength < 25;
            }
            return(canExecute);
        }
        public bool RotatedRectContains(Rectangle rect, System.Windows.Point location)
        {
            var rectCorner   = new System.Windows.Point(Canvas.GetLeft(rect), Canvas.GetTop(rect));
            var rectRotation = rect.RenderTransform as RotateTransform;

            if (rectRotation == null)
            {
                return(false);
            }
            var transform = new RotateTransform(-rectRotation.Angle, rectCorner.X + rectRotation.CenterX, rectCorner.Y + rectRotation.CenterY);
            var rotated   = transform.Transform(location);

            return(rotated.X > rectCorner.X && rotated.X < rectCorner.X + rect.Width && rotated.Y > rectCorner.Y &&
                   rotated.Y < rectCorner.Y + rect.Height);
        }
Exemplo n.º 6
0
        // Sets the correct position of Monika depending on taskbar position and visibility
        public void SetPositionBottomRight(Screen screen)
        {
            var position = new System.Windows.Point(screen.Bounds.X + screen.Bounds.Width - this.Width,
                                                    screen.Bounds.Y + screen.Bounds.Height - this.Height);

            if (MonikaiSettings.Default.LeftAlign)
            {
                position.X = screen.Bounds.X;
            }

            if (!MainWindow.IsForegroundFullScreen(screen))
            {
                var taskbars = this.FindDockedTaskBars(screen, out bool isLeft);
                var taskbar  = taskbars.FirstOrDefault(x => x.X != 0 || x.Y != 0 || x.Width != 0 || x.Height != 0);
                if (taskbar != default(Rectangle))
                {
                    if (taskbar.Width >= taskbar.Height)
                    {
                        if (taskbar.Y != screen.Bounds.Y)
                        {
                            // Bottom
                            position.Y -= taskbar.Height;
                        }
                    }
                    else
                    {
                        // Left/Right
                        if (isLeft)
                        {
                            if (MonikaiSettings.Default.LeftAlign)
                            {
                                position.X += taskbar.Width;
                            }
                        }
                        else
                        {
                            if (!MonikaiSettings.Default.LeftAlign)
                            {
                                position.X -= taskbar.Width;
                            }
                        }
                    }
                }
            }

            this.Top  = position.Y;
            this.Left = position.X;
        }
Exemplo n.º 7
0
        public void actionHandler(object sender, MessageEvent e)
        {
            if (e.triggerWord.Equals("Fix"))
            {
                System.Windows.Point p = eyeGaze.GetCursorPosition();
                MessageBox.Show(p.X + "and" + p.Y);
                Dictionary <Point, string> wordWithCoordinates = ocr.getWordWithCoordinates();
                List <Point> coordinates = new List <Point>(wordWithCoordinates.Keys);
                Dictionary <Point, double>           distanceFromCoordinate = findDistanceFromCoordinate(177, 480, coordinates);
                List <KeyValuePair <Point, double> > sortedPoints           = sortByDistance(distanceFromCoordinate);

                List <KeyValuePair <Point, string> > sortedValues = sortValues(wordWithCoordinates, sortedPoints);
                word.setSortedValues(sortedValues);
                word.openWord();
            }
        }
		Size IWebBrowserContainer.GetOuterSize()
		{
			PresentationSource presentationSource = PresentationSource.FromVisual(this);
			if ((presentationSource == null) || (presentationSource.CompositionTarget == null))
			{
				return Size.Empty;
			}
			CompositionTarget compositionTarget = presentationSource.CompositionTarget;
			var rootElement = compositionTarget.RootVisual as FrameworkElement;
			if (rootElement == null)
			{
				return Size.Empty;
			}

			var size = new System.Windows.Point(rootElement.ActualWidth, rootElement.ActualHeight);
			System.Windows.Point outerSize = compositionTarget.TransformToDevice.Transform(size);
			return new Size((Int32)outerSize.X, (Int32)outerSize.Y);
		}
        void AlignLaserWindow()
        {
            try
            {
                System.Windows.Point topLeft     = webkitHost.PointToScreen(new System.Windows.Point(0, 0));
                System.Windows.Point bottomRight = webkitHost.PointToScreen(
                    new System.Windows.Point(webkitHost.ActualWidth, webkitHost.ActualHeight));

                _overlayWnd.Width  = bottomRight.X - topLeft.X;
                _overlayWnd.Height = bottomRight.Y - topLeft.Y;
                _overlayWnd.Top    = topLeft.Y;
                _overlayWnd.Left   = topLeft.X;
            }
            catch
            {
                //can throw presentation source not attached during loading
            }
        }
Exemplo n.º 10
0
        /// <summary>
        /// Gets a render of the current UIElement
        /// </summary>
        /// <param name="source">UIElement to screenshot</param>
        /// <param name="dpi">The DPI of the source.</param>
        /// <param name="size">The size of the destination image.</param>
        /// <returns>An ImageSource</returns>
        public static RenderTargetBitmap GetRender(this UIElement source, double dpi, System.Windows.Size size)
        {
            Rect bounds = VisualTreeHelper.GetDescendantBounds(source);

            var scale  = dpi / 96.0;
            var width  = (bounds.Width + bounds.X) * scale;
            var height = (bounds.Height + bounds.Y) * scale;

            #region If no bounds

            if (bounds.IsEmpty)
            {
                var control = source as Control;

                if (control != null)
                {
                    width  = control.ActualWidth * scale;
                    height = control.ActualHeight * scale;
                }

                bounds = new Rect(new System.Windows.Point(0d, 0d), new System.Windows.Point(width, height));
            }

            #endregion

            var rtb = new RenderTargetBitmap((int)Math.Round(width, MidpointRounding.AwayFromZero),
                                             (int)Math.Round(height, MidpointRounding.AwayFromZero), dpi, dpi, PixelFormats.Pbgra32);

            DrawingVisual dv = new DrawingVisual();
            using (DrawingContext ctx = dv.RenderOpen())
            {
                VisualBrush vb = new VisualBrush(source);

                var locationRect = new System.Windows.Point(bounds.X, bounds.Y);
                var sizeRect     = new System.Windows.Size(bounds.Width, bounds.Height);

                ctx.DrawRectangle(vb, null, new Rect(locationRect, sizeRect));
            }

            rtb.Render(dv);
            return((RenderTargetBitmap)rtb.GetAsFrozen());
        }
Exemplo n.º 11
0
        private void imgHMIBkg_MouseMove(object sender, MouseEventArgs e)
        {
            System.Windows.Point mouseP    = getMouseLocationOnImage(e);
            System.Windows.Point relMouseP = new System.Windows.Point(mouseP.X / imgHMIBkg.Source.Width, mouseP.Y / imgHMIBkg.Source.Height);
            //update local cursor position in minimap
            minimapController.UpdateLocalCursorPos(relMouseP.X, relMouseP.Y);
            //lbldebugText.Content = String.Format("Local mouse Pos: ({0},{1})", relMouseP.X, relMouseP.Y);
            MouseEventMessage mouseEventMsg = new MouseEventMessage();

            mouseEventMsg.UserID  = userID;
            mouseEventMsg.RelPosX = (float)relMouseP.X;
            mouseEventMsg.RelPosY = (float)relMouseP.Y;
            //at the moment, by the default the focused area is the entire HMI screen, if focus on a smaller area, this needs to be changed
            mouseEventMsg.FocusAreaTop    = 0;
            mouseEventMsg.FocusAreaLeft   = 0;
            mouseEventMsg.FocusAreaRight  = 0.5f;
            mouseEventMsg.FocusAreaBottom = 0.5f;
            sendOverMouseEvent(mouseEventMsg);
            //UpdateMinimap();
        }
        private void Grid_MouseMove(object sender, MouseEventArgs e)
        {
            if (sourceImg.IsMouseCaptured)
            {
                System.Windows.Point currentPoint = e.GetPosition(cusCanvas);

                double x = startDrag.X < currentPoint.X ? startDrag.X : currentPoint.X;
                double y = startDrag.Y < currentPoint.Y ? startDrag.Y : currentPoint.Y;

                if (rectangle.Visibility == Visibility.Hidden)
                {
                    rectangle.Visibility = Visibility.Visible;
                }

                Canvas.SetLeft(rectangle, x);
                Canvas.SetTop(rectangle, y);
                rectangle.Width  = Math.Abs(e.GetPosition(cusCanvas).X - startDrag.X); //Set its size,下次点击width为0
                rectangle.Height = Math.Abs(e.GetPosition(cusCanvas).Y - startDrag.Y);
            }
        }
        public DraggableVisualFeedback(UIElement uiElement)
            : this()
        {
            _grabPosition = Mouse.GetPosition(uiElement);

            var bounds = VisualTreeHelper.GetDescendantBounds(uiElement);
            var renderTargetBitmap = new RenderTargetBitmap((int)bounds.Width, (int)bounds.Height, 96, 96, PixelFormats.Pbgra32);

            var drawingVisual = new DrawingVisual();
            using (var drawingContext = drawingVisual.RenderOpen())
            {
                var visualBrush = new VisualBrush(uiElement);
                drawingContext.DrawRectangle(visualBrush, null, new Rect(new System.Windows.Point(), bounds.Size));
            }

            renderTargetBitmap.Render(drawingVisual);

            MaxWidth = renderTargetBitmap.PixelWidth;
            MaxHeight = renderTargetBitmap.PixelHeight;
            TheImage.Source = renderTargetBitmap;
        }
Exemplo n.º 14
0
        public static double FindDistanceToSegmentSquared(System.Windows.Point pt, System.Windows.Point p1, System.Windows.Point p2, out System.Windows.Point closest)
        {
            double dx = p2.X - p1.X;
            double dy = p2.Y - p1.Y;

            if ((dx == 0) && (dy == 0))
            {
                // It's a point not a line segment.
                closest = p1;
                dx      = pt.X - p1.X;
                dy      = pt.Y - p1.Y;
                return(dx * dx + dy * dy);
            }

            // Calculate the t that minimizes the distance.
            double t = ((pt.X - p1.X) * dx + (pt.Y - p1.Y) * dy) / (dx * dx + dy * dy);

            // See if this represents one of the segment's
            // end points or a point in the middle.
            if (t < 0)
            {
                closest = new System.Windows.Point(p1.X, p1.Y);
                dx      = pt.X - p1.X;
                dy      = pt.Y - p1.Y;
            }
            else if (t > 1)
            {
                closest = new System.Windows.Point(p2.X, p2.Y);
                dx      = pt.X - p2.X;
                dy      = pt.Y - p2.Y;
            }
            else
            {
                closest = new System.Windows.Point(p1.X + t * dx, p1.Y + t * dy);
                dx      = pt.X - closest.X;
                dy      = pt.Y - closest.Y;
            }

            return(dx * dx + dy * dy);
        }
Exemplo n.º 15
0
        private async void Recorder_OnLoaded(object sender, RoutedEventArgs e)
        {
            #region If Snapshot

            if (UserSettings.All.SnapshotMode)
            {
                EnableSnapshot_Executed(null, null);
            }

            #endregion

            await Task.Factory.StartNew(UpdateScreenDpi);

            _thisWindow = new WindowInteropHelper(this).Handle;

            #region Timer

            _garbageTimer.Interval = 3000;
            _garbageTimer.Elapsed += GarbageTimer_Tick;
            _garbageTimer.Start();

            #endregion

            //If fullscreen.
            if (UserSettings.All.FullScreenMode)
            {
                EnableFullScreen_Executed(null, null);

                //Reset the values.
                _wasThin     = false;
                _latestPoint = new System.Windows.Point(Math.Round((SystemParameters.WorkArea.Width - SystemParameters.WorkArea.Left - Width) / 2),
                                                        Math.Round((SystemParameters.WorkArea.Height - SystemParameters.WorkArea.Top - Height) / 2));
            }

            CommandManager.InvalidateRequerySuggested();

            SystemEvents.PowerModeChanged += System_PowerModeChanged;

            RecordPauseButton.Focus();
        }
Exemplo n.º 16
0
        public DraggableVisualFeedback(UIElement uiElement)
            : this()
        {
            _grabPosition = Mouse.GetPosition(uiElement);

            var bounds             = VisualTreeHelper.GetDescendantBounds(uiElement);
            var renderTargetBitmap = new RenderTargetBitmap((int)bounds.Width, (int)bounds.Height, 96, 96, PixelFormats.Pbgra32);

            var drawingVisual = new DrawingVisual();

            using (var drawingContext = drawingVisual.RenderOpen())
            {
                var visualBrush = new VisualBrush(uiElement);
                drawingContext.DrawRectangle(visualBrush, null, new Rect(new System.Windows.Point(), bounds.Size));
            }

            renderTargetBitmap.Render(drawingVisual);

            MaxWidth        = renderTargetBitmap.PixelWidth;
            MaxHeight       = renderTargetBitmap.PixelHeight;
            TheImage.Source = renderTargetBitmap;
        }
Exemplo n.º 17
0
        public IntPtr GetWindowAt(Point screenCoordinates, out Point transformedScreenCoordinates)
        {
            IntPtr result = IntPtr.Zero;

            transformedScreenCoordinates = screenCoordinates;
            foreach (Window currentWindow in windowToBody.Keys)
            {
                Matrix matrix = currentWindow.GetMatrix(currentWindow);
                matrix.Invert();

                Point windowCoordinates = NativeMethods.ScreenToClient(currentWindow, screenCoordinates);
                System.Windows.Point transformedPoint = matrix.Transform(windowCoordinates.ToPoint());
                transformedScreenCoordinates = NativeMethods.ClientToScreen(currentWindow, transformedPoint.ToPoint());

                SystemWindow windowAtPoint = SystemWindow.FromPointEx(transformedScreenCoordinates.X, transformedScreenCoordinates.Y, true, true);
                if (windowAtPoint != null && windowAtPoint.HWnd.Equals(currentWindow.HWnd))
                {
                    result = windowAtPoint.HWnd;
                    break;
                }
            }

            return(result);
        }
Exemplo n.º 18
0
 static public Point toDraw(this System.Windows.Point wPoint)
 {
     return(new Point((int)wPoint.X, (int)wPoint.Y));
 }
Exemplo n.º 19
0
        public bool isInArea(System.Windows.Point wPoint)
        {
            Point point = new Point((int)wPoint.X, (int)wPoint.Y);

            return(isInArea(point));
        }
Exemplo n.º 20
0
 public Point PointToScreen(Point pointWin)
 {
     System.Windows.Point p = new System.Windows.Point();
     Point resultWpf = toWinPoint(_window.PointToScreen(p));
     Point resultScaled = resultWpf + new Size(pointWin);
     return resultScaled;
 }
		Size IWebBrowserContainer.GetInnerSize()
		{
			PresentationSource presentationSource = PresentationSource.FromVisual(this);
			if ((presentationSource == null) || (presentationSource.CompositionTarget == null))
			{
				return Size.Empty;
			}
			CompositionTarget compositionTarget = presentationSource.CompositionTarget;

			var size = new System.Windows.Point(this.ActualWidth, this.ActualHeight);
			System.Windows.Point innerSize = compositionTarget.TransformToDevice.Transform(size);
			return new Size((Int32)innerSize.X, (Int32)innerSize.Y);
		}
		public bool EllipseContains(Ellipse ellipse, System.Windows.Point location)
		{
			var pos = ellipse.TransformToAncestor(CanvasInfo).Transform(new System.Windows.Point(0, 0));
			var center = new System.Windows.Point(pos.X + ellipse.Width / 2, pos.Y + ellipse.Height / 2);
			var radiusX = ellipse.Width / 2;
			var radiusY = ellipse.Height / 2;
			if (radiusX <= 0.0 || radiusY <= 0.0)
				return false;
			var normalized = new System.Windows.Point(location.X - center.X, location.Y - center.Y);
			return ((normalized.X * normalized.X) / (radiusX * radiusX)) + ((normalized.Y * normalized.Y) / (radiusY * radiusY)) <= 1.0;
		}
Exemplo n.º 23
0
 private void MoveListener(object s, MouseEventArgs e)
 {
     real_cursorpos = e.GetPosition(_window);
 }
Exemplo n.º 24
0
        private Bitmap getBitmap()
        {
            Bitmap bitmap;
            float  xScale = 1.0F * _bitmapWidth / _width;
            float  yScale = 1.0F * _bitmapHeight / _height;

            if (xScale < yScale)
            {
                _scale = xScale;
            }
            else
            {
                _scale = yScale;
            }

            //_shapeTransform = new TransformGroup();
            bitmap = new Bitmap(_bitmapWidth + _legendBoxWidth - _legendBoxOffsetX, _bitmapHeight + 2, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            using (Graphics canvas = Graphics.FromImage(bitmap))
            {
                using (Pen pen = new Pen(Color.Black, 1))
                {
                    using (Brush backgroundBrush = new SolidBrush(_colorBackground))
                    {
                        String countyCode         = "";
                        int    countyOccurenceKey = 0;

                        canvas.FillRectangle(backgroundBrush, 0, 0, _bitmapWidth + _legendBoxWidth - _legendBoxOffsetX, _bitmapHeight + 2);

                        for (int recordIndex = 0; recordIndex < _shapeFile.Records.Count; recordIndex++)
                        {
                            try
                            {
                                ShapeFileRecord record = _shapeFile.Records[recordIndex];

                                if (_countyInformation.IsNotEmpty())
                                {
                                    countyCode = record.Attributes[2].ToString();
                                    int countyId = getCountyId(countyCode);
                                    if (countyId > 0)
                                    {
                                        ISpeciesFact    fact  = null;
                                        SpeciesFactList facts = null;
                                        if (_counties.Exists(countyId))
                                        {
                                            try
                                            {
                                                facts = _countyInformation.GetSpeciesFacts(_counties.Get(countyId));
                                                if (facts.IsNotEmpty())
                                                {
                                                    fact = facts[0];
                                                }
                                            }
                                            catch (Exception)
                                            {
                                                throw;
                                            }

                                            if (fact.IsNotNull())
                                            {
                                                countyOccurenceKey = fact.MainField.EnumValue.KeyInt.GetValueOrDefault(0);
                                            }
                                            else
                                            {
                                                countyOccurenceKey = 0;
                                            }
                                        }
                                        else
                                        {
                                            countyOccurenceKey = 0;
                                        }
                                    }
                                }
                                else
                                {
                                    countyOccurenceKey = -1;
                                }

                                for (int i = 0; i < record.NumberOfParts; i++)
                                {
                                    List <Point> points = new List <Point>();

                                    // Determine the starting index and the end index
                                    // into the points array that defines the figure.
                                    int start = record.Parts[i];
                                    int end;
                                    if (record.NumberOfParts > 1 && i != (record.NumberOfParts - 1))
                                    {
                                        end = record.Parts[i + 1];
                                    }
                                    else
                                    {
                                        end = record.NumberOfPoints;
                                    }


                                    for (int j = start; j < end; j++)
                                    {
                                        System.Windows.Point pt = record.Points[j];

                                        // Transform from lon/lat to canvas coordinates.
                                        //pt = this._shapeTransform.Transform(pt);

                                        Point point = new Point(_legendBoxWidth - _legendBoxOffsetX + (int)((pt.X - _xMin) * _scale), _bitmapHeight - (int)((pt.Y - _yMin) * _scale));
                                        points.Add(point);
                                    }

                                    using (Brush countyOccurrenceBrush = getBrush(countyOccurenceKey))
                                    {
                                        canvas.FillPolygon(countyOccurrenceBrush, points.ToArray());
                                    }

                                    canvas.DrawPolygon(pen, points.ToArray());
                                }
                            }
                            catch (Exception)
                            {
                                throw;
                            }
                        }

                        if (_countyInformation.IsEmpty())
                        {
                            using (Font font = new Font("Arial", 24 * _bitmapHeight / 708))
                            {
                                using (Brush brush = new SolidBrush(Color.Red))
                                {
                                    canvas.DrawString("Information saknas", font, brush, _legendBoxWidth, _bitmapHeight / 2);
                                }
                            }
                        }

                        if (UpdateInformation.IsNotEmpty())
                        {
                            canvas.DrawImage(GetUpdateInformationBox(),
                                             0,
                                             0);
                            canvas.DrawImage(getLegendBox(), 0, _updateInformationBoxHeight);
                        }
                        else
                        {
                            canvas.DrawImage(getLegendBox(), 0, 0);
                        }
                    }
                }
            }

            return(bitmap);
        }
Exemplo n.º 25
0
        // Sets the correct position of Monika depending on taskbar position and visibility
        public void SetPosition(Screen screen)
        {
            // Override position if necessary
            if (MonikaiSettings.Default.ManualPosition)
            {
                this.Top  = MonikaiSettings.Default.ManualPositionY * this.dpiScale;
                this.Left = MonikaiSettings.Default.ManualPositionX * this.dpiScale;
                return;
            }

            // Only update screen ever so often, but necessary to avoid taskbar glitches
            if (DateTime.Now.Second % (MonikaiSettings.Default.PotatoPC ? 10 : 3) == 0 &&
                (this.settingsWindow == null || !this.settingsWindow.IsVisible))
            {
                this.UpdateMonikaScreen();
            }

            var position = new System.Windows.Point(
                screen.Bounds.X + screen.Bounds.Width - this.Width * (1 / this.dpiScale),
                screen.Bounds.Y + screen.Bounds.Height - this.Height * (1 / this.dpiScale));

            if (MonikaiSettings.Default.LeftAlign)
            {
                position.X = screen.Bounds.X;
            }

            if (!MainWindow.IsForegroundFullScreen(screen))
            {
                var taskbars = this.FindDockedTaskBars(screen, out var isLeft);
                var taskbar  = taskbars.FirstOrDefault(x => x.X != 0 || x.Y != 0 || x.Width != 0 || x.Height != 0);
                if (taskbar != default(Rectangle))
                {
                    if (taskbar.Width >= taskbar.Height)
                    {
                        if (taskbar.Y != screen.Bounds.Y)
                        {
                            // Bottom
                            position.Y -= taskbar.Height;
                        }
                    }
                    else
                    {
                        // Left/Right
                        if (isLeft)
                        {
                            if (MonikaiSettings.Default.LeftAlign)
                            {
                                position.X += taskbar.Width;
                            }
                        }
                        else
                        {
                            if (!MonikaiSettings.Default.LeftAlign)
                            {
                                position.X -= taskbar.Width;
                            }
                        }
                    }
                }
            }

            this.Top  = position.Y * this.dpiScale;
            this.Left = position.X * this.dpiScale;
        }
Exemplo n.º 26
0
        /// <summary>
        /// MouseHook event method, detects the mouse clicks.
        /// </summary>
        private void MouseHookTarget(object sender, CustomMouseEventArgs keyEventArgs)
        {
            _recordClicked = keyEventArgs.Button == MouseButton.Left && keyEventArgs.State == MouseButtonState.Pressed;
            _posCursor     = new System.Windows.Point(keyEventArgs.PosX, keyEventArgs.PosY);

            if (!IsMouseCaptured || Mouse.Captured == null || keyEventArgs.State == MouseButtonState.Pressed)
            {
                return;
            }

            //TODO: Make it work with parent handles...
            #region Mouse Up

            this.Cursor = Cursors.Arrow;

            try
            {
                var handle = Native.WindowFromPoint(keyEventArgs.PosX, keyEventArgs.PosY);
                var scale  = this.Scale();

                Process target = null;// Process.GetProcesses().FirstOrDefault(p => p.Handle == handle);

                var processes = Process.GetProcesses();
                foreach (var proc in processes)
                {
                    try
                    {
                        if (proc.MainWindowHandle != IntPtr.Zero && proc.HandleCount > 0 && (proc.Handle == handle || proc.MainWindowHandle == handle))
                        {
                            target = proc;
                            break;
                        }
                    }
                    catch (Exception)
                    {}
                }

                if (target == null || target.ProcessName == "ScreenToGif")
                {
                    return;
                }

                Native.RECT rect;
                Native.GetWindowRect(handle, out rect);

                #region Values

                //TODO: Check the position, different OS'.
                var top    = (rect.Top / scale) - 32;
                var left   = (rect.Left / scale) - 6;
                var height = ((rect.Bottom - rect.Top + 1) / scale) + 58;
                var width  = ((rect.Right - rect.Left + 1) / scale) + 12;

                #endregion

                #region Validate

                if (top < 0)
                {
                    top = 0;
                }
                if (left < 0)
                {
                    left = 0;
                }

                #endregion

                Top    = top;
                Left   = left;
                Height = height;
                Width  = width;
            }
            catch (Exception ex)
            {
                LogWriter.Log(ex, "Error • Snap To Window");
            }
            finally
            {
                ReleaseMouseCapture();
            }

            #endregion
        }
Exemplo n.º 27
0
        public void OnContactMoved(IntPtr windowHandle, Multitouch.Contracts.IContact contact)
        {
            var w = (from win in windowToBody.Keys
                     where win.Contacts.Contains(contact.Id)
                     select win).SingleOrDefault();
            WindowContact winContact = null;

            if (w != null)
            {
                if (w.Contacts.TryGetValue(contact.Id, out winContact))
                {
                    winContact.Update(contact);
                }
            }
            Window window = GetWindow(windowHandle);

            if (window != null)
            {
                FixedHingeJoint joint;
                if (contactJoints.TryGetValue(contact.Id, out joint))
                {
                    joint.Anchor = new Vector2D(contact.X, contact.Y);

                    // scale
                    Body                 body             = joint.Bodies.First();
                    WindowContacts       contacts         = window.Contacts;
                    double               previousDistance = 0;
                    double               currentDistance  = 0;
                    int                  divisor          = 0;
                    RECT                 windowRect       = window.Rectangle;
                    System.Windows.Point center           = new System.Windows.Point(windowRect.Width / 2.0, windowRect.Height / 2.0);
                    WindowContact[]      contactsArray    = contacts.ToArray();
                    for (int i = 0; i < contactsArray.Length; i++)
                    {
                        for (int j = i + 1; j < contactsArray.Length; j++)
                        {
                            Vector vector = NativeMethods.ScreenToClient(window, contactsArray[j].Position.ToPoint()).ToPoint() -
                                            NativeMethods.ScreenToClient(window, contactsArray[i].Position.ToPoint()).ToPoint();
                            currentDistance += vector.Length;
                            center          += vector;

                            Vector previousVector = NativeMethods.ScreenToClient(window, contactsArray[j].PreviousPosition.ToPoint()).ToPoint() -
                                                    NativeMethods.ScreenToClient(window, contactsArray[i].PreviousPosition.ToPoint()).ToPoint();
                            previousDistance += previousVector.Length;
                            divisor++;
                        }
                    }
                    if (divisor == 0)
                    {
                        divisor = 1;
                    }

                    previousDistance /= divisor;
                    currentDistance  /= divisor;
                    center.X         /= divisor;
                    center.Y         /= divisor;

                    double delta = currentDistance / previousDistance;
                    if (double.IsNaN(delta))
                    {
                        delta = 1;
                    }
                    window.Scale        *= delta;
                    window.ScaleCenter   = center;
                    body.Transformation *= Matrix2x3.FromScale(new Vector2D(delta, delta));
                }
            }
            else if (w != null && winContact != null)
            {
                w.Contacts.Remove(contact.Id);
            }
        }
Exemplo n.º 28
0
		public void OnContactMoved(IntPtr windowHandle, Multitouch.Contracts.IContact contact)
		{
			var w = (from win in windowToBody.Keys
					where win.Contacts.Contains(contact.Id)
					select win).SingleOrDefault();
			WindowContact winContact = null;
			if (w != null)
			{
				if (w.Contacts.TryGetValue(contact.Id, out winContact))
					winContact.Update(contact);
			}
			Window window = GetWindow(windowHandle);
			if (window != null)
			{
				FixedHingeJoint joint;
				if (contactJoints.TryGetValue(contact.Id, out joint))
				{
					joint.Anchor = new Vector2D(contact.X, contact.Y);

					// scale
					Body body = joint.Bodies.First();
					WindowContacts contacts = window.Contacts;
					double previousDistance = 0;
					double currentDistance = 0;
					int divisor = 0;
					RECT windowRect = window.Rectangle;
					System.Windows.Point center = new System.Windows.Point(windowRect.Width / 2.0, windowRect.Height / 2.0);
					WindowContact[] contactsArray = contacts.ToArray();
					for (int i = 0; i < contactsArray.Length; i++)
					{
						for (int j = i + 1; j < contactsArray.Length; j++)
						{
							Vector vector = NativeMethods.ScreenToClient(window, contactsArray[j].Position.ToPoint()).ToPoint() -
							                NativeMethods.ScreenToClient(window, contactsArray[i].Position.ToPoint()).ToPoint();
							currentDistance += vector.Length;
							center += vector;

							Vector previousVector = NativeMethods.ScreenToClient(window, contactsArray[j].PreviousPosition.ToPoint()).ToPoint() -
							                        NativeMethods.ScreenToClient(window, contactsArray[i].PreviousPosition.ToPoint()).ToPoint();
							previousDistance += previousVector.Length;
							divisor++;
						}
					}
					if (divisor == 0)
						divisor = 1;

					previousDistance /= divisor;
					currentDistance /= divisor;
					center.X /= divisor;
					center.Y /= divisor;

					double delta = currentDistance / previousDistance;
					if (double.IsNaN(delta))
						delta = 1;
					window.Scale *= delta;
					window.ScaleCenter = center;
					body.Transformation *= Matrix2x3.FromScale(new Vector2D(delta, delta));
				}
			}
			else if (w != null && winContact != null)
				w.Contacts.Remove(contact.Id);
		}
Exemplo n.º 29
0
        /// <summary>
        /// MouseHook event method, detects the mouse clicks.
        /// </summary>
        private void MouseHookTarget(object sender, CustomMouseEventArgs keyEventArgs)
        {
            _recordClicked = keyEventArgs.Button == MouseButton.Left && keyEventArgs.State == MouseButtonState.Pressed;
            _posCursor = new System.Windows.Point(keyEventArgs.PosX, keyEventArgs.PosY);

            if (!IsMouseCaptured || Mouse.Captured == null)
                return;

            #region Get Handle and Window Rect

            var handle = Native.WindowFromPoint(keyEventArgs.PosX, keyEventArgs.PosY);
            var scale = this.Scale();

            if (_lastHandle != handle)
            {
                if (_lastHandle != IntPtr.Zero)
                    Native.DrawFrame(_lastHandle, scale);

                _lastHandle = handle;
                Native.DrawFrame(handle, scale);
            }

            Native.RECT rect;
            if (!Native.GetWindowRect(handle, out rect)) return;

            #endregion

            if (keyEventArgs.State == MouseButtonState.Pressed)
                return;

            #region Mouse Up

            Cursor = Cursors.Arrow;

            try
            {
                #region Try to get the process

                Process target = null;// Process.GetProcesses().FirstOrDefault(p => p.Handle == handle);

                var processes = Process.GetProcesses();
                foreach (var proc in processes)
                {
                    try
                    {
                        if (proc.MainWindowHandle != IntPtr.Zero && proc.HandleCount > 0 && (proc.Handle == handle || proc.MainWindowHandle == handle))
                        {
                            target = proc;
                            break;
                        }
                    }
                    catch (Exception)
                    { }
                }

                #endregion

                if (target != null && target.ProcessName == "ScreenToGif") return;

                //Clear up the selected window frame.
                Native.DrawFrame(handle, scale);
                _lastHandle = IntPtr.Zero;

                #region Values

                var top = (rect.Top / scale) - Constants.TopOffset;
                var left = (rect.Left / scale) - Constants.LeftOffset;
                var height = ((rect.Bottom - rect.Top + 1) / scale) + Constants.TopOffset + Constants.BottomOffset;
                var width = ((rect.Right - rect.Left + 1) / scale) + Constants.LeftOffset + Constants.RightOffset;

                #endregion

                #region Validate

                //TODO: Validate screensize...
                if (top < 0)
                    top = 0 - 1;
                if (left < 0)
                    left = 0 - 1;
                if (SystemInformation.VirtualScreen.Height < height + top)
                    height = SystemInformation.VirtualScreen.Height - top;
                if (SystemInformation.VirtualScreen.Width < width + left)
                    width = SystemInformation.VirtualScreen.Width - left;

                #endregion

                Top = top;
                Left = left;
                Height = height;
                Width = width;
            }
            catch (Exception ex)
            {
                LogWriter.Log(ex, "Error • Snap To Window");
            }
            finally
            {
                ReleaseMouseCapture();
            }

            #endregion
        }
Exemplo n.º 30
0
	private void InsertPictureLayer (DataRow PictureRow, DrawingGroup FramingGroup,
					DataRow ConnectPicturesRow, double OriginalWidth, double OriginalHeight,
					String LocalWPMediaRoot, DataTable MaterialTable)
		{

		System.Windows.Point StartingPoint = new System.Windows.Point
			((Convert.ToInt32 (PictureRow ["PositionLeft"]) * OriginalWidth) / 100,
			(Convert.ToInt32 (PictureRow ["PositionTop"]) * OriginalHeight) / 100);
		bool FixPositioned = false;
		if (ConnectPicturesRow ["PositionedByFileName"] != null)
			if (ConnectPicturesRow ["PositionedByFileName"].ToString () == "Yes")
				{
				StartingPoint.X = (Convert.ToInt32 (ConnectPicturesRow ["XPositioningPercentage"]) * OriginalWidth) / 100;
				StartingPoint.Y = (Convert.ToInt32 (ConnectPicturesRow ["YPositioningPercentage"]) * OriginalHeight) / 100;
				FixPositioned = true;
				}
		String PhysicalFileName = ConnectPicturesRow ["PictureFileName"].ToString ();
		Stream PictureSource = null;
		if (MaterialTable != null)
			{
			DataRow [] Materials = MaterialTable.Select ("NameID = '" + PhysicalFileName + "'");
			if (Materials.Length != 1)
				return;
			PictureSource = new MemoryStream (Materials [0] ["MaterialByteArray"] as Byte []);
			}
		else
			{
			if (!Path.IsPathRooted (PhysicalFileName))
				PhysicalFileName
					= Path.Combine (LocalWPMediaRoot, PhysicalFileName);
			if (String.IsNullOrEmpty (PhysicalFileName))
				return;
			if (!File.Exists (PhysicalFileName))
				return;
			PictureSource = new FileStream (PhysicalFileName, FileMode.Open, FileAccess.Read);
			
			}


		DrawingGroup PictureDrawingGroup = new DrawingGroup ();


		BitmapImage PicturePart = new BitmapImage ();
		PicturePart.BeginInit ();
		PicturePart.CacheOption = BitmapCacheOption.OnLoad;
		PicturePart.StreamSource = PictureSource;
		PicturePart.EndInit ();

		PictureSource.Close ();
		PictureSource.Dispose ();

		double RealWidth = PicturePart.PixelWidth;
		double RealHeight = PicturePart.PixelHeight;
		double RealAspectRatio = RealWidth / RealHeight;
		double MeasuredWidth = PicturePart.Width;
		double MeasuredHeight = PicturePart.Height;


		double PositionLeft = Convert.ToDouble (PictureRow ["PositionLeft"]);
		double PositionTop = Convert.ToDouble (PictureRow ["PositionTop"]);
		double PositionRight = Convert.ToDouble (PictureRow ["PositionRight"]);
		double PositionBottom = Convert.ToDouble (PictureRow ["PositionBottom"]);

		double TargetWidth = ((PositionRight - PositionLeft) * OriginalWidth) / 100;
		double TargetHeight = ((PositionBottom - PositionTop) * OriginalHeight) / 100;
		double PositioningFactor = 1;
		if (!FixPositioned)
			{
			double FramingAspectRatio = TargetWidth/TargetHeight;
			if (FramingAspectRatio >= RealAspectRatio)
				{
				RealHeight = TargetHeight;
				RealWidth = RealHeight * RealAspectRatio;
				}
			else
				{
				RealWidth = TargetWidth;
				RealHeight = RealWidth / RealAspectRatio;
				}

			}


		System.Windows.Point DrawingStartingPoint = StartingPoint;
		System.Windows.Size DrawingSize = new System.Windows.Size
			(RealWidth, RealHeight);
		double TargetAspectRatio = DrawingSize.Width / DrawingSize.Height;
		if (TargetAspectRatio >= RealAspectRatio)
			{
			DrawingSize.Width = DrawingSize.Height*RealAspectRatio;
			if (!FixPositioned)
				{
				DrawingStartingPoint.X += (TargetWidth - DrawingSize.Width) / 2;
				}
			else
				{
				}
			}
		else
			{
			DrawingSize.Height = DrawingSize.Width / RealAspectRatio;
			if (!FixPositioned)
				{
				DrawingStartingPoint.Y += (TargetHeight - DrawingSize.Height) / 2;
				}
			else
				{
				}
			}
		ImageDrawing PositionableEntry = new ImageDrawing();
		PositionableEntry.ImageSource = PicturePart; ;
		PositionableEntry.Rect = new Rect (DrawingStartingPoint, DrawingSize);
		PictureDrawingGroup.Children.Add (PositionableEntry);
		PictureDrawingGroup.Opacity = Convert.ToDouble (PictureRow ["Transparency"])/100;
		FramingGroup.Children.Add (PictureDrawingGroup);
		PictureDrawingGroup.Freeze ();
		InsertDisposeableElement (PositionableEntry);
		InsertDisposeableElement (PictureDrawingGroup);
		InsertDisposeableElement (PicturePart);
		}
Exemplo n.º 31
0
 private static Point toWinPoint(System.Windows.Point point)
 {
     return(new Point(Convert.ToInt32(point.X), Convert.ToInt32(point.Y)));
 }
Exemplo n.º 32
0
        private void ImageMouseDown(object sender, MouseButtonEventArgs e)
        {
            int x = (int)e.GetPosition(myImage).X;
            int y = (int)e.GetPosition(myImage).Y;

            if (selectShapeFlag)
            {
                var p = new Point(x, y);
                CanvasPoints.Add(p);
                clickCount--;
                if (clickCount <= 0)
                {
                    SelectedShape = FindClosestShape(p);
                    CanvasPoints.Clear();
                    selectShapeFlag = false;
                    if (SelectedShape != null)
                    {
                        SelectedObject.Text = SelectedShape.GetNameAndCenter();
                    }
                    else
                    {
                        SelectedObject.Text = "None";
                    }
                }
            } // Select Handling
            if (lineDrawFlag)
            {
                CanvasPoints.Add(new Point(x, y));
                clickCount--;
                if (clickCount <= 0)
                {
                    layers.Add(new Line(CanvasPoints[0], CanvasPoints[1], ChoosenColor, LineThickValue));
                    lineDrawFlag = false;
                    EndStepOfMouseDown();
                }
            } // Line Drawing
            if (lineMoveFlag)
            {
                CanvasPoints.Add(new Point(x, y));
                clickCount--;
                if (clickCount <= 0)
                {
                    var line     = (Line)SelectedShape;
                    var endPoint = line.FindClosestPoint(CanvasPoints[0]);
                    var otherEP  = line.GetOtherPoint(endPoint);
                    layers.Remove(SelectedShape);
                    layers.Add(new Line(CanvasPoints[1], otherEP, ChoosenColor, line.Thickness));

                    lineMoveFlag = false;
                    EndStepOfMouseDown();
                }
            } // Line Moving
            if (circleDrawFlag)
            {
                CanvasPoints.Add(new Point(x, y));
                clickCount--;
                if (clickCount <= 0)
                {
                    layers.Add(new Circle(CanvasPoints[0], CanvasPoints[1], ChoosenColor, false));
                    circleDrawFlag = false;
                    EndStepOfMouseDown();
                }
            } // Circle Drawing
            if (circleMoveFlag)
            {
                CanvasPoints.Add(new Point(x, y));
                clickCount--;
                if (clickCount <= 0)
                {
                    var cir = (Circle)SelectedShape;
                    var c   = cir.GetCenter();
                    var ep  = cir.EdgePoint;
                    var f   = cir.Fill;

                    System.Windows.Point p1 = new System.Windows.Point(c.X, c.Y);
                    System.Windows.Point p2 = new System.Windows.Point(CanvasPoints[0].X, CanvasPoints[0].Y);
                    System.Windows.Point p3 = new System.Windows.Point(ep.X, ep.Y);

                    Vector vectorFromCenter = System.Windows.Point.Subtract(p1, p2);
                    var    p4 = System.Windows.Point.Subtract(p3, vectorFromCenter);

                    var newEp = new Point((int)p4.X, (int)p4.Y);


                    layers.Remove(SelectedShape);
                    layers.Add(new Circle(CanvasPoints[0], newEp, ChoosenColor, f));

                    circleMoveFlag = false;
                    EndStepOfMouseDown();
                }
            } // Circle Moving
            if (circleMoveEPFlag)
            {
                CanvasPoints.Add(new Point(x, y));
                clickCount--;
                if (clickCount <= 0)
                {
                    var cir = (Circle)SelectedShape;
                    var c   = cir.Center;
                    var f   = cir.Fill;

                    layers.Remove(SelectedShape);
                    layers.Add(new Circle(c, CanvasPoints[0], ChoosenColor, f));

                    circleMoveEPFlag = false;
                    EndStepOfMouseDown();
                }
            } // Circle Edgepoint Moving
            if (polyDrawFlag)
            {
                if (CanvasPoints.Count == 0)
                {
                    CanvasPoints.Add(new Point(x, y));
                    cir = new Circle(new Point(x, y), new Point(x + PolyStopRadius, y), Color.Green, false);
                    layers.Add(cir);
                    RenderLayers();
                }
                else
                {
                    var p = new Point(x, y);
                    if (CalcEucliDist(p, CanvasPoints[0]) > PolyStopRadius)
                    {
                        CanvasPoints.Add(p);
                    }
                    else
                    {
                        List <Point> pts = new List <Point>();
                        foreach (var po in CanvasPoints)
                        {
                            pts.Add(po);
                        }
                        layers.Add(new Polygon(pts, ChoosenColor, false, PolyThickValue));
                        layers.Remove(cir);
                        EndStepOfMouseDown();
                    }
                }
            } // Polygon Drawing
            if (polyMoveFlag)
            {
                CanvasPoints.Add(new Point(x, y));
                clickCount--;
                if (clickCount <= 0)
                {
                    var poly = (Polygon)SelectedShape;
                    int t    = poly.Thickness;
                    var c    = poly.GetCenter();
                    var f    = cir.Fill;

                    List <Point> newPoints = new List <Point>();

                    Vector vectorFromCenter = System.Windows.Point.Subtract(new System.Windows.Point(c.X, c.Y),
                                                                            new System.Windows.Point(CanvasPoints[0].X, CanvasPoints[0].Y));

                    foreach (var po in poly.GetPoints())
                    {
                        var tmpPo  = new System.Windows.Point(po.X, po.Y);
                        var tmpPo2 = System.Windows.Point.Subtract(tmpPo, vectorFromCenter);

                        newPoints.Add(new Point((int)tmpPo2.X, (int)tmpPo2.Y));
                    }


                    layers.Remove(SelectedShape);
                    layers.Add(new Polygon(newPoints, ChoosenColor, f, t));

                    polyMoveFlag = false;
                    EndStepOfMouseDown();
                }
            } // Polygon Moving
            if (polyMoveVertexFlag)
            {
                CanvasPoints.Add(new Point(x, y));
                clickCount--;
                if (clickCount <= 0)
                {
                    var poly   = (Polygon)SelectedShape;
                    var vertex = poly.FindClosestPoint(CanvasPoints[0]);
                    int t      = poly.Thickness;
                    var f      = cir.Fill;

                    List <Point> newPoints = new List <Point>();

                    foreach (var po in poly.GetPoints())
                    {
                        newPoints.Add(po);
                    }

                    newPoints[newPoints.FindIndex(i => i == vertex)] = CanvasPoints[1];

                    layers.Remove(SelectedShape);
                    layers.Add(new Polygon(newPoints, ChoosenColor, f, t));


                    polyMoveVertexFlag = false;
                    EndStepOfMouseDown();
                }
            } // Polygon Moving Vertex
            if (polyMoveEdgeFlag)
            {
                CanvasPoints.Add(new Point(x, y));
                clickCount--;
                if (clickCount <= 0)
                {
                    var poly = (Polygon)SelectedShape;
                    int t    = poly.Thickness;
                    var Edge = poly.FindClosestEdge(CanvasPoints[0]);
                    var f    = cir.Fill;

                    List <Point> newPoints = new List <Point>();

                    Vector vectorFromCenter = System.Windows.Point.Subtract(new System.Windows.Point(Edge.GetCenter().X, Edge.GetCenter().Y),
                                                                            new System.Windows.Point(CanvasPoints[1].X, CanvasPoints[1].Y));

                    var tmpPo  = new System.Windows.Point(Edge.P1.X, Edge.P1.Y);
                    var tmpPo2 = System.Windows.Point.Subtract(tmpPo, vectorFromCenter);

                    var tmpPo3 = new System.Windows.Point(Edge.P2.X, Edge.P2.Y);
                    var tmpPo4 = System.Windows.Point.Subtract(tmpPo3, vectorFromCenter);

                    var res1 = new Point((int)tmpPo2.X, (int)tmpPo2.Y);
                    var res2 = new Point((int)tmpPo4.X, (int)tmpPo4.Y);

                    foreach (var po in poly.GetPoints())
                    {
                        newPoints.Add(po);
                    }

                    newPoints[newPoints.FindIndex(i => i == Edge.P1)] = res1;
                    newPoints[newPoints.FindIndex(i => i == Edge.P2)] = res2;

                    layers.Remove(SelectedShape);
                    layers.Add(new Polygon(newPoints, ChoosenColor, f, t));

                    polyMoveEdgeFlag = false;
                    EndStepOfMouseDown();
                }
            } // Polygon moving Edge
            if (capsuleDrawFlag)
            {
                CanvasPoints.Add(new Point(x, y));
                clickCount--;
                if (clickCount <= 0)
                {
                    layers.Add(new Capsule(CanvasPoints[0], CanvasPoints[1], CanvasPoints[2], ChoosenColor));
                    capsuleDrawFlag = false;
                    EndStepOfMouseDown();
                }
            } // Capsule Drawing
            if (rectDrawFlag)
            {
                CanvasPoints.Add(new Point(x, y));
                clickCount--;
                if (clickCount <= 0)
                {
                    layers.Add(new Rectangle(CanvasPoints[0], CanvasPoints[1], ChoosenColor, false, RectThickValue));
                    rectDrawFlag = false;
                    EndStepOfMouseDown();
                }
            } // Rectangle Drawing
            if (rectMoveFlag)
            {
                CanvasPoints.Add(new Point(x, y));
                clickCount--;
                if (clickCount <= 0)
                {
                    var rect      = (Rectangle)SelectedShape;
                    var rectColor = rect.myColor;
                    int t         = rect.Thickness;
                    var c         = rect.GetCenter();
                    var f         = cir.Fill;

                    Vector vectorFromCenter = System.Windows.Point.Subtract(new System.Windows.Point(c.X, c.Y),
                                                                            new System.Windows.Point(CanvasPoints[0].X, CanvasPoints[0].Y));

                    var tmpPo  = new System.Windows.Point(rect.P1.X, rect.P1.Y);
                    var tmpPo2 = System.Windows.Point.Subtract(tmpPo, vectorFromCenter);

                    var tmpPo3 = new System.Windows.Point(rect.P2.X, rect.P2.Y);
                    var tmpPo4 = System.Windows.Point.Subtract(tmpPo3, vectorFromCenter);

                    layers.Remove(SelectedShape);
                    layers.Add(new Rectangle(new Point((int)tmpPo2.X, (int)tmpPo2.Y), new Point((int)tmpPo4.X, (int)tmpPo4.Y), rectColor, f, t));

                    rectMoveFlag = false;
                    EndStepOfMouseDown();
                }
            } // Rectangle Moving
            if (rectMoveVertexFlag)
            {
                CanvasPoints.Add(new Point(x, y));
                clickCount--;
                if (clickCount <= 0)
                {
                    var rect   = (Rectangle)SelectedShape;
                    var vertex = rect.FindClosestPoint(CanvasPoints[0]);
                    int t      = rect.Thickness;
                    var f      = cir.Fill;

                    List <Point> newPoints = new List <Point>();

                    foreach (var po in rect.GetPoints())
                    {
                        newPoints.Add(po);
                    }

                    var neighbors = rect.FindNeighbors(vertex);

                    int xdif = (CanvasPoints[1].X - vertex.X);
                    int ydif = (CanvasPoints[1].Y - vertex.Y);

                    foreach (var p in neighbors)
                    {
                        if (p.X == vertex.X)
                        {
                            newPoints[newPoints.FindIndex(i => i == p)] = new Point(p.X + xdif, p.Y);
                        }
                        if (p.Y == vertex.Y)
                        {
                            newPoints[newPoints.FindIndex(i => i == p)] = new Point(p.X, p.Y + ydif);
                        }
                    }

                    newPoints[newPoints.FindIndex(i => i == vertex)] = CanvasPoints[1];

                    layers.Remove(SelectedShape);
                    layers.Add(new Rectangle(newPoints, ChoosenColor, f, t));

                    rectMoveVertexFlag = false;
                    EndStepOfMouseDown();
                }
            } // Rectangle Moving Vertex
            if (rectMoveEdgeFlag)
            {
                CanvasPoints.Add(new Point(x, y));
                clickCount--;
                if (clickCount <= 0)
                {
                    var rect = (Rectangle)SelectedShape;
                    int t    = rect.Thickness;
                    var Edge = rect.FindClosestEdge(CanvasPoints[0]);
                    var f    = cir.Fill;

                    List <Point> newPoints = new List <Point>();

                    foreach (var po in rect.GetPoints())
                    {
                        newPoints.Add(po);
                    }

                    Point res1;
                    Point res2;

                    if (Edge.P1.X == Edge.P2.X)
                    {
                        int xdif = (CanvasPoints[1].X - Edge.GetCenter().X);
                        res1 = new Point(Edge.P1.X + xdif, Edge.P1.Y);
                        res2 = new Point(Edge.P2.X + xdif, Edge.P2.Y);
                    }
                    else //if (Edge.P1.Y == Edge.P2.Y)
                    {
                        int ydif = (CanvasPoints[1].Y - Edge.GetCenter().Y);
                        res1 = new Point(Edge.P1.X, Edge.P1.Y + ydif);
                        res2 = new Point(Edge.P2.X, Edge.P2.Y + ydif);
                    }



                    newPoints[newPoints.FindIndex(i => i == Edge.P1)] = res1;
                    newPoints[newPoints.FindIndex(i => i == Edge.P2)] = res2;

                    layers.Remove(SelectedShape);
                    layers.Add(new Rectangle(newPoints, ChoosenColor, f, t));

                    rectMoveEdgeFlag = false;
                    EndStepOfMouseDown();
                }
            } // Rectangle Moving Edge
            if (floodflag)
            {
                CanvasPoints.Add(new Point(x, y));
                clickCount--;
                if (clickCount <= 0)
                {
                    FloodFillSim(CanvasPoints[0]);
                    floodflag = false;
                    CanvasPoints.Clear();
                    SelectedShape       = null;
                    SelectedObject.Text = "None";
                }
            } // Rectangle Moving Edge
        }
		public bool RotatedRectContains(Rectangle rect, System.Windows.Point location)
		{
			var rectCorner = new System.Windows.Point(Canvas.GetLeft(rect), Canvas.GetTop(rect));
			var rectRotation = (RotateTransform)rect.RenderTransform;
			var transform = new RotateTransform(-rectRotation.Angle, rectCorner.X + rectRotation.CenterX, rectCorner.Y + rectRotation.CenterY);
			var rotated = transform.Transform(location);
			return rotated.X > rectCorner.X && rotated.X < rectCorner.X + rect.Width && rotated.Y > rectCorner.Y
				   && rotated.Y < rectCorner.Y + rect.Height;
		}
Exemplo n.º 34
0
 private Point ToDrawingPoint(System.Windows.Point p)
 {
     return(new Point((int)p.X, (int)p.Y));
 }
Exemplo n.º 35
0
        /// <summary>
        /// MouseHook event method, detects the mouse clicks.
        /// </summary>
        private void MouseHookTarget(object sender, CustomMouseEventArgs keyEventArgs)
        {
            _recordClicked = keyEventArgs.Button == MouseButton.Left && keyEventArgs.State == MouseButtonState.Pressed;
            _posCursor = new System.Windows.Point(keyEventArgs.PosX, keyEventArgs.PosY);

            if (!IsMouseCaptured || Mouse.Captured == null || keyEventArgs.State == MouseButtonState.Pressed)
                return;

            //TODO: Make it work with parent handles...
            #region Mouse Up

            this.Cursor = Cursors.Arrow;

            try
            {
                var handle = Native.WindowFromPoint(keyEventArgs.PosX, keyEventArgs.PosY);
                var scale = this.Scale();

                Process target = null;// Process.GetProcesses().FirstOrDefault(p => p.Handle == handle);

                var processes = Process.GetProcesses();
                foreach (var proc in processes)
                {
                    try
                    {
                        if (proc.MainWindowHandle!= IntPtr.Zero && proc.HandleCount > 0 && (proc.Handle == handle || proc.MainWindowHandle == handle))
                        {
                            target = proc;
                            break;
                        }
                    }
                    catch (Exception)
                    {}
                }

                if (target == null || target.ProcessName == "ScreenToGif") return;

                Native.RECT rect;
                Native.GetWindowRect(handle, out rect);

                #region Values

                //TODO: Check the position, different OS'.
                var top = (rect.Top / scale) - 32;
                var left = (rect.Left / scale) - 6;
                var height = ((rect.Bottom - rect.Top + 1) / scale) + 58;
                var width = ((rect.Right - rect.Left + 1) / scale) + 12;

                #endregion

                #region Validate

                if (top < 0)
                    top = 0;
                if (left < 0)
                    left = 0;

                #endregion

                Top = top;
                Left = left;
                Height = height;
                Width = width;
            }
            catch (Exception ex)
            {
                LogWriter.Log(ex, "Error • Snap To Window");
            }
            finally
            {
                ReleaseMouseCapture();
            }

            #endregion
        }
Exemplo n.º 36
0
        public ImageSource GetVoronoiGraph(System.Windows.Point position, bool delaunay = false)
        {
            if (mapPerlin == null)
            {
                GenPerlinMap();
            }
            Bitmap bmp = new Bitmap(mapPerlin);


            using (Graphics g = Graphics.FromImage(bmp))
            {
                int    seed    = -1;
                Region info    = (Region)this.sites.First();
                double distMin = this.mapWidth * 2;

                foreach (Region site in this.sites)
                {
                    seed++;

                    if (site.Kingdom != null && this.affSite)
                    {
                        List <VEdge> tmp = new List <VEdge>();
                        int          i   = 0;
                        tmp.Add(site.Cell.First());
                        site.Cell.Remove(site.Cell.First());
                        while (!site.Cell.IsEmpty() && i < site.Cell.Count)
                        {
                            VEdge ve = site.Cell.ElementAt(i);
                            VEdge t  = tmp.Last();
                            if (t.End == ve.Start)
                            {
                                tmp.Add(ve);
                                site.Cell.Remove(ve);
                                i = 0;
                            }
                            else if (t.End == ve.End)
                            {
                                VPoint vp = ve.End;
                                ve.End   = ve.Start;
                                ve.Start = vp;

                                tmp.Add(ve);
                                site.Cell.Remove(ve);
                                i = 0;
                            }
                            else
                            {
                                i++;
                            }
                        }
                        site.Cell = tmp;

                        List <Point> points = new List <Point>();
                        foreach (var edge in site.Cell)
                        {
                            points.Add(new Point((int)edge.Start.X, (int)edge.Start.Y));
                            points.Add(new Point((int)edge.End.X, (int)edge.End.Y));
                        }

                        Point[] tab   = points.ToArray();
                        Random  rand  = new Random(seed);
                        Color   color = Color.FromArgb(90,
                                                       site.Kingdom.Color.R,
                                                       site.Kingdom.Color.G,
                                                       site.Kingdom.Color.B);


                        g.FillPolygon(new SolidBrush(color), tab);
                    }

                    if (site.God != null && this.croyance)
                    {
                        List <VEdge> tmp = new List <VEdge>();
                        int          i   = 0;
                        tmp.Add(site.Cell.First());
                        site.Cell.Remove(site.Cell.First());
                        while (!site.Cell.IsEmpty() && i < site.Cell.Count)
                        {
                            VEdge ve = site.Cell.ElementAt(i);
                            VEdge t  = tmp.Last();
                            if (t.End == ve.Start)
                            {
                                tmp.Add(ve);
                                site.Cell.Remove(ve);
                                i = 0;
                            }
                            else if (t.End == ve.End)
                            {
                                VPoint vp = ve.End;
                                ve.End   = ve.Start;
                                ve.Start = vp;

                                tmp.Add(ve);
                                site.Cell.Remove(ve);
                                i = 0;
                            }
                            else
                            {
                                i++;
                            }
                        }
                        site.Cell = tmp;

                        List <Point> points = new List <Point>();
                        foreach (var edge in site.Cell)
                        {
                            points.Add(new Point((int)edge.Start.X, (int)edge.Start.Y));
                            points.Add(new Point((int)edge.End.X, (int)edge.End.Y));
                        }

                        Point[] tab   = points.ToArray();
                        Random  rand  = new Random(seed);
                        Color   color = Color.FromArgb(90,
                                                       site.God.Color.R,
                                                       site.God.Color.G,
                                                       site.God.Color.B);


                        g.FillPolygon(new SolidBrush(color), tab);
                    }

                    double dist = Math.Sqrt(Math.Pow(site.X - position.X, 2) + Math.Pow(site.Y - position.Y, 2));
                    if (distMin > dist)
                    {
                        info    = site;
                        distMin = dist;
                    }

                    if (site.City)
                    {
                        if (!site.Capital)
                        {
                            g.FillEllipse(new SolidBrush(Color.Crimson),
                                          (float)(site.X - 2), (float)(site.Y - 2),
                                          5f, 5f);
                        }
                        else
                        {
                            g.FillEllipse(new SolidBrush(Color.Yellow),
                                          (float)(site.X - 2), (float)(site.Y - 2),
                                          5f, 5f);
                        }
                    }

                    if (delaunay)
                    {
                        foreach (var neighbor in site.Neighbors)
                        {
                            g.DrawLine(new System.Drawing.Pen(Color.Blue),
                                       (float)site.X,
                                       (float)site.Y,
                                       (float)neighbor.X,
                                       (float)neighbor.Y);
                        }
                    }
                }

                if (info != null && (this.croyance || this.affSite))
                {
                    string str = "";
                    if (this.affSite)
                    {
                        if (info.Kingdom == null)
                        {
                            str = "Les régions sauvages";
                        }
                        else
                        {
                            str = info.Kingdom.Name;
                        }
                    }
                    else if (this.croyance)
                    {
                        if (info.God == null)
                        {
                            str = "Non croyant";
                        }
                        else
                        {
                            str = info.God.ToString();
                        }
                    }

                    Font font = new Font(System.Drawing.FontFamily.GenericMonospace, 12f, GraphicsUnit.Pixel);

                    var width = str.Length * 7.5f;

                    g.FillRectangle(new SolidBrush(Color.White),
                                    (position.X < this.mapWidth - width ? (float)(position.X) : (float)(position.X - width * 2)),
                                    (float)(position.Y - 10), width, font.Size + 2);
                    g.DrawString(str,
                                 font,
                                 new SolidBrush(Color.Black),
                                 (position.X < this.mapWidth - width ? (float)(position.X) : (float)(position.X - width * 2)), (float)(position.Y - 10));
                }

                if (voronoi)
                {
                    foreach (VEdge vedge in vedges)
                    {
                        g.DrawLine(new System.Drawing.Pen(System.Drawing.Color.Black),
                                   new System.Drawing.Point((int)vedge.Start.X, (int)vedge.Start.Y),
                                   new System.Drawing.Point((int)vedge.End.X, (int)vedge.End.Y));
                    }
                }
            }

            return(ImageSourceFromBitmap(bmp));
        }
Exemplo n.º 37
0
        /// <summary>
        /// MouseHook event method, detects the mouse clicks.
        /// </summary>
        private void MouseHookTarget(object sender, CustomMouseEventArgs keyEventArgs)
        {
            if (WindowState == WindowState.Minimized)
            {
                return;
            }

            _recordClicked = keyEventArgs.Button == MouseButton.Left && keyEventArgs.State == MouseButtonState.Pressed;
            _posCursor     = new System.Windows.Point(keyEventArgs.PosX, keyEventArgs.PosY);

            if (!IsMouseCaptured || Mouse.Captured == null)
            {
                return;
            }

            #region Get Handle and Window Rect

            var handle = Native.WindowFromPoint(keyEventArgs.PosX, keyEventArgs.PosY);
            var scale  = this.Scale();

            if (_lastHandle != handle)
            {
                if (_lastHandle != IntPtr.Zero)
                {
                    Native.DrawFrame(_lastHandle, scale);
                }

                _lastHandle = handle;
                Native.DrawFrame(handle, scale);
            }

            var rect = Native.TrueWindowRectangle(handle);

            #endregion

            if (keyEventArgs.State == MouseButtonState.Pressed)
            {
                return;
            }

            #region Mouse Up

            Cursor = Cursors.Arrow;

            try
            {
                #region Try to get the process

                Process target = null;// Process.GetProcesses().FirstOrDefault(p => p.Handle == handle);

                var processes = Process.GetProcesses();
                foreach (var proc in processes)
                {
                    try
                    {
                        if (proc.MainWindowHandle != IntPtr.Zero && proc.HandleCount > 0 && (proc.Handle == handle || proc.MainWindowHandle == handle))
                        {
                            target = proc;
                            break;
                        }
                    }
                    catch (Exception)
                    { }
                }

                #endregion

                if (target != null && target.ProcessName == "ScreenToGif")
                {
                    return;
                }

                //Clear up the selected window frame.
                Native.DrawFrame(handle, scale);
                _lastHandle = IntPtr.Zero;

                #region Values

                //TODO: Test values with other versions of windows.
                var top    = (rect.Y / scale) - Constants.TopOffset + 2;
                var left   = (rect.X / scale) - Constants.LeftOffset + 2;
                var height = ((rect.Height + 1) / scale) + Constants.TopOffset + Constants.BottomOffset - 5;
                var width  = ((rect.Width + 1) / scale) + Constants.LeftOffset + Constants.RightOffset - 5;

                #endregion

                #region Validate

                if (top < 0)
                {
                    top = 0 - 1;
                }
                if (left < 0)
                {
                    left = 0 - 1;
                }
                if (SystemInformation.VirtualScreen.Height < (height + top) * scale)
                {
                    height = (SystemInformation.VirtualScreen.Height - top) / scale;
                }
                if (SystemInformation.VirtualScreen.Width < (width + left) * scale)
                {
                    width = (SystemInformation.VirtualScreen.Width - left) / scale;
                }

                #endregion

                Top    = top;
                Left   = left;
                Height = height;
                Width  = width;
            }
            catch (Exception ex)
            {
                LogWriter.Log(ex, "Error • Snap To Window");
            }
            finally
            {
                ReleaseMouseCapture();
            }

            #endregion
        }
 private void shape_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
 {
     startPoint = e.GetPosition(null);
 }