private void DrawLabels(Graphics g, BrushesStorage brushes, Rectangle axisRect, YAxisAlignment alignment) { var canvasRect = Owner.CanvasRect; var worldRect = Owner.WorldRect; var format = PrepareStringFormat(alignment); var provider = PrepareNumberFormat(); var brush = brushes.GetBrush(TextColor); using (format) { var rect = new Rectangle(axisRect.Left + 5, 0, ((axisRect.Width - 5) - 5) - 1, Font.Height); for (double i = LabelInfo.Max; i > LabelInfo.Min; i -= LabelInfo.MajorStep) { var tf = (PointF)Conversion.WorldToScreen(new PointD(0.0, i), worldRect, canvasRect); rect.Y = ((int)tf.Y) - (Font.Height / 2); double num2 = i / LabelInfo.Exponent; if (axisRect.Contains(rect)) { g.DrawString(num2.ToString("N", provider), Font, brush, rect, format); } } if (CurrentPrice.HasValue) { // рисуем текущую цену в шкале DrawSelectedPriceLabel(CurrentPrice.Value, brush, format, axisRect, worldRect, canvasRect, g); } if (SelectedLabelPrice.HasValue) { // отметка цены для перекрестия DrawSelectedPriceLabel(SelectedLabelPrice.Value, brush, format, axisRect, worldRect, canvasRect, g); } switch (ShipsDrawMode) { case ShipsDrawMode.None: break; case ShipsDrawMode.Default: DrawOrderShip(format, axisRect, worldRect, canvasRect, g); //Рисуем кораблики к открытым сделкам break; case ShipsDrawMode.Average: DrawAverageOrderShip(format, axisRect, worldRect, canvasRect, g); //Рисуем кораблики средних значений к открытым сделкам break; default: throw new ArgumentOutOfRangeException(nameof(ShipsDrawMode)); } ExponentLabel.Draw(g, axisRect, alignment); } }
internal static StringFormat PrepareStringFormat(YAxisAlignment alignment) { var format = new StringFormat { Alignment = (alignment == YAxisAlignment.Left ? StringAlignment.Far : StringAlignment.Near), Trimming = StringTrimming.None }; format.FormatFlags |= StringFormatFlags.NoClip | StringFormatFlags.NoWrap; return(format); }
private void DrawTicks(Graphics g, Rectangle axisRect, YAxisAlignment alignment) { if (Chart.visualSettings.YAxisMajorTickVisible || Chart.visualSettings.YAxisMinorTickVisible) { Rectangle canvasRect = Owner.CanvasRect; RectangleD worldRect = Owner.WorldRect; var pen = new Pen(ForeColor); using (pen) { float left; float num2; float num3; float num4; if (alignment == YAxisAlignment.Left) { left = ((axisRect.Right - 1) - 5) + 1; num2 = axisRect.Right - 1; num3 = ((axisRect.Right - 1) - 3) + 1; num4 = axisRect.Right - 1; } else { left = axisRect.Left; num2 = (axisRect.Left + 5) - 1; num3 = axisRect.Left; num4 = (axisRect.Left + 3) - 1; } for (double i = LabelInfo.Max; i > LabelInfo.Min; i -= LabelInfo.MajorStep) { var tf = (PointF)Conversion.WorldToScreen(new PointD(0.0, i), worldRect, canvasRect); if (Chart.visualSettings.YAxisMajorTickVisible) { g.DrawLine(pen, left, tf.Y, num2, tf.Y); } if (Chart.visualSettings.YAxisMinorTickVisible) { double y = i; while (y > (i - LabelInfo.MajorStep)) { y -= LabelInfo.MinorStep; tf = (PointF)Conversion.WorldToScreen(new PointD(0.0, y), worldRect, canvasRect); g.DrawLine(pen, num3, tf.Y, num4, tf.Y); } } } } } }
private void DrawBackground(Graphics g, BrushesStorage brushes, Rectangle axisRect, YAxisAlignment alignment) { var brush = brushes.GetBrush(BackColor); var pen = new Pen(ForeColor); g.FillRectangle(brush, axisRect); using (pen) { if (alignment == YAxisAlignment.Left) { g.DrawLine(pen, axisRect.Right - 1, axisRect.Top, axisRect.Right - 1, axisRect.Bottom - 1); } else if (alignment == YAxisAlignment.Right) { g.DrawLine(pen, axisRect.Left, axisRect.Top, axisRect.Left, axisRect.Bottom - 1); } } }
private void DrawLabels(Graphics g, BrushesStorage brushes, Rectangle axisRect, YAxisAlignment alignment) { var canvasRect = Owner.CanvasRect; var worldRect = Owner.WorldRect; var format = PrepareStringFormat(alignment); var provider = PrepareNumberFormat(); var brush = brushes.GetBrush(TextColor); using (format) { var rect = new Rectangle(axisRect.Left + 5, 0, ((axisRect.Width - 5) - 5) - 1, Font.Height); for (double i = LabelInfo.Max; i > LabelInfo.Min; i -= LabelInfo.MajorStep) { var tf = (PointF)Conversion.WorldToScreen(new PointD(0.0, i), worldRect, canvasRect); rect.Y = ((int)tf.Y) - (Font.Height / 2); double num2 = i / LabelInfo.Exponent; if (axisRect.Contains(rect)) { g.DrawString(num2.ToString("N", provider), Font, brush, rect, format); } } if (CurrentPrice.HasValue) { // рисуем текущую цену в шкале DrawSelectedPriceLabel(CurrentPrice.Value, brush, format, axisRect, worldRect, canvasRect, g); } if (SelectedLabelPrice.HasValue) { // отметка цены для перекрестия DrawSelectedPriceLabel(SelectedLabelPrice.Value, brush, format, axisRect, worldRect, canvasRect, g); } ExponentLabel.Draw(g, axisRect, alignment); } }
internal static StringFormat PrepareStringFormat(YAxisAlignment alignment) { var format = new StringFormat { Alignment = (alignment == YAxisAlignment.Left ? StringAlignment.Far : StringAlignment.Near), Trimming = StringTrimming.None }; format.FormatFlags |= StringFormatFlags.NoClip | StringFormatFlags.NoWrap; return format; }
internal void Draw(Graphics g, Rectangle axisRect, YAxisAlignment alignment) { YAxisLabelInfo labelInfo = Owner.LabelInfo; StringFormat stringFormat = YAxis.PrepareStringFormat(alignment); using (stringFormat) { if (((int)Math.Round(labelInfo.Exponent)) != 1) { var ef = new RectangleF(0f, 0f, 0f, 0f); var exponent = (int)labelInfo.Exponent; string str = ""; if (labelInfo.Exponent > 1000000.0) { exponent = (int)(labelInfo.Exponent / 1000000.0); str = "M"; } else if (labelInfo.Exponent > 1000.0) { exponent = (int)(labelInfo.Exponent / 1000.0); str = "K"; } if (labelInfo.Exponent < 1.01E-06) { exponent = (int)((labelInfo.Exponent * 1.01) / 1E-06); str = "u"; } else if (labelInfo.Exponent < 0.00101) { exponent = (int)((labelInfo.Exponent * 1.01) / 0.001); str = "m"; } ef.Size = g.MeasureString("x " + exponent + str, Chart.visualSettings.ExponentLabelFont, ef.Location, stringFormat); if (alignment == YAxisAlignment.Left) { ef.X = (axisRect.Right - ef.Width) - 2f; } else if (alignment == YAxisAlignment.Right) { ef.X = axisRect.Left + 2; } ef.Y = (axisRect.Bottom - ef.Size.Height) - 1f; if (axisRect.Contains(Rectangle.Round(ef))) { var pen = new Pen(Chart.visualSettings.ExponentLabelForeColor); var brush = new SolidBrush(Chart.visualSettings.ExponentLabelBackColor); var brush2 = new SolidBrush(Chart.visualSettings.ExponentLabelTextColor); using (pen) { using (brush) { using (brush2) { g.FillRectangle(brush, ef); g.DrawRectangle(pen, (int)ef.X, (int)ef.Y, (int)ef.Width, (int)ef.Height); g.DrawString("x " + exponent + str, Chart.visualSettings.ExponentLabelFont, brush2, ef, stringFormat); } } } } } } }