protected internal override void Redraw() { if (!INTERNAL_VisualTreeManager.IsElementInVisualTree(this)) { return; } if (Points?.Count < 2) { return; } double minX, minY, maxX, maxY; GetMinMaxXY(out minX, out maxX, out minY, out maxY); Size shapeActualSize; INTERNAL_ShapesDrawHelpers.PrepareStretch(this, _canvasDomElement, 0, maxX, 0, maxY, Stretch, out shapeActualSize); double horizontalMultiplicator; double verticalMultiplicator; double xOffsetToApplyBeforeMultiplication; double yOffsetToApplyBeforeMultiplication; double xOffsetToApplyAfterMultiplication; double yOffsetToApplyAfterMultiplication; INTERNAL_ShapesDrawHelpers.GetMultiplicatorsAndOffsetForStretch(this, StrokeThickness, 0, maxX, 0, maxY, Stretch, shapeActualSize, out horizontalMultiplicator, out verticalMultiplicator, out xOffsetToApplyBeforeMultiplication, out yOffsetToApplyBeforeMultiplication, out xOffsetToApplyAfterMultiplication, out yOffsetToApplyAfterMultiplication, out _marginOffsets); ApplyMarginToFixNegativeCoordinates(new Point()); if (Stretch == Stretch.None) { ApplyMarginToFixNegativeCoordinates(_marginOffsets); } INTERNAL_ShapesDrawHelpers.PrepareLines(_canvasDomElement, Points, StrokeThickness, false); //todo: make sure the parameters below are correct. Shape.DrawFillAndStroke(this, FillRule == FillRule.Nonzero ? "nonzero" : "evenodd", xOffsetToApplyAfterMultiplication, yOffsetToApplyAfterMultiplication, xOffsetToApplyAfterMultiplication + maxX, yOffsetToApplyAfterMultiplication + maxY, horizontalMultiplicator, verticalMultiplicator, xOffsetToApplyBeforeMultiplication, yOffsetToApplyBeforeMultiplication, shapeActualSize); }
override internal protected void Redraw() { if (Points.Count < 2) { // It is fine to have 0 or 1 points but nothing to draw in that case. return; } double minX = Points[0].X; double minY = Points[0].Y; double maxX = Points[0].X; double maxY = Points[0].Y; foreach (var p in Points) { if (p.X < minX) { minX = p.X; } if (p.Y < minY) { minY = p.Y; } if (p.X > maxX) { maxX = p.X; } if (p.Y > maxY) { maxY = p.Y; } } Size shapeActualSize; INTERNAL_ShapesDrawHelpers.PrepareStretch(this, _canvasDomElement, minX, maxX, minY, maxY, Stretch, out shapeActualSize); double horizontalMultiplicator; double verticalMultiplicator; double xOffsetToApplyBeforeMultiplication; double yOffsetToApplyBeforeMultiplication; double xOffsetToApplyAfterMultiplication; double yOffsetToApplyAfterMultiplication; INTERNAL_ShapesDrawHelpers.GetMultiplicatorsAndOffsetForStretch(this, StrokeThickness, minX, maxX, minY, maxY, Stretch, shapeActualSize, out horizontalMultiplicator, out verticalMultiplicator, out xOffsetToApplyBeforeMultiplication, out yOffsetToApplyBeforeMultiplication, out xOffsetToApplyAfterMultiplication, out yOffsetToApplyAfterMultiplication, out _marginOffsets); ApplyMarginToFixNegativeCoordinates(new Point()); if (Stretch == Stretch.None) { ApplyMarginToFixNegativeCoordinates(_marginOffsets); } object context = CSHTML5.Interop.ExecuteJavaScriptAsync(@"$0.getContext('2d')", _canvasDomElement); //we remove the previous drawing: CSHTML5.Interop.ExecuteJavaScriptAsync("$0.clearRect(0,0, $1, $2)", context, shapeActualSize.Width, shapeActualSize.Height); double opacity = Stroke == null ? 1 : Stroke.Opacity; object strokeValue = GetHtmlBrush(this, context, Stroke, opacity, minX, minY, maxX, maxY, horizontalMultiplicator, verticalMultiplicator, xOffsetToApplyBeforeMultiplication, yOffsetToApplyBeforeMultiplication, shapeActualSize); object fillValue = GetHtmlBrush(this, context, Fill, opacity, minX, minY, maxX, maxY, horizontalMultiplicator, verticalMultiplicator, xOffsetToApplyBeforeMultiplication, yOffsetToApplyBeforeMultiplication, shapeActualSize); if (fillValue != null) { CSHTML5.Interop.ExecuteJavaScriptAsync(@"$0.fillStyle = $1", context, fillValue); } else { // If fillValue is not set it will be black. CSHTML5.Interop.ExecuteJavaScriptAsync(@"$0.fillStyle = 'transparent'", context); } INTERNAL_ShapesDrawHelpers.PrepareLines(_canvasDomElement, Points, StrokeThickness, true); if (strokeValue != null) { CSHTML5.Interop.ExecuteJavaScriptAsync(@"$0.strokeStyle = $1", context, strokeValue); } CSHTML5.Interop.ExecuteJavaScriptAsync("$0.lineWidth = $1", context, StrokeThickness.ToString()); if (Stroke != null && StrokeThickness > 0) { CSHTML5.Interop.ExecuteJavaScriptAsync("$0.stroke()", context); } }