# Scrolling an InkCollector

As I mentioned elsewhere, I’m working on a DXCore plugin to enable (Tablet PC) ink drawing on the Visual Studio editor surface. A problem I stumbled upon in this regard was the scrolling functionality. Generally this is really easy to implement, using a transformation with the ink renderer. So I had this method:

void UpdateScrollPosition(TextView textView) { Point p = new Point(textView.ColumnWidth * textView.HorizontalScrollPosition, textView.LineHeight * textView.VerticalScrollPosition); collector.Renderer.PixelToInkSpace(textView.Graphics, ref p); Matrix matrix = new Matrix(); matrix.Translate(-p.X, -p.Y); collector.Renderer.SetViewTransform(matrix); }

After wondering for a while why this didn’t work, I put in some logging and found that the value passed in as `-p.Y`

was actually growing for every call into that method, regardless how I was dragging the vertical scrollbar. The explanation was simple in the end, as these explanations tend to be: the `PixelToInkSpace`

method takes any current transformations into account, so that any calculation is relative to an origin set earlier – in the last update, in fact. So the solution was to use an offset for the calculation and everything started working:

void UpdateScrollPosition(TextView textView) { Point p = new Point(textView.ColumnWidth * textView.HorizontalScrollPosition, textView.LineHeight * textView.VerticalScrollPosition); Point origin = new Point(0, 0); collector.Renderer.PixelToInkSpace(textView.Graphics, ref p); collector.Renderer.PixelToInkSpace(textView.Graphics, ref origin); p.Offset(-origin.X, -origin.Y); Matrix matrix = new Matrix(); matrix.Translate(-p.X, -p.Y); collector.Renderer.SetViewTransform(matrix); }

## Leave a Comment