summaryrefslogtreecommitdiff
path: root/test/sprite
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2017-05-18 09:37:21 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2017-05-23 12:59:27 -0700
commit1759603e128ad0a08f4a25009b82695420ec2840 (patch)
tree77d74c683ca34efc25bd79cbb25774049dbfc695 /test/sprite
parent9e1cbbeacb4007f9c7919185df0aae90fc8f7ad1 (diff)
downloadqtlocation-mapboxgl-1759603e128ad0a08f4a25009b82695420ec2840.tar.gz
[core] Simplify and fix sprite atlas coordinate calculations
* Always return image metrics exclusive of padding * Work with integer coordinates whenever possible * Eliminate redundant SpriteAtlasElement members * Fix asymmetric re-padding in getIconQuad when pixelRatio != 1 * Add explanatory comments
Diffstat (limited to 'test/sprite')
-rw-r--r--test/sprite/sprite_atlas.test.cpp87
1 files changed, 31 insertions, 56 deletions
diff --git a/test/sprite/sprite_atlas.test.cpp b/test/sprite/sprite_atlas.test.cpp
index f6953e61f7..c673c5ca0e 100644
--- a/test/sprite/sprite_atlas.test.cpp
+++ b/test/sprite/sprite_atlas.test.cpp
@@ -26,34 +26,21 @@ TEST(SpriteAtlas, Basic) {
atlas.addImage(image->impl);
}
- EXPECT_EQ(1.0f, atlas.getPixelRatio());
- EXPECT_EQ(63u, atlas.getSize().width);
- EXPECT_EQ(112u, atlas.getSize().height);
+ EXPECT_EQ(63u, atlas.getPixelSize().width);
+ EXPECT_EQ(112u, atlas.getPixelSize().height);
auto metro = *atlas.getIcon("metro");
- float imagePixelRatio = metro.relativePixelRatio * atlas.getPixelRatio();
- EXPECT_EQ(0, metro.pos.x);
- EXPECT_EQ(0, metro.pos.y);
- EXPECT_EQ(20, metro.pos.w);
- EXPECT_EQ(20, metro.pos.h);
- EXPECT_EQ(18, metro.size[0]);
- EXPECT_EQ(18, metro.size[1]);
- EXPECT_EQ(18u, metro.size[0] * imagePixelRatio);
- EXPECT_EQ(18u, metro.size[1] * imagePixelRatio);
- EXPECT_EQ(1.0f, imagePixelRatio);
-
+ EXPECT_EQ(1, metro.tl()[0]);
+ EXPECT_EQ(1, metro.tl()[1]);
+ EXPECT_EQ(19, metro.br()[0]);
+ EXPECT_EQ(19, metro.br()[1]);
+ EXPECT_EQ(18, metro.displaySize()[0]);
+ EXPECT_EQ(18, metro.displaySize()[1]);
+ EXPECT_EQ(1.0f, metro.pixelRatio);
EXPECT_EQ(63u, atlas.getAtlasImage().size.width);
EXPECT_EQ(112u, atlas.getAtlasImage().size.height);
- auto pos = *atlas.getIcon("metro");
- EXPECT_DOUBLE_EQ(18, pos.size[0]);
- EXPECT_DOUBLE_EQ(18, pos.size[1]);
- EXPECT_DOUBLE_EQ(1.0f / 63, pos.tl[0]);
- EXPECT_DOUBLE_EQ(1.0f / 112, pos.tl[1]);
- EXPECT_DOUBLE_EQ(19.0f / 63, pos.br[0]);
- EXPECT_DOUBLE_EQ(19.0f / 112, pos.br[1]);
-
auto missing = atlas.getIcon("doesnotexist");
EXPECT_FALSE(missing);
@@ -66,10 +53,10 @@ TEST(SpriteAtlas, Basic) {
// Different wrapping mode produces different image.
auto metro2 = *atlas.getPattern("metro");
- EXPECT_EQ(20, metro2.pos.x);
- EXPECT_EQ(0, metro2.pos.y);
- EXPECT_EQ(20, metro2.pos.w);
- EXPECT_EQ(20, metro2.pos.h);
+ EXPECT_EQ(21, metro2.tl()[0]);
+ EXPECT_EQ(1, metro2.tl()[1]);
+ EXPECT_EQ(39, metro2.br()[0]);
+ EXPECT_EQ(19, metro2.br()[1]);
test::checkImage("test/fixtures/sprite_atlas/basic", atlas.getAtlasImage());
}
@@ -83,25 +70,17 @@ TEST(SpriteAtlas, Size) {
atlas.addImage(image->impl);
}
- EXPECT_DOUBLE_EQ(1.4f, atlas.getPixelRatio());
- EXPECT_EQ(63u, atlas.getSize().width);
- EXPECT_EQ(112u, atlas.getSize().height);
+ EXPECT_EQ(89u, atlas.getPixelSize().width);
+ EXPECT_EQ(157u, atlas.getPixelSize().height);
auto metro = *atlas.getIcon("metro");
- float imagePixelRatio = metro.relativePixelRatio * atlas.getPixelRatio();
- EXPECT_EQ(0, metro.pos.x);
- EXPECT_EQ(0, metro.pos.y);
- EXPECT_EQ(15, metro.pos.w);
- EXPECT_EQ(15, metro.pos.h);
- EXPECT_EQ(18, metro.size[0]);
- EXPECT_EQ(18, metro.size[1]);
- EXPECT_EQ(18u, metro.size[0] * imagePixelRatio);
- EXPECT_EQ(18u, metro.size[1] * imagePixelRatio);
- EXPECT_EQ(1.0f, imagePixelRatio);
-
- // Now the image was created lazily.
- EXPECT_EQ(89u, atlas.getAtlasImage().size.width);
- EXPECT_EQ(157u, atlas.getAtlasImage().size.height);
+ EXPECT_EQ(1, metro.tl()[0]);
+ EXPECT_EQ(1, metro.tl()[1]);
+ EXPECT_EQ(19, metro.br()[0]);
+ EXPECT_EQ(19, metro.br()[1]);
+ EXPECT_EQ(18, metro.displaySize()[0]);
+ EXPECT_EQ(18, metro.displaySize()[1]);
+ EXPECT_EQ(1.0f, metro.pixelRatio);
test::checkImage("test/fixtures/sprite_atlas/size", atlas.getAtlasImage());
}
@@ -109,22 +88,18 @@ TEST(SpriteAtlas, Size) {
TEST(SpriteAtlas, Updates) {
SpriteAtlas atlas({ 32, 32 }, 1);
- EXPECT_EQ(1.0f, atlas.getPixelRatio());
- EXPECT_EQ(32u, atlas.getSize().width);
- EXPECT_EQ(32u, atlas.getSize().height);
+ EXPECT_EQ(32u, atlas.getPixelSize().width);
+ EXPECT_EQ(32u, atlas.getPixelSize().height);
atlas.addImage(makeMutable<style::Image::Impl>("one", PremultipliedImage({ 16, 12 }), 1));
auto one = *atlas.getIcon("one");
- float imagePixelRatio = one.relativePixelRatio * atlas.getPixelRatio();
- EXPECT_EQ(0, one.pos.x);
- EXPECT_EQ(0, one.pos.y);
- EXPECT_EQ(18, one.pos.w);
- EXPECT_EQ(14, one.pos.h);
- EXPECT_EQ(16, one.size[0]);
- EXPECT_EQ(12, one.size[1]);
- EXPECT_EQ(16u, one.size[0] * imagePixelRatio);
- EXPECT_EQ(12u, one.size[1] * imagePixelRatio);
- EXPECT_EQ(1.0f, imagePixelRatio);
+ EXPECT_EQ(1, one.tl()[0]);
+ EXPECT_EQ(1, one.tl()[1]);
+ EXPECT_EQ(17, one.br()[0]);
+ EXPECT_EQ(13, one.br()[1]);
+ EXPECT_EQ(16, one.displaySize()[0]);
+ EXPECT_EQ(12, one.displaySize()[1]);
+ EXPECT_EQ(1.0f, one.pixelRatio);
// Now the image was created lazily.
EXPECT_EQ(32u, atlas.getAtlasImage().size.width);