diff --git a/assets/translation.json b/assets/translation.json index 0545744..47b6225 100644 --- a/assets/translation.json +++ b/assets/translation.json @@ -171,7 +171,9 @@ "Long press to zoom": "长按缩放", "Updates Available": "更新可用", "Unselected": "未选择", - "Long press and drag to reorder.": "长按并拖动以重新排序。" + "Long press and drag to reorder.": "长按并拖动以重新排序。", + "Limit image width": "限制图片宽度", + "When using Continuous(Top to Bottom) mode": "当使用连续(从上到下)模式" }, "zh_TW": { "Home": "首頁", @@ -345,6 +347,8 @@ "Long press to zoom": "長按縮放", "Updates Available": "更新可用", "Unselected": "未選擇", - "Long press and drag to reorder.": "長按並拖動以重新排序。" + "Long press and drag to reorder.": "長按並拖動以重新排序。", + "Limit image width": "限制圖片寬度", + "When using Continuous(Top to Bottom) mode": "當使用連續(從上到下)模式" } } \ No newline at end of file diff --git a/lib/foundation/appdata.dart b/lib/foundation/appdata.dart index 817aa96..eae041e 100644 --- a/lib/foundation/appdata.dart +++ b/lib/foundation/appdata.dart @@ -113,6 +113,7 @@ class _Settings with ChangeNotifier { 'downloadThreads': 5, 'enableLongPressToZoom': true, 'checkUpdateOnStart': true, + 'limitImageWidth': true, }; operator [](String key) { diff --git a/lib/pages/reader/gesture.dart b/lib/pages/reader/gesture.dart index 9c04e34..a97e17e 100644 --- a/lib/pages/reader/gesture.dart +++ b/lib/pages/reader/gesture.dart @@ -22,6 +22,8 @@ class _ReaderGestureDetectorState extends State<_ReaderGestureDetector> { _DragListener? dragListener; + int fingers = 0; + @override void initState() { _tapGestureRecognizer = TapGestureRecognizer() @@ -38,6 +40,7 @@ class _ReaderGestureDetectorState extends State<_ReaderGestureDetector> { return Listener( behavior: HitTestBehavior.translucent, onPointerDown: (event) { + fingers++; _lastTapPointer = event.pointer; _lastTapMoveDistance = Offset.zero; _tapGestureRecognizer.addPointer(event); @@ -46,7 +49,7 @@ class _ReaderGestureDetectorState extends State<_ReaderGestureDetector> { _dragInProgress = false; } Future.delayed(_kLongPressMinTime, () { - if (_lastTapPointer == event.pointer) { + if (_lastTapPointer == event.pointer && fingers == 1) { if(_lastTapMoveDistance!.distanceSquared < 20.0 * 20.0) { onLongPressedDown(event.position); _longPressInProgress = true; @@ -67,6 +70,19 @@ class _ReaderGestureDetectorState extends State<_ReaderGestureDetector> { } }, onPointerUp: (event) { + fingers--; + if (_longPressInProgress) { + onLongPressedUp(event.position); + } + if(_dragInProgress) { + dragListener?.onEnd?.call(); + _dragInProgress = false; + } + _lastTapPointer = null; + _lastTapMoveDistance = null; + }, + onPointerCancel: (event) { + fingers--; if (_longPressInProgress) { onLongPressedUp(event.position); } diff --git a/lib/pages/reader/images.dart b/lib/pages/reader/images.dart index 578b893..11be666 100644 --- a/lib/pages/reader/images.dart +++ b/lib/pages/reader/images.dart @@ -471,18 +471,24 @@ class _ContinuousModeState extends State<_ContinuousMode> }, child: widget, ); + var width = MediaQuery.of(context).size.width; + var height = MediaQuery.of(context).size.height; + if(appdata.settings['limitImageWidth'] && width / height > 0.7) { + width = height * 0.7; + } return PhotoView.customChild( backgroundDecoration: BoxDecoration( color: context.colorScheme.surface, ), + childSize: Size(width, height), minScale: 1.0, maxScale: 2.5, strictScale: true, controller: photoViewController, child: SizedBox( - width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.height, + width: width, + height: height, child: widget, ), ); diff --git a/lib/pages/settings/reader.dart b/lib/pages/settings/reader.dart index e8cb88d..a597736 100644 --- a/lib/pages/settings/reader.dart +++ b/lib/pages/settings/reader.dart @@ -61,6 +61,14 @@ class _ReaderSettingsState extends State { widget.onChanged?.call('enableLongPressToZoom'); }, ).toSliver(), + _SwitchSetting( + title: 'Limit image width'.tl, + subtitle: 'When using Continuous(Top to Bottom) mode'.tl, + settingKey: 'limitImageWidth', + onChanged: () { + widget.onChanged?.call('limitImageWidth'); + }, + ).toSliver(), ], ); } diff --git a/lib/pages/settings/setting_components.dart b/lib/pages/settings/setting_components.dart index 677c98f..9a95270 100644 --- a/lib/pages/settings/setting_components.dart +++ b/lib/pages/settings/setting_components.dart @@ -5,6 +5,7 @@ class _SwitchSetting extends StatefulWidget { required this.title, required this.settingKey, this.onChanged, + this.subtitle, }); final String title; @@ -13,6 +14,8 @@ class _SwitchSetting extends StatefulWidget { final VoidCallback? onChanged; + final String? subtitle; + @override State<_SwitchSetting> createState() => _SwitchSettingState(); } @@ -24,6 +27,7 @@ class _SwitchSettingState extends State<_SwitchSetting> { return ListTile( title: Text(widget.title), + subtitle: widget.subtitle == null ? null : Text(widget.subtitle!), trailing: Switch( value: appdata.settings[widget.settingKey], onChanged: (value) {