public void Render(SKCanvas canvas, SKRect rect) { if (axes == null) { AutoAxis(); } layout.Tighten(rect); axes.SetRect(layout.data); if (layout.display) { layout.RenderDebuggingGuides(canvas); } // update the scale, apply mouse adjustments, then update the scale again PlotSettings.Axes axesAfterMouse = new PlotSettings.Axes(axes); axesAfterMouse.PanPixels(mouse.leftDownDelta); axesAfterMouse.ZoomPixels(mouse.rightDownDelta); axesAfterMouse.SetRect(layout.data); // draw inside a clipping rectangle canvas.Save(); canvas.ClipRect(layout.data); for (int i = 0; i < plottables.Count; i++) { plottables[i].Render(canvas, axesAfterMouse); } canvas.Restore(); axisLabels.Render(layout, canvas); axisScales.Render(layout, axesAfterMouse, canvas); }