From d94e9eeb3d10557ff3bea3c7c9489f651e0a1e66 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Thu, 5 Feb 2026 18:47:28 +0100 Subject: [PATCH] Allow free zoom and pan in drawing mode --- .../sheet_viewer/drawing/drawing_board.dart | 38 +++++++++++++------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/lib/features/sheet_viewer/drawing/drawing_board.dart b/lib/features/sheet_viewer/drawing/drawing_board.dart index 56a25d8..c13efe2 100644 --- a/lib/features/sheet_viewer/drawing/drawing_board.dart +++ b/lib/features/sheet_viewer/drawing/drawing_board.dart @@ -96,18 +96,32 @@ class _DrawingBoardState extends State { } // Drawing mode: wrap with InteractiveViewer for zoom/pan - return Align( - alignment: widget.alignment, - child: InteractiveViewer( - transformationController: _transformationController, - minScale: widget.minScale, - maxScale: widget.maxScale, - boundaryMargin: EdgeInsets.zero, - constrained: true, - panEnabled: !_isDrawing, - scaleEnabled: !_isDrawing, - child: content, - ), + // Use LayoutBuilder to get available size and center content manually + return LayoutBuilder( + builder: (context, constraints) { + // Calculate padding to center the content + final horizontalPadding = + (constraints.maxWidth - widget.boardSize.width) / 2; + final verticalPadding = + (constraints.maxHeight - widget.boardSize.height) / 2; + + return InteractiveViewer( + transformationController: _transformationController, + minScale: widget.minScale, + maxScale: widget.maxScale, + boundaryMargin: const EdgeInsets.all(double.infinity), + constrained: false, + panEnabled: !_isDrawing, + scaleEnabled: !_isDrawing, + child: Padding( + padding: EdgeInsets.only( + left: horizontalPadding > 0 ? horizontalPadding : 0, + top: verticalPadding > 0 ? verticalPadding : 0, + ), + child: content, + ), + ); + }, ); }