[core] OverscaledTileID::isChildOf should check wrap values.
Fixes issue #13478
This commit is contained in:
@@ -181,7 +181,8 @@ inline uint32_t OverscaledTileID::overscaleFactor() const {
|
||||
}
|
||||
|
||||
inline bool OverscaledTileID::isChildOf(const OverscaledTileID& rhs) const {
|
||||
return overscaledZ > rhs.overscaledZ &&
|
||||
return wrap == rhs.wrap &&
|
||||
overscaledZ > rhs.overscaledZ &&
|
||||
(canonical == rhs.canonical || canonical.isChildOf(rhs.canonical));
|
||||
}
|
||||
|
||||
|
||||
4
scripts/changelog_staging/tile-is-child.json
Normal file
4
scripts/changelog_staging/tile-is-child.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"core": "Fix OverscaledTileID::isChildOf to exclude tiles with different wrap. Incorrect child detection could cause flickering for symbols displaying in two wrapped world copies at the same time.",
|
||||
"issue": 13478
|
||||
}
|
||||
@@ -186,6 +186,7 @@ TEST(TileID, Overscaled) {
|
||||
EXPECT_TRUE(OverscaledTileID(4, 2, 3).isChildOf(OverscaledTileID(3, 1, 1)));
|
||||
EXPECT_TRUE(OverscaledTileID(5, 0, { 4, 2, 3 }).isChildOf(OverscaledTileID(3, 1, 1)));
|
||||
EXPECT_TRUE(OverscaledTileID(6, 0, { 4, 2, 3 }).isChildOf(OverscaledTileID(3, 1, 1)));
|
||||
EXPECT_FALSE(OverscaledTileID(6, -1, { 4, 2, 3 }).isChildOf(OverscaledTileID(3, 1, 1)));
|
||||
EXPECT_TRUE(OverscaledTileID(7, 0, { 4, 2, 3 }).isChildOf(OverscaledTileID(3, 1, 1)));
|
||||
|
||||
EXPECT_FALSE(OverscaledTileID(2, 0, 0).isChildOf(OverscaledTileID(5, 0, { 4, 2, 3 })));
|
||||
@@ -194,6 +195,7 @@ TEST(TileID, Overscaled) {
|
||||
EXPECT_FALSE(OverscaledTileID(5, 0, { 4, 2, 3 }).isChildOf(OverscaledTileID(5, 0, { 4, 2, 3 })));
|
||||
EXPECT_TRUE(OverscaledTileID(6, 0, { 4, 2, 3 }).isChildOf(OverscaledTileID(5, 0, { 4, 2, 3 })));
|
||||
EXPECT_TRUE(OverscaledTileID(7, 0, { 4, 2, 3 }).isChildOf(OverscaledTileID(5, 0, { 4, 2, 3 })));
|
||||
EXPECT_FALSE(OverscaledTileID(7, 1, { 4, 2, 3 }).isChildOf(OverscaledTileID(5, 0, { 4, 2, 3 })));
|
||||
|
||||
EXPECT_FALSE(OverscaledTileID(2, 0, 0).isChildOf(OverscaledTileID(6, 0, { 4, 2, 3 })));
|
||||
EXPECT_FALSE(OverscaledTileID(3, 1, 1).isChildOf(OverscaledTileID(6, 0, { 4, 2, 3 })));
|
||||
@@ -201,7 +203,8 @@ TEST(TileID, Overscaled) {
|
||||
EXPECT_FALSE(OverscaledTileID(5, 0, { 4, 2, 3 }).isChildOf(OverscaledTileID(6, 0, { 4, 2, 3 })));
|
||||
EXPECT_FALSE(OverscaledTileID(6, 0, { 4, 2, 3 }).isChildOf(OverscaledTileID(6, 0, { 4, 2, 3 })));
|
||||
EXPECT_TRUE(OverscaledTileID(7, 0, { 4, 2, 3 }).isChildOf(OverscaledTileID(6, 0, { 4, 2, 3 })));
|
||||
|
||||
EXPECT_FALSE(OverscaledTileID(7, 0, { 4, 2, 3 }).isChildOf(OverscaledTileID(6, -1, { 4, 2, 3 })));
|
||||
|
||||
EXPECT_FALSE(OverscaledTileID(2, 0, 0).isChildOf(OverscaledTileID(5, 0, { 4, 0, 0 })));
|
||||
EXPECT_FALSE(OverscaledTileID(3, 1, 1).isChildOf(OverscaledTileID(5, 0, { 4, 0, 0 })));
|
||||
EXPECT_FALSE(OverscaledTileID(4, 2, 3).isChildOf(OverscaledTileID(5, 0, { 4, 0, 0 })));
|
||||
|
||||
Reference in New Issue
Block a user