From 68d838e9bf69809bebe36eb3a6b4742f3b8a8769 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 6 Nov 2023 21:32:37 +0100 Subject: [PATCH] Review comments. --- lib/src/layer/tile_layer/tile_image.dart | 4 --- lib/src/layer/tile_layer/tile_image_view.dart | 34 +++++++++---------- lib/src/layer/tile_layer/tile_layer.dart | 15 +++++--- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/lib/src/layer/tile_layer/tile_image.dart b/lib/src/layer/tile_layer/tile_image.dart index cbb414d00..cb8502001 100644 --- a/lib/src/layer/tile_layer/tile_image.dart +++ b/lib/src/layer/tile_layer/tile_image.dart @@ -92,10 +92,6 @@ class TileImage extends ChangeNotifier { /// tile display is used with a maximum opacity less than 1. bool get readyToDisplay => _readyToDisplay; - // Used to sort TileImages by their distance from the current zoom. - double zIndex(double maxZoom, int currentZoom) => - maxZoom - (currentZoom - coordinates.z).abs(); - /// Change the tile display options. set tileDisplay(TileDisplay newTileDisplay) { final oldTileDisplay = _tileDisplay; diff --git a/lib/src/layer/tile_layer/tile_image_view.dart b/lib/src/layer/tile_layer/tile_image_view.dart index 2423b78ca..fd8774bde 100644 --- a/lib/src/layer/tile_layer/tile_image_view.dart +++ b/lib/src/layer/tile_layer/tile_image_view.dart @@ -33,16 +33,14 @@ class TileImageView { for (final tile in _tileImages.values) { final c = tile.coordinates; - if (_keepRange.contains(c)) { - if (!tile.readyToDisplay) { - final retainedAncestor = - _retainAncestor(retain, c.x, c.y, c.z, c.z - 5); - if (!retainedAncestor) { - _retainChildren(retain, c.x, c.y, c.z, c.z + 2); - } - } - } else { + if (!_keepRange.contains(c)) { stale.add(tile); + continue; + } + + final retainedAncestor = _retainAncestor(retain, c.x, c.y, c.z, c.z - 5); + if (!retainedAncestor) { + _retainChildren(retain, c.x, c.y, c.z, c.z + 2); } } @@ -54,15 +52,17 @@ class TileImageView { for (final tile in _tileImages.values) { final c = tile.coordinates; - if (_visibleRange.contains(c)) { - retain.add(tile); + if (!_visibleRange.contains(c)) { + continue; + } + + retain.add(tile); - if (!tile.readyToDisplay) { - final retainedAncestor = - _retainAncestor(retain, c.x, c.y, c.z, c.z - 5); - if (!retainedAncestor) { - _retainChildren(retain, c.x, c.y, c.z, c.z + 2); - } + if (!tile.readyToDisplay) { + final retainedAncestor = + _retainAncestor(retain, c.x, c.y, c.z, c.z - 5); + if (!retainedAncestor) { + _retainChildren(retain, c.x, c.y, c.z, c.z + 2); } } } diff --git a/lib/src/layer/tile_layer/tile_layer.dart b/lib/src/layer/tile_layer/tile_layer.dart index 7f641d656..dcd5b741a 100644 --- a/lib/src/layer/tile_layer/tile_layer.dart +++ b/lib/src/layer/tile_layer/tile_layer.dart @@ -554,15 +554,20 @@ class _TileLayerState extends State with TickerProviderStateMixin { )) .toList(); - // Sort in render order; + // Sort in render order. In reverse: // 1. Tiles at the current zoom. // 2. Tiles at the current zoom +/- 1. // 3. Tiles at the current zoom +/- 2. // 4. ...etc - final maxZoom = widget.maxZoom; - int renderOrder(Tile a, Tile b) => a.tileImage - .zIndex(maxZoom, tileZoom) - .compareTo(b.tileImage.zIndex(maxZoom, tileZoom)); + int renderOrder(Tile a, Tile b) { + final (za, zb) = (a.tileImage.coordinates.z, b.tileImage.coordinates.z); + final cmp = (zb - tileZoom).abs().compareTo((za - tileZoom).abs()); + if (cmp == 0) { + // When compare parent/child tiles of equal distance, prefer higher res images. + return zb.compareTo(za); + } + return cmp; + } return MobileLayerTransformer( // ignore: deprecated_member_use_from_same_package