public PrivateAwareStroke adjustStroke(PrivateAwareStroke stroke, Func<PrivateAwareStroke, PrivateAwareStroke> adjustment) { reassociateStrokeToCanvas(stroke); var oldCanvasOffsetX = logicalX; var oldCanvasOffsetY = logicalY; double translateX = 0.0; double translateY = 0.0; var myIncomingRect = stroke.GetBounds(); var localX = myIncomingRect.X; var localY = myIncomingRect.Y; if (checkIfLogicalBoundsUpdates(localX, localY)) { var newBounds = generateLogicalBounds(localX, localY); logicalX = newBounds.X; logicalY = newBounds.Y; translateX = ReturnPositiveValue(ReturnPositiveValue(logicalX) - ReturnPositiveValue(oldCanvasOffsetX)); translateY = ReturnPositiveValue(ReturnPositiveValue(logicalY) - ReturnPositiveValue(oldCanvasOffsetY)); updateCanvasPositioning(strokeFilter.Strokes.Where(s => s.tag().id != stroke.tag().id), textFilter.TextBoxes, imageFilter.Images , translateX, translateY); reassociateStrokeToCanvas(stroke); } return doAdjustStroke(stroke, adjustment); }