diff --git a/marking_app/lib/components/PictureOverview.dart b/marking_app/lib/components/PictureOverview.dart index c93a840..5dc23ec 100644 --- a/marking_app/lib/components/PictureOverview.dart +++ b/marking_app/lib/components/PictureOverview.dart @@ -292,7 +292,7 @@ class PictureOverviewState extends ConsumerState with CommonMix markingUserId: widget.markingUserId, ); zoomInfo = info; - if (double.parse(zoom.toStringAsFixed(2)) <= 1) zoom = 1; + // if (double.parse(zoom.toStringAsFixed(2)) <= 1) zoom = 1; if (imagInfoModel != null) { // 根据缩放比例重置被放大的图片的尺寸 imagInfoModel = TestQuestionsImageInfo( @@ -374,41 +374,51 @@ class PictureOverviewState extends ConsumerState with CommonMix globalPosition = details.localPosition; Offset localPosition = globalPosition!; - if (imagInfoModel != null && - (localPosition.dy < imagInfoModel!.imageHeightOffsetStart! || localPosition.dy > imagInfoModel!.imageHeightOffsetend!)) { - // 笔迹画出图片区域 直接断笔 - var dataVal = ref.read(drawMarkingProvider).data; - if (dataVal.length - 1 > -1 && dataVal[dataVal.length - 1].data != null) { - var newVal = ref.read(drawMarkingProvider).data..add(GestureRecording(eraser: graffitiSwitch.openEraser)); - var newVal1 = ref.read(drawMarkingProvider).offsets..add(null); - ref.read(drawMarkingProvider.notifier).setState(DrawMarkingVal(newVal, newVal1)); - } - illegalArea = true; - return; - } - illegalArea = false; + // if (imagInfoModel != null && + // (localPosition.dy < imagInfoModel!.imageHeightOffsetStart! || localPosition.dy > imagInfoModel!.imageHeightOffsetend!)) { + // // 笔迹画出图片区域 直接断笔 + // var dataVal = ref.read(drawMarkingProvider).data; + // if (dataVal.length - 1 > -1 && dataVal[dataVal.length - 1].data != null) { + // var newVal = ref.read(drawMarkingProvider).data..add(GestureRecording(eraser: graffitiSwitch.openEraser)); + // var newVal1 = ref.read(drawMarkingProvider).offsets..add(null); + // ref.read(drawMarkingProvider.notifier).setState(DrawMarkingVal(newVal, newVal1)); + // } + // illegalArea = true; + // return; + // } + // illegalArea = false; + + var _theKey = _zoomKey.currentState; + print(_theKey); double remainingHeight = imagInfoModel!.imageHeightOffsetStart!; // 剩余高度 if (remainingHeight > 1) { localPosition = Offset(localPosition.dx, localPosition.dy - remainingHeight); - - // if (zoomOffset != null) { - // // var density = (imagInfoModel!.boxWidth / imagInfoModel!.scaleWidth!); - // localPosition = Offset(localPosition.dx/, localPosition.dy); - // } - } else { - if (zoomOffset != null) { - localPosition = Offset(localPosition.dx, localPosition.dy + zoomOffset!.dy.abs()); - } } - if (imagInfoModel?.zoom != null && imagInfoModel?.zoom != 1) { + // print(localPosition.dy); + print(localPosition.dx); + + double _theZoomVal = imagInfoModel?.zoom ?? 1; + var _dx = zoomOffset?.dx ?? 0; + _dx = _dx > 0 ? 0 : _dx.abs() / _theZoomVal; + var _dy = zoomOffset?.dy ?? 0; + _dy = _dy > 0 ? 0 : _dy.abs() / _theZoomVal; + + if (_theZoomVal > 1) { // 计算视图被放大比例 还原笔迹坐标 - localPosition = Offset(localPosition.dx / imagInfoModel!.zoom, localPosition.dy / imagInfoModel!.zoom); + localPosition = Offset(localPosition.dx / _theZoomVal, localPosition.dy / _theZoomVal); if (zoomOffset != null) { // 如果滚动条有触动就加上滚动条滚动的位置 - localPosition = Offset(localPosition.dx + zoomOffset!.dx.abs() / imagInfoModel!.zoom, localPosition.dy); + localPosition = Offset(localPosition.dx + _dx, localPosition.dy + _dy); } + } else if (_theZoomVal < 1) { + // 试图被缩小 + double imgSpaceWidthOfSingle = (imagInfoModel!.boxWidth - imagInfoModel!.scaleWidth!) / 2; + localPosition = Offset((localPosition.dx - imgSpaceWidthOfSingle) / _theZoomVal, localPosition.dy / _theZoomVal + _dy); + // localPosition = Offset(localPosition.dx * _theZoomVal - imgSpaceWidthOfSingle, localPosition.dy / _theZoomVal); + } else { + localPosition = Offset(localPosition.dx, localPosition.dy + _dy); } var newVal = ref.read(drawMarkingProvider).data..add(GestureRecording(eraser: graffitiSwitch.openEraser, data: localPosition));