Exemplo n.º 1
0
 private void FinalizePaste(bool clearall)
 {
     if (clearall)
     {
         iscopying = false;
         ClearPastePositions();
     }
     // refresh the preview in case we copied to the source domain
     AdditionalDrawables.RemoveAll(PasteOverlays);
     PasteOverlays = new List <CanvasDrawable>();
     UpdateUIElements();
 }
Exemplo n.º 2
0
        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();
        }