public override void DrawRect(CoreGraphics.CGRect dirtyRect) { NSColor.Red.Set(); NSBezierPath.StrokeRect(this.Bounds); }
public override void DrawRect(CGRect dirtyRect) { var context = NSGraphicsContext.CurrentContext.GraphicsPort; // Engine.Instance.Stats.Charts.Hit (RandomGenerator.GetInt (1024, 1024 * 1024), RandomGenerator.GetInt (1024, 1024 * 1024)); // Debugging context.SetFillColor(m_colorBackground); context.FillRect(dirtyRect); NSColor.Gray.Set(); NSBezierPath.StrokeRect(Bounds); nfloat DX = this.Bounds.Size.Width; nfloat DY = this.Bounds.Size.Height; m_chartDX = DX; m_chartDY = DY - m_legendDY; m_chartStartX = 0; m_chartStartY = m_chartDY; float maxY = m_chart.GetMax(); if (maxY <= 0) { maxY = 4096; } else if (maxY > 1000000000000) { maxY = 1000000000000; } CGPoint lastPointDown = new CGPoint(-1, -1); CGPoint lastPointUp = new CGPoint(-1, -1); nfloat stepX = (m_chartDX - 0) / m_chart.Resolution; // Grid lines for (int g = 0; g < m_chart.Grid; g++) { nfloat x = ((m_chartDX - 0) / m_chart.Grid) * g; DrawLine(context, m_colorGrid, m_chartStartX + x, 0, m_chartStartX + x, m_chartStartY); } // Axis line DrawLine(context, m_colorAxis, 0, m_chartStartY, m_chartDX, m_chartStartY); // Legend /* * { * string legend = ""; * legend += Messages.ChartRange + ": " + Utils.FormatSeconds(m_chart.Resolution * m_chart.TimeStep); * legend += " "; * legend += Messages.ChartGrid + ": " + Utils.FormatSeconds(m_chart.Resolution / m_chart.Grid * m_chart.TimeStep); * legend += " "; * legend += Messages.ChartStep + ": " + Utils.FormatSeconds(m_chart.TimeStep); * * Point mp = Cursor.Position; * mp = PointToClient(mp); * if ((mp.X > 0) && (mp.Y < chartDX) && (mp.Y > chartDY) && (mp.Y < DY)) * legend += " - " + Messages.ChartClickToChangeResolution; * * e.Graphics.DrawString(legend, FontLabel, BrushLegendText, ChartRectangle(0, chartStartY, chartDX, m_legendDY), formatTopCenter); * } */ // Graph for (int i = 0; i < m_chart.Resolution; i++) { int p = i + m_chart.Pos + 1; if (p >= m_chart.Resolution) { p -= m_chart.Resolution; } nfloat downY = ((m_chart.Download[p]) * (m_chartDY - m_marginTopY)) / maxY; nfloat upY = ((m_chart.Upload[p]) * (m_chartDY - m_marginTopY)) / maxY; CGPoint pointDown = ChartPoint(m_chartStartX + stepX * i, m_chartStartY - downY); CGPoint pointUp = ChartPoint(m_chartStartX + stepX * i, m_chartStartY - upY); //e.Graphics.DrawLine(Pens.Green, new Point(0,0), point); if (lastPointDown.X != -1) { DrawLine(context, m_colorDownloadGraph, lastPointDown, pointDown); DrawLine(context, m_colorUploadGraph, lastPointUp, pointUp); } lastPointDown = pointDown; lastPointUp = pointUp; } // Download line nfloat downCurY = 0; { long v = m_chart.GetLastDownload(); downCurY = ((v) * (m_chartDY - m_marginTopY)) / maxY; DrawLine(context, m_colorDownloadLine, 0, m_chartStartY - downCurY, m_chartDX, m_chartStartY - downCurY); DrawStringOutline(context, Messages.ChartDownload + ": " + ValToDesc(v), m_colorDownloadText, ChartRectangle(0, 0, m_chartDX - 10, m_chartStartY - downCurY), 8); } // Upload line { long v = m_chart.GetLastUpload(); nfloat y = ((v) * (m_chartDY - m_marginTopY)) / maxY; nfloat dly = 0; if (Math.Abs(downCurY - y) < 10) { dly = 15; // Download and upload overwrap, distance it. } DrawLine(context, m_colorUploadLine, 0, m_chartStartY - y, m_chartDX, m_chartStartY - y); DrawStringOutline(context, Messages.ChartUpload + ": " + ValToDesc(v), m_colorUploadText, ChartRectangle(0, 0, m_chartDX - 10, m_chartStartY - y - dly), 8); } // Mouse lines { CGPoint mp = Window.MouseLocationOutsideOfEventStream; mp.X -= this.Frame.Left; mp.Y -= this.Frame.Top; //mp = ParentWindow.ConvertPointToView (mp, this); mp = Invert(mp); //mp = Window.ConvertScreenToBase (mp); if ((mp.X > 0) && (mp.Y < m_chartDX) && (mp.Y > 0) && (mp.Y < m_chartDY)) { DrawLine(context, m_colorMouse, 0, mp.Y, m_chartDX, mp.Y); DrawLine(context, m_colorMouse, mp.X, 0, mp.X, m_chartDY); nfloat i = (m_chartDX - (mp.X - m_chartStartX)) / stepX; int t = Conversions.ToInt32(i * m_chart.TimeStep); //float y = mp.Y * maxY / (chartDY - m_marginTopY); nfloat y = (m_chartStartY - (mp.Y - m_marginTopY)) * maxY / m_chartDY; String label = ValToDesc(Conversions.ToInt64(y)) + ", " + Utils.FormatSeconds(t) + " ago"; int formatAlign = 6; CGRect rect = new CGRect(); if (DX - mp.X > DX / 2) //if (mp.X < DX - 200) { if (DY - mp.Y > DY / 2) //if (mp.Y < 20) { formatAlign = 0; rect.X = mp.X + 5; rect.Y = mp.Y + 5; rect.Width = DX; rect.Height = DX; } else { formatAlign = 6; rect.X = mp.X + 5; rect.Y = 0; rect.Width = DX; rect.Height = mp.Y - 5; } } else { if (DY - mp.Y > DY / 2) //if (mp.Y < 40) { formatAlign = 2; rect.X = 0; rect.Y = mp.Y; rect.Width = mp.X - 5; rect.Height = DY; } else { formatAlign = 8; rect.X = 0; rect.Y = 0; rect.Width = mp.X - 5; rect.Height = mp.Y - 5; } } DrawStringOutline(context, label, m_colorMouse, rect, formatAlign); } } }