Exemplo n.º 1
0
        private void DrawDominoBorder(SKCanvas canvas, EditingDominoVM vm)
        {
            var shape = vm.domino;
            var c     = vm.StoneColor;
            var dp    = vm.CanvasPoints;
            // is the domino visible at all?
            // todo: speed up this call
            var inside = dp.Select(x => new Avalonia.Point(x.X, x.Y)).Sum(x => Bounds.Contains(PointToDisplayAvaloniaPoint(x)) ? 1 : 0);

            if (inside > 0)
            {
                var path = new SKPath();
                path.MoveTo(PointToDisplaySkiaPoint(dp[0]));
                foreach (var line in dp.Skip(0))
                {
                    path.LineTo(PointToDisplaySkiaPoint(line));
                }
                path.Close();
                SKColor?borderColor = null;
                if (vm.State.HasFlag(EditingDominoStates.PasteHighlight))
                {
                    borderColor = pasteHightlightColor;
                }
                if (vm.State.HasFlag(EditingDominoStates.Selected))
                {
                    borderColor = selectedBorderColor;
                }
                if (vm.State.HasFlag(EditingDominoStates.DeletionHighlight))
                {
                    borderColor = deletionHighlightColor;
                }

                if (borderColor != null)
                {
                    canvas.DrawPath(path, new SKPaint()
                    {
                        Color = (SKColor)borderColor, IsAntialias = true, IsStroke = true, StrokeWidth = Math.Max(BorderSize, 2) * zoom, PathEffect = SKPathEffect.CreateDash(new float[] { 8 * zoom, 2 * zoom }, 10 * zoom)
                    });
                }
                else
                {
                    if (BorderSize > 0)
                    {
                        canvas.DrawPath(path, new SKPaint()
                        {
                            Color = unselectedBorderColor, IsAntialias = true, IsStroke = true, StrokeWidth = BorderSize / 2 * zoom
                        });
                    }
                }
            }
        }
Exemplo n.º 2
0
        private void DrawDomino(SKCanvas canvas, EditingDominoVM vm)
        {
            var shape = vm.domino;
            var c     = vm.StoneColor;
            var dp    = vm.CanvasPoints;
            // is the domino visible at all?
            var inside = dp.Select(x => new Avalonia.Point(x.X, x.Y)).Sum(x => Bounds.Contains(PointToDisplayAvaloniaPoint(x)) ? 1 : 0);

            if (inside > 0)
            {
                var path = new SKPath();
                path.MoveTo(PointToDisplaySkiaPoint(dp[0]));
                foreach (var line in dp.Skip(0))
                {
                    path.LineTo(PointToDisplaySkiaPoint(line));
                }
                path.Close();

                canvas.DrawPath(path, new SKPaint()
                {
                    Color = c.ToSKColor(dominoopacity), IsAntialias = true, IsStroke = false
                });
            }
        }