From 1759603e128ad0a08f4a25009b82695420ec2840 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Thu, 18 May 2017 09:37:21 -0700 Subject: [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 --- test/sprite/sprite_atlas.test.cpp | 87 ++++++++++++++------------------------- 1 file changed, 31 insertions(+), 56 deletions(-) (limited to 'test/sprite') 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("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); -- cgit v1.2.1