Index: tests/DrawBitmapRectTest.cpp |
diff --git a/tests/DrawBitmapRectTest.cpp b/tests/DrawBitmapRectTest.cpp |
index 6dca98b527207a086178b07199d6cd839e8c6dc8..23878d30201e83f010f5d57120d5035ca1e3ed70 100644 |
--- a/tests/DrawBitmapRectTest.cpp |
+++ b/tests/DrawBitmapRectTest.cpp |
@@ -94,6 +94,7 @@ static bool treat_as_sprite(const SkMatrix& mat, const SkISize& size, |
static void test_treatAsSprite(skiatest::Reporter* reporter) { |
const unsigned bilerBits = kSkSubPixelBitsForBilerp; |
+ const unsigned nearestNeighborBits = 0; |
SkMatrix mat; |
SkISize size; |
@@ -135,19 +136,19 @@ static void test_treatAsSprite(skiatest::Reporter* reporter) { |
const SkScalar twoThirds = SK_Scalar1 * 2 / 3; |
const SkScalar bigScale = SkScalarDiv(size.width() + twoThirds, size.width()); |
mat.setScale(bigScale, bigScale); |
- REPORTER_ASSERT(reporter, !treat_as_sprite(mat, size, false)); |
+ REPORTER_ASSERT(reporter, !treat_as_sprite(mat, size, nearestNeighborBits)); |
REPORTER_ASSERT(reporter, !treat_as_sprite(mat, size, bilerBits)); |
const SkScalar oneThird = SK_Scalar1 / 3; |
const SkScalar smallScale = SkScalarDiv(size.width() + oneThird, size.width()); |
mat.setScale(smallScale, smallScale); |
- REPORTER_ASSERT(reporter, treat_as_sprite(mat, size, false)); |
+ REPORTER_ASSERT(reporter, treat_as_sprite(mat, size, nearestNeighborBits)); |
REPORTER_ASSERT(reporter, !treat_as_sprite(mat, size, bilerBits)); |
const SkScalar oneFortyth = SK_Scalar1 / 40; |
const SkScalar tinyScale = SkScalarDiv(size.width() + oneFortyth, size.width()); |
mat.setScale(tinyScale, tinyScale); |
- REPORTER_ASSERT(reporter, treat_as_sprite(mat, size, false)); |
+ REPORTER_ASSERT(reporter, treat_as_sprite(mat, size, nearestNeighborBits)); |
REPORTER_ASSERT(reporter, treat_as_sprite(mat, size, bilerBits)); |
} |
@@ -287,6 +288,44 @@ static bool check_for_all_zeros(const SkBitmap& bm) { |
return true; |
} |
+static void test_on_grid(skiatest::Reporter* reporter, int w, int h, const SkRect& r, |
+ SkScalar delta, int bits, bool expected) { |
+ REPORTER_ASSERT(reporter, SkRectIsOnGrid(w, h, r.makeInset(delta, 0), bits) == expected); |
+ REPORTER_ASSERT(reporter, SkRectIsOnGrid(w, h, r.makeInset(-delta, 0), bits) == expected); |
+ REPORTER_ASSERT(reporter, SkRectIsOnGrid(w, h, r.makeInset(0, delta), bits) == expected); |
+ REPORTER_ASSERT(reporter, SkRectIsOnGrid(w, h, r.makeInset(0, -delta), bits) == expected); |
+ |
+ if (0 == bits) { |
+ expected = true; |
+ } |
+ REPORTER_ASSERT(reporter, SkRectIsOnGrid(w, h, r.makeOffset(delta, 0), bits) == expected); |
+ REPORTER_ASSERT(reporter, SkRectIsOnGrid(w, h, r.makeOffset(-delta, 0), bits) == expected); |
+ REPORTER_ASSERT(reporter, SkRectIsOnGrid(w, h, r.makeOffset(0, delta), bits) == expected); |
+ REPORTER_ASSERT(reporter, SkRectIsOnGrid(w, h, r.makeOffset(0, -delta), bits) == expected); |
+ |
+} |
+ |
+static void test_on_grid(skiatest::Reporter* reporter, int bits, SkScalar cutOff) { |
+ const int width = 100; |
+ const int height = 100; |
+ const SkScalar eps = 0.00001f; |
+ |
+ SkRect r; |
+ r.setWH(SkIntToScalar(width), SkIntToScalar(height)); |
+ REPORTER_ASSERT(reporter, SkRectIsOnGrid(width, height, r, bits)); |
+ |
+ test_on_grid(reporter, width, height, r, cutOff - eps, bits, true); |
+ test_on_grid(reporter, width, height, r, cutOff + eps, bits, false); |
+} |
+ |
+static void test_on_grid(skiatest::Reporter* reporter) { |
+ for (int bits = 0; bits <= 8; ++bits) { |
+ // The cutoff for being on the grid is 0.5 * (1/grid_size) |
+ const SkScalar cutOff = SkScalarInvert(1 << (bits + 1)); |
+ test_on_grid(reporter, bits, cutOff); |
+ } |
+} |
+ |
static const int gWidth = 256; |
static const int gHeight = 256; |
@@ -296,6 +335,8 @@ static void create(SkBitmap* bm, SkColor color) { |
} |
DEF_TEST(DrawBitmapRect, reporter) { |
+ test_on_grid(reporter); |
+ |
SkBitmap src, dst; |
create(&src, 0xFFFFFFFF); |