private void GraphGrid_PaintSurface(object sender, SkiaSharp.Views.Desktop.SKPaintSurfaceEventArgs e)
        {
            GridSurface = e.Surface;
            GridCanvas  = GridSurface.Canvas;

            GridCanvas.Clear(SKColors.White);

            if (GridYEnabled)
            {
                // draw y grid lines
                pixelsPerUnitY = graphGrid.CanvasSize.Height / (GridYMax - GridYMin);
                float stepSizeY = GridYStep;

                float gridYText = GridYMax;


                for (float y = 0; y <= graphGrid.CanvasSize.Height; y += (stepSizeY * pixelsPerUnitY))
                {
                    GridCanvas.DrawLine(0, y, graphGrid.CanvasSize.Width, y, GridPaint1);


                    GridCanvas.DrawText(gridYText.ToString(), 5, y - 5, GridText1);
                    gridYText -= stepSizeY;
                }
            }

            if (GridXEnabled)
            {
                // draw x grid lines
                float pixelsPerUnitX = graphGrid.CanvasSize.Width / (GridXMax - GridXMin);
                float stepSizeX      = GridXStep;

                for (float x = 0; x <= graphGrid.CanvasSize.Width; x += (stepSizeX * pixelsPerUnitX))
                {
                    GridCanvas.DrawLine(x, 0, x, graphGrid.CanvasSize.Height, GridPaint1);
                }
            }

            // rpint the legend
            float x1 = 300;
            float x2 = x1 + 120;
            float x3 = x2 + 120;
            float x4 = x3 + 120;
            float x5 = x4 + 120;

            float y1 = 30;

            GridCanvas.DrawText(Legend1, x1, y1, GraphPaint1);
            GridCanvas.DrawText(Legend2, x2, y1, GraphPaint2);
            GridCanvas.DrawText(Legend3, x3, y1, GraphPaint3);
            GridCanvas.DrawText(Legend4, x4, y1, GraphPaint4);
            GridCanvas.DrawText(Legend5, x5, y1, GraphPaint5);



            if (!AutoScale)
            {
                refresh = true;
            }
        }
        private void GraphGrid_PaintSurface(object sender, SkiaSharp.Views.Desktop.SKPaintSurfaceEventArgs e)
        {
            GridSurface = e.Surface;
            GridCanvas  = GridSurface.Canvas;

            GridCanvas.Clear(SKColors.Black);

            if (GridYEnabled)
            {
                // draw y grid lines
                pixelsPerUnitY = graphGrid.CanvasSize.Height / (GridYMax - GridYMin);
                float stepSizeY = GridYStep;

                for (float y = 0; y <= graphGrid.CanvasSize.Height; y += (stepSizeY * pixelsPerUnitY))
                {
                    GridCanvas.DrawLine(0, y, graphGrid.CanvasSize.Width, y, GridPaint1);
                }
            }

            if (GridXEnabled)
            {
                // draw x grid lines
                float pixelsPerUnitX = graphGrid.CanvasSize.Width / (GridXMax - GridXMin);
                float stepSizeX      = GridXStep;

                for (float x = 0; x <= graphGrid.CanvasSize.Width; x += (stepSizeX * pixelsPerUnitX))
                {
                    GridCanvas.DrawLine(x, 0, x, graphGrid.CanvasSize.Height, GridPaint1);
                }
            }

            if (!AutoScale)
            {
                refresh = true;
            }
        }