private async void Paste(Avalonia.Point dominoPoint, PointerReleasedEventArgs e) { bool pasteFailed = true; try { if (!(CurrentProject is ICopyPasteable)) { await Errorhandler.RaiseMessage(_("Copy/Paste is not supported in this project."), _("Paste"), Errorhandler.MessageType.Warning); } // find closest domino int domino = FindDominoAtPosition(dominoPoint, int.MaxValue).idx; if (PossiblePastePositions.Contains(domino)) { PasteFilter paste = new PasteFilter(CurrentProject as ICopyPasteable, startindex, toCopy.ToArray(), domino); paste.Apply(); undoStack.Push(paste); pasteFailed = false; if (e.KeyModifiers != KeyModifiers.Control) { SelectionTool.Select(paste.paste_target, true); } } } catch (InvalidOperationException ex) { await Errorhandler.RaiseMessage(ex.Message, _("Error"), Errorhandler.MessageType.Error); } finally { FinalizePaste(e.KeyModifiers != KeyModifiers.Control && !pasteFailed); } }
public override void DrawLine(Pen pen, Point point0, Point point1) { this.target.DrawLine( point0.ToSharpDX(), point1.ToSharpDX(), pen.Brush.ToSharpDX(this.target)); }
public MouseEventArgs Convert(PointerEventArgs pea) { PointerPoint pp = pea.GetCurrentPoint(this); Avalonia.Point point = pea.GetPosition(this); int key = Key(pp.Properties.PointerUpdateKind); return(new MouseEventArgs(key, 1, (int)(point.X * this.PlatformImpl.DesktopScaling), (int)(point.Y * this.PlatformImpl.DesktopScaling), 0)); }
public override void DrawText(FormattedText formattedText, Point origin) { this.target.DrawText( formattedText.Text ?? string.Empty, ((Direct2D1FormattedText)formattedText.PlatformImpl).DirectWriteTextLayout, new RectangleF((float)origin.X, (float)origin.Y, float.PositiveInfinity, float.PositiveInfinity), formattedText.Foreground.ToSharpDX(this.target), DrawTextOptions.None); }
internal void Canvas_MouseMove(Avalonia.Point dominoPoint, PointerEventArgs e) { if (iscopying) { DrawPasteOverlay(dominoPoint, e); } else { SelectedTool?.MouseMove(dominoPoint, e); } }
internal void Canvas_MouseUp(Avalonia.Point dominoPoint, PointerReleasedEventArgs e) { if (iscopying) { Paste(dominoPoint, e); if (e.InitialPressMouseButton == MouseButton.Right) { FinalizePaste(true); } } else { SelectedTool?.MouseUp(dominoPoint, e); UpdateUIElements(); } }
private void DrawPasteOverlay(Avalonia.Point dominoPoint, PointerEventArgs e) { // display the dominoes to paste as a half-transparent overlay. // reference point: var reference_point = Dominoes[toCopy.Min()].CenterPoint - dominoPoint; if (PasteOverlays.Count == 0) { // create the overlays foreach (int i in toCopy) { var p = new SkiaSharp.SKPath(); var points = Dominoes[i].CanvasPoints; if (points.Length > 1) { p.MoveTo(new SkiaSharp.SKPoint((float)points[0].X - (float)reference_point.X, (float)points[0].Y - (float)reference_point.Y)); foreach (var point in points.Skip(1)) { p.LineTo(new SkiaSharp.SKPoint((float)point.X - (float)reference_point.X, (float)point.Y - (float)reference_point.Y)); } } var color = Dominoes[i].StoneColor.ToSKColor().WithAlpha(128); PasteOverlays.Add(new CanvasDrawable() { BeforeBorders = false, Paint = new SkiaSharp.SKPaint() { Color = color }, Path = p }); } AdditionalDrawables.AddRange(PasteOverlays); } else { // find out difference between current and last reference point var shift = lastreference - reference_point; var transform = SkiaSharp.SKMatrix.CreateTranslation((float)shift.X, (float)shift.Y); System.Diagnostics.Debug.WriteLine(shift); foreach (var stone in PasteOverlays) { stone.Path.Transform(transform); } } lastreference = reference_point; Redraw(); }
protected override void OnPointerMoved(PointerEventArgs e) { base.OnPointerMoved(e); if (!AllowScroll) { return; } if (_captured) { Avalonia.Point delta = e.GetPosition(this) - _startPos; double value = _startValue - delta.Y * ScrollStep; if (ClipValueToMinMax) { value = Avalonia.Utilities.MathUtilities.Clamp(value, Minimum, Maximum); } this.Value = value; Debug.WriteLine("UpDown OnPointerMoved {0} -> {1} -> {2}", delta, value, this.Value); } }
public EditingDominoVM FindDominoAtPosition(Avalonia.Point pos, int tolerance = 0) { double min_dist = int.MaxValue; EditingDominoVM result = null; foreach (var shape in Dominoes) { if (shape.domino.IsInside(new Core.Point(pos.X, pos.Y), expanded: DisplaySettingsTool.Expanded)) { return(shape); } var rect = shape.domino.GetContainer(); double dist = Math.Pow((rect.x + rect.width / 2) - pos.X, 2) + Math.Pow(rect.y + rect.height / 2 - pos.Y, 2); if (min_dist > dist && dist < tolerance) { min_dist = dist; result = shape; } } return(result); }
internal void Canvas_MouseWheel(Avalonia.Point dominoPoint, PointerWheelEventArgs e) { SelectedTool?.MouseWheel(dominoPoint, e); }
internal void Canvas_MouseDown(Avalonia.Point dominoPoint, PointerPressedEventArgs e) { SelectedTool?.MouseDown(dominoPoint, e); }
public static System.Drawing.PointF ToDrawingPointF(this Avalonia.Point pnt) { return(new System.Drawing.PointF((float)pnt.X, (float)pnt.Y)); }