protected override void OnRender(IDrawingContext dc, RectFloat clipRect) { dc.Clear(new ColorRgba128Float?(this.BackColor)); using (dc.UseTranslateTransform(0.5f, 0.5f, MatrixMultiplyOrder.Append)) { RectDouble num = RectDouble.Inflate(base.ClientRectangle.ToRectInt32(), -1.0, -1.0); double num3 = Math.Min(num.Width, num.Height) / 2.0; PointDouble center = new PointDouble(num.X + num3, num.Y + num3); double d = MathUtil.DegreesToRadians(this.value); EllipseDouble ellipse = new EllipseDouble(center, num3 - 0.5, num3 - 0.5); double thickness = this.hover ? 2.0 : 1.0; double num8 = this.maxValue - this.minValue; if (num8 >= 360.0) { dc.FillEllipse(ellipse, validAnglesFillBrush); dc.DrawEllipse(ellipse, outlineBrush, thickness); } else { dc.FillEllipse(ellipse, invalidAnglesFillBrush); double width = num3; PointDouble num14 = new PointDouble(center.X + (width * Math.Cos(MathUtil.DegreesToRadians(this.minValue))), center.Y - (width * Math.Sin(MathUtil.DegreesToRadians(this.minValue)))); PointDouble num15 = new PointDouble(center.X + (width * Math.Cos(MathUtil.DegreesToRadians(this.maxValue))), center.Y - (width * Math.Sin(MathUtil.DegreesToRadians(this.maxValue)))); SizeDouble num16 = new SizeDouble(width, width); if (this.validRangeGeometry == null) { this.validRangeGeometry = new PathGeometry(); this.validRangeFigure = new PathFigure(); this.validRangeFigure.IsFilled = true; this.validRangeFigure.IsClosed = true; this.validRangeGeometry.Figures.Add(this.validRangeFigure); this.validRangeLineSegment1 = new LineSegment(); this.validRangeFigure.Segments.Add(this.validRangeLineSegment1); this.validRangeArcSegment = new ArcSegment(); this.validRangeArcSegment.SweepDirection = SweepDirection.Counterclockwise; this.validRangeFigure.Segments.Add(this.validRangeArcSegment); this.validRangeLineSegment2 = new LineSegment(); this.validRangeFigure.Segments.Add(this.validRangeLineSegment2); } this.validRangeFigure.StartPoint = center; this.validRangeLineSegment1.Point = num14; this.validRangeArcSegment.Point = num15; this.validRangeArcSegment.IsLargeArc = num8 >= 180.0; this.validRangeArcSegment.Size = num16; this.validRangeLineSegment2.Point = num15; dc.FillGeometry(this.validRangeGeometry, validAnglesFillBrush, null); dc.DrawEllipse(ellipse, outlineBrush, thickness); dc.DrawLine(center, num14, outlineBrush, 0.5); dc.DrawLine(center, num15, outlineBrush, 0.5); } double num9 = num3 - 2.0; PointDouble num10 = new PointDouble(center.X + (num9 * Math.Cos(d)), center.Y - (num9 * Math.Sin(d))); double radius = 2.5; EllipseDouble num12 = new EllipseDouble(center, radius); dc.FillEllipse(num12, gripFillBrush); dc.DrawLine(center, num10, gripBrush, this.hover ? 2.0 : 1.5); } base.OnRender(dc, clipRect); }
protected override void OnRender(IDrawingContext dc, RectFloat clipRect, CanvasView canvasView) { double canvasHairWidth = canvasView.CanvasHairWidth; if (this.handleDiameter > 2.0) { double rotationAngle = this.handleTransform.GetRotationAngle(); PointDouble location = this.handleTransform.Transform(this.handleLocation) + ((PointDouble)(this.handleLocationScreenOffset * canvasHairWidth)); VectorDouble[] vecs = new VectorDouble[] { new VectorDouble(-1.0, -1.0), new VectorDouble(1.0, -1.0), new VectorDouble(1.0, 1.0), new VectorDouble(-1.0, 1.0), new VectorDouble(-1.0, 0.0), new VectorDouble(1.0, 0.0), new VectorDouble(0.0, -1.0), new VectorDouble(0.0, 1.0) }; vecs.RotateInPlace(rotationAngle); vecs.NormalizeInPlace(); double num5 = ((double)this.handleAlpha) / 255.0; this.whiteBrush.Opacity = num5; this.blackBrush.Opacity = num5; if (this.handleShape != MoveHandleShape.Circle) { PointDouble[] numArray2 = new PointDouble[] { location + (vecs[0] * (this.handleDiameter * canvasHairWidth)), location + (vecs[1] * (this.handleDiameter * canvasHairWidth)), location + (vecs[2] * (this.handleDiameter * canvasHairWidth)), location + (vecs[3] * (this.handleDiameter * canvasHairWidth)) }; PointDouble[] numArray3 = new PointDouble[] { location + (vecs[0] * ((this.handleDiameter - 1.0) * canvasHairWidth)), location + (vecs[1] * ((this.handleDiameter - 1.0) * canvasHairWidth)), location + (vecs[2] * ((this.handleDiameter - 1.0) * canvasHairWidth)), location + (vecs[3] * ((this.handleDiameter - 1.0) * canvasHairWidth)) }; PointDouble[] numArray4 = new PointDouble[] { location + (vecs[0] * ((this.handleDiameter - 2.0) * canvasHairWidth)), location + (vecs[1] * ((this.handleDiameter - 2.0) * canvasHairWidth)), location + (vecs[2] * ((this.handleDiameter - 2.0) * canvasHairWidth)), location + (vecs[3] * ((this.handleDiameter - 2.0) * canvasHairWidth)) }; dc.DrawLine(numArray2[0], numArray2[1], this.whiteBrush, canvasHairWidth); dc.DrawLine(numArray2[1], numArray2[2], this.whiteBrush, canvasHairWidth); dc.DrawLine(numArray2[2], numArray2[3], this.whiteBrush, canvasHairWidth); dc.DrawLine(numArray2[3], numArray2[0], this.whiteBrush, canvasHairWidth); dc.DrawLine(numArray3[0], numArray3[1], this.blackBrush, canvasHairWidth); dc.DrawLine(numArray3[1], numArray3[2], this.blackBrush, canvasHairWidth); dc.DrawLine(numArray3[2], numArray3[3], this.blackBrush, canvasHairWidth); dc.DrawLine(numArray3[3], numArray3[0], this.blackBrush, canvasHairWidth); dc.DrawLine(numArray4[0], numArray4[1], this.whiteBrush, canvasHairWidth); dc.DrawLine(numArray4[1], numArray4[2], this.whiteBrush, canvasHairWidth); dc.DrawLine(numArray4[2], numArray4[3], this.whiteBrush, canvasHairWidth); dc.DrawLine(numArray4[3], numArray4[0], this.whiteBrush, canvasHairWidth); } else if (this.handleShape == MoveHandleShape.Circle) { RectDouble rect = new RectDouble(location, SizeDouble.Zero); rect.Inflate((double)((this.handleDiameter - 1.0) * canvasHairWidth), (double)((this.handleDiameter - 1.0) * canvasHairWidth)); dc.DrawEllipse(EllipseDouble.FromRect(rect), this.whiteBrush, canvasHairWidth); rect.Inflate(-canvasHairWidth, -canvasHairWidth); dc.DrawEllipse(EllipseDouble.FromRect(rect), this.blackBrush, canvasHairWidth); rect.Inflate(-canvasHairWidth, -canvasHairWidth); dc.DrawEllipse(EllipseDouble.FromRect(rect), this.whiteBrush, canvasHairWidth); } if (this.handleShape == MoveHandleShape.Compass) { PointDouble num7 = location + ((PointDouble)(vecs[0] * ((this.handleDiameter - 1.0) * canvasHairWidth))); PointDouble point = location + ((PointDouble)(vecs[1] * ((this.handleDiameter - 1.0) * canvasHairWidth))); PointDouble num9 = location + ((PointDouble)(vecs[2] * ((this.handleDiameter - 1.0) * canvasHairWidth))); PointDouble num10 = location + ((PointDouble)(vecs[3] * ((this.handleDiameter - 1.0) * canvasHairWidth))); PointDouble num11 = new PointDouble(num7.X, (num7.Y + num10.Y) / 2.0); PointDouble num12 = new PointDouble((num7.X + point.X) / 2.0, num7.Y); PointDouble num13 = new PointDouble(point.X, (point.Y + num9.Y) / 2.0); PointDouble num14 = new PointDouble((num10.X + num9.X) / 2.0, num9.Y); PointDouble num15 = new PointDouble(num12.X, num11.Y); PathGeometry geometry = new PathGeometry(); PathFigure item = new PathFigure { IsClosed = true, IsFilled = true, StartPoint = num7 }; item.Segments.Add(new LineSegment(point)); item.Segments.Add(new LineSegment(num9)); item.Segments.Add(new LineSegment(num10)); geometry.Figures.Add(item); dc.FillGeometry(geometry, this.whiteBrush, null); PathGeometry geometry2 = new PathGeometry(); double num16 = canvasHairWidth; double num17 = 1.35 * canvasHairWidth; double num18 = (num17 * 3.0) / 2.0; double num19 = num16 / 2.0; double num20 = (num17 * Math.Sqrt(27.0)) / 2.0; PathFigure figure2 = new PathFigure { IsFilled = true, IsClosed = true, StartPoint = num11 }; figure2.Segments.Add(new LineSegment(new PointDouble(num11.X + num20, num11.Y + num18))); figure2.Segments.Add(new LineSegment(new PointDouble(num11.X + num20, num11.Y + num19))); figure2.Segments.Add(new LineSegment(new PointDouble(num15.X - num19, num15.Y + num19))); figure2.Segments.Add(new LineSegment(new PointDouble(num14.X - num19, num14.Y - num20))); figure2.Segments.Add(new LineSegment(new PointDouble(num14.X - num18, num14.Y - num20))); figure2.Segments.Add(new LineSegment(num14)); figure2.Segments.Add(new LineSegment(new PointDouble(num14.X + num18, num14.Y - num20))); figure2.Segments.Add(new LineSegment(new PointDouble(num14.X + num19, num14.Y - num20))); figure2.Segments.Add(new LineSegment(new PointDouble(num15.X + num19, num15.Y + num19))); figure2.Segments.Add(new LineSegment(new PointDouble(num13.X - num20, num13.Y + num19))); figure2.Segments.Add(new LineSegment(new PointDouble(num13.X - num20, num13.Y + num18))); figure2.Segments.Add(new LineSegment(num13)); figure2.Segments.Add(new LineSegment(new PointDouble(num13.X - num20, num13.Y - num18))); figure2.Segments.Add(new LineSegment(new PointDouble(num13.X - num20, num13.Y - num19))); figure2.Segments.Add(new LineSegment(new PointDouble(num15.X + num19, num15.Y - num19))); figure2.Segments.Add(new LineSegment(new PointDouble(num12.X + num19, num12.Y + num20))); figure2.Segments.Add(new LineSegment(new PointDouble(num12.X + num18, num12.Y + num20))); figure2.Segments.Add(new LineSegment(num12)); figure2.Segments.Add(new LineSegment(new PointDouble(num12.X - num18, num12.Y + num20))); figure2.Segments.Add(new LineSegment(new PointDouble(num12.X - num19, num12.Y + num20))); figure2.Segments.Add(new LineSegment(new PointDouble(num15.X - num19, num15.Y - num19))); figure2.Segments.Add(new LineSegment(new PointDouble(num11.X + num20, num11.Y - num19))); figure2.Segments.Add(new LineSegment(new PointDouble(num11.X + num20, num11.Y - num18))); geometry2.Figures.Add(figure2); dc.FillGeometry(geometry2, this.blackBrush, null); } } base.OnRender(dc, clipRect, canvasView); }