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 }); } } } }
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 }); } }