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)); }
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); }
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); }
// 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; }
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 } }
/// <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()); }
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; }
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); }
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(); }
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; }
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); }
static public Point toDraw(this System.Windows.Point wPoint) { return(new Point((int)wPoint.X, (int)wPoint.Y)); }
public bool isInArea(System.Windows.Point wPoint) { Point point = new Point((int)wPoint.X, (int)wPoint.Y); return(isInArea(point)); }
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; }
private void MoveListener(object s, MouseEventArgs e) { real_cursorpos = e.GetPosition(_window); }
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); }
// 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; }
/// <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 }
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); } }
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); }
/// <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 }
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); }
private static Point toWinPoint(System.Windows.Point point) { return(new Point(Convert.ToInt32(point.X), Convert.ToInt32(point.Y))); }
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; }
private Point ToDrawingPoint(System.Windows.Point p) { return(new Point((int)p.X, (int)p.Y)); }
/// <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 }
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)); }
/// <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); }