Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 14 additions & 6 deletions lib/packages/ui/src/widgets/media/thunder_image_viewer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -308,14 +308,15 @@ class _ThunderImageViewerState extends State<ThunderImageViewer> with TickerProv
}

Offset _anchoredOffsetForScale({
required Offset anchor,
required Offset baseAnchor,
required Offset targetAnchor,
required Offset baseOffset,
required double baseScale,
required double targetScale,
}) {
final viewportCenter = _viewportSize.center(Offset.zero);
final contentPoint = (anchor - viewportCenter - baseOffset) / baseScale;
final targetOffset = anchor - viewportCenter - contentPoint * targetScale;
final contentPoint = (baseAnchor - viewportCenter - baseOffset) / baseScale;
final targetOffset = targetAnchor - viewportCenter - contentPoint * targetScale;

return _clampOffset(targetOffset, _baseContentSize, targetScale);
}
Expand All @@ -332,6 +333,10 @@ class _ThunderImageViewerState extends State<ThunderImageViewer> with TickerProv
}

double _nextDoubleTapScale() {
if (_scale >= widget.maxScale - _gestureEpsilon) {
return widget.minScale;
}

for (final scale in widget.doubleTapScales) {
if (_scale < scale - _gestureEpsilon) {
return scale.clamp(widget.minScale, widget.maxScale);
Expand All @@ -346,7 +351,8 @@ class _ThunderImageViewerState extends State<ThunderImageViewer> with TickerProv
final targetOffset = targetScale <= widget.minScale + _gestureEpsilon
? Offset.zero
: _anchoredOffsetForScale(
anchor: anchor,
baseAnchor: anchor,
targetAnchor: anchor,
baseOffset: _offset,
baseScale: _scale,
targetScale: targetScale,
Expand Down Expand Up @@ -376,7 +382,8 @@ class _ThunderImageViewerState extends State<ThunderImageViewer> with TickerProv
final targetOffset = targetScale <= widget.minScale + _gestureEpsilon
? Offset.zero
: _anchoredOffsetForScale(
anchor: anchor,
baseAnchor: anchor,
targetAnchor: anchor,
baseOffset: _doubleTapBaseOffset,
baseScale: _doubleTapBaseScale,
targetScale: targetScale,
Expand Down Expand Up @@ -526,7 +533,8 @@ class _ThunderImageViewerState extends State<ThunderImageViewer> with TickerProv
final nextOffset = nextScale <= widget.minScale + _gestureEpsilon
? Offset.zero
: _anchoredOffsetForScale(
anchor: focalPoint,
baseAnchor: gestureStartFocalPoint,
targetAnchor: focalPoint,
baseOffset: _gestureStartOffset,
baseScale: _gestureStartScale,
targetScale: nextScale,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -324,14 +324,7 @@ class _ExperimentalImageViewerState extends State<ExperimentalImageViewer> {
opacity: _isChromeVisible ? 1 : 0,
child: IgnorePointer(
ignoring: !_isChromeVisible,
child: Container(
decoration: const BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [Colors.black54, Colors.transparent],
),
),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
child: Row(
children: [
Expand Down Expand Up @@ -370,14 +363,7 @@ class _ExperimentalImageViewerState extends State<ExperimentalImageViewer> {
opacity: _isChromeVisible ? 1 : 0,
child: IgnorePointer(
ignoring: !_isChromeVisible,
child: Container(
decoration: const BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [Colors.transparent, Colors.black54],
),
),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
Expand Down
Loading