diff --git a/flutter/lib/desktop/widgets/remote_toolbar.dart b/flutter/lib/desktop/widgets/remote_toolbar.dart index 6e2e6d77b..e742995a4 100644 --- a/flutter/lib/desktop/widgets/remote_toolbar.dart +++ b/flutter/lib/desktop/widgets/remote_toolbar.dart @@ -941,6 +941,7 @@ class _DisplayMenu extends StatefulWidget { class _DisplayMenuState extends State<_DisplayMenu> { final RxInt _customPercent = 100.obs; + double? _remoteCanvasMarginPreview; late final ScreenAdjustor _screenAdjustor = ScreenAdjustor( id: widget.id, ffi: widget.ffi, @@ -1132,7 +1133,11 @@ class _DisplayMenuState extends State<_DisplayMenu> { .toInt(); final supportsRemoteCanvasMargin = data['supportsRemoteCanvasMargin'] as bool; - final remoteCanvasMargin = data['remoteCanvasMargin'] as double; + final savedRemoteCanvasMargin = data['remoteCanvasMargin'] as double; + final remoteCanvasMargin = + (_remoteCanvasMarginPreview ?? savedRemoteCanvasMargin) + .clamp(0, kMaxRemoteCanvasMargin) + .toDouble(); final hasVisibleControls = scrollVisible || supportsRemoteCanvasMargin; if (!hasVisibleControls) { @@ -1158,7 +1163,16 @@ class _DisplayMenuState extends State<_DisplayMenu> { onChangeRemoteCanvasMargin(double? value) async { if (value == null) return; + _remoteCanvasMarginPreview = + value.clamp(0, kMaxRemoteCanvasMargin).toDouble(); + state.setState(() {}); + } + + onChangeRemoteCanvasMarginEnd(double value) async { + _remoteCanvasMarginPreview = + value.clamp(0, kMaxRemoteCanvasMargin).toDouble(); await widget.ffi.canvasModel.setRemoteCanvasMargin(value); + _remoteCanvasMarginPreview = null; state.setState(() {}); } @@ -1217,6 +1231,7 @@ class _DisplayMenuState extends State<_DisplayMenu> { min: 0, max: kMaxRemoteCanvasMargin, onChanged: onChangeRemoteCanvasMargin, + onChangeEnd: onChangeRemoteCanvasMarginEnd, colorScheme: colorScheme, ), ), @@ -2796,6 +2811,7 @@ Widget _buildPointerTrackWidget(Widget child, FFI? ffi) { class EdgeThicknessControl extends StatelessWidget { final double value; final ValueChanged? onChanged; + final ValueChanged? onChangeEnd; final ColorScheme? colorScheme; final double min; final double max; @@ -2805,6 +2821,7 @@ class EdgeThicknessControl extends StatelessWidget { Key? key, required this.value, this.onChanged, + this.onChangeEnd, this.colorScheme, this.min = kMin, this.max = kMax, @@ -2843,6 +2860,7 @@ class EdgeThicknessControl extends StatelessWidget { semanticFormatterCallback: (double newValue) => "${newValue.round()}$unit", onChanged: onChanged, + onChangeEnd: onChangeEnd, ), ), ); diff --git a/flutter/lib/models/input_model.dart b/flutter/lib/models/input_model.dart index cbbb7afda..5c0093a65 100644 --- a/flutter/lib/models/input_model.dart +++ b/flutter/lib/models/input_model.dart @@ -73,9 +73,10 @@ class CanvasCoords { model.paddingY = (json['paddingY'] ?? 0).toDouble(); model.scrollStyle = ScrollStyle.fromJson(json['scrollStyle'], ScrollStyle.scrollauto); + final sizeMap = json['size']; model.size = Size( - (json['size']['w'] ?? 0).toDouble(), - (json['size']['h'] ?? 0).toDouble(), + (sizeMap?['w'] ?? 0).toDouble(), + (sizeMap?['h'] ?? 0).toDouble(), ); return model; }