Chromium Code Reviews| Index: third_party/WebKit/Source/platform/graphics/GraphicsContextTest.cpp |
| diff --git a/third_party/WebKit/Source/platform/graphics/GraphicsContextTest.cpp b/third_party/WebKit/Source/platform/graphics/GraphicsContextTest.cpp |
| index 55a61e253f73fc8a58c16ac185aef25b57ce25c7..e4300036ddf9f744f78352cb193ea4ca56275516 100644 |
| --- a/third_party/WebKit/Source/platform/graphics/GraphicsContextTest.cpp |
| +++ b/third_party/WebKit/Source/platform/graphics/GraphicsContextTest.cpp |
| @@ -141,4 +141,127 @@ TEST(GraphicsContextTest, UnboundedDrawsAreClipped) { |
| EXPECT_OPAQUE_PIXELS_IN_RECT(bitmap, IntRect(20, 10, 30, 40)); |
| } |
| +TEST(GraphicsContextTest, HighContrast) { |
| + SkBitmap bitmap; |
| + bitmap.allocN32Pixels(4, 8); |
| + bitmap.eraseColor(0); |
| + SkiaPaintCanvas canvas(bitmap); |
| + |
| + std::unique_ptr<PaintController> paint_controller = PaintController::Create(); |
| + GraphicsContext context(*paint_controller); |
| + |
| + Color black(0.0f, 0.0f, 0.0f, 1.0f); |
| + Color white(1.0f, 1.0f, 1.0f, 1.0f); |
| + Color red(1.0f, 0.0f, 0.0f, 1.0f); |
| + Color gray(0.5f, 0.5f, 0.5f, 1.0f); |
| + |
| + context.BeginRecording(FloatRect(0, 0, 4, 8)); |
| + |
| + // Row 0: No high contrast. |
| + context.FillRect(FloatRect(0, 0, 1, 1), black); |
|
chrishtr
2017/06/05 16:35:18
It would be clearer to put each mode you're testin
dmazzoni
2017/06/06 05:23:24
Done.
|
| + context.FillRect(FloatRect(1, 0, 1, 1), white); |
| + context.FillRect(FloatRect(2, 0, 1, 1), red); |
| + context.FillRect(FloatRect(3, 0, 1, 1), gray); |
| + |
| + // Row 1: High contrast mode off. |
| + HighContrastSettings settings; |
| + settings.mode = HighContrastMode::kOff; |
| + settings.grayscale = false; |
| + settings.contrast = 0; |
| + context.SetHighContrast(settings); |
| + context.FillRect(FloatRect(0, 1, 1, 1), black); |
| + context.FillRect(FloatRect(1, 1, 1, 1), white); |
| + context.FillRect(FloatRect(2, 1, 1, 1), red); |
| + context.FillRect(FloatRect(3, 1, 1, 1), gray); |
| + |
| + // Row 2: Simple invert for testing. Each color component |c| |
| + // is replaced with |255 - c| for easy testing. |
| + settings.mode = HighContrastMode::kSimpleInvertForTesting; |
| + context.SetHighContrast(settings); |
| + context.FillRect(FloatRect(0, 2, 1, 1), black); |
| + context.FillRect(FloatRect(1, 2, 1, 1), white); |
| + context.FillRect(FloatRect(2, 2, 1, 1), red); |
| + context.FillRect(FloatRect(3, 2, 1, 1), gray); |
| + |
| + // Row 3: Invert brightness (with gamma correction). |
| + settings.mode = HighContrastMode::kInvertBrightness; |
| + context.SetHighContrast(settings); |
| + context.FillRect(FloatRect(0, 3, 1, 1), black); |
| + context.FillRect(FloatRect(1, 3, 1, 1), white); |
| + context.FillRect(FloatRect(2, 3, 1, 1), red); |
| + context.FillRect(FloatRect(3, 3, 1, 1), gray); |
| + |
| + // Row 4: Invert lightness (in HSL space). |
| + settings.mode = HighContrastMode::kInvertLightness; |
| + context.SetHighContrast(settings); |
| + context.FillRect(FloatRect(0, 4, 1, 1), black); |
| + context.FillRect(FloatRect(1, 4, 1, 1), white); |
| + context.FillRect(FloatRect(2, 4, 1, 1), red); |
| + context.FillRect(FloatRect(3, 4, 1, 1), gray); |
| + |
| + // Row 5: Invert lightness plus grayscale. |
| + settings.mode = HighContrastMode::kInvertLightness; |
| + settings.grayscale = true; |
| + context.SetHighContrast(settings); |
| + context.FillRect(FloatRect(0, 5, 1, 1), black); |
| + context.FillRect(FloatRect(1, 5, 1, 1), white); |
| + context.FillRect(FloatRect(2, 5, 1, 1), red); |
| + context.FillRect(FloatRect(3, 5, 1, 1), gray); |
| + |
| + // Row 6: Invert lightness plus increased contrast. |
| + settings.mode = HighContrastMode::kInvertLightness; |
| + settings.grayscale = false; |
| + settings.contrast = 0.2; |
| + context.SetHighContrast(settings); |
| + context.FillRect(FloatRect(0, 6, 1, 1), black); |
| + context.FillRect(FloatRect(1, 6, 1, 1), white); |
| + context.FillRect(FloatRect(2, 6, 1, 1), red); |
| + context.FillRect(FloatRect(3, 6, 1, 1), gray); |
| + |
| + // Capture the result in the bitmap. |
| + canvas.drawPicture(context.EndRecording()); |
| + |
| + // Test row 0: No high contrast. |
| + EXPECT_EQ(0xff000000, *bitmap.getAddr32(0, 0)); |
| + EXPECT_EQ(0xffffffff, *bitmap.getAddr32(1, 0)); |
| + EXPECT_EQ(0xffff0000, *bitmap.getAddr32(2, 0)); |
| + EXPECT_EQ(0xff808080, *bitmap.getAddr32(3, 0)); |
| + |
| + // Test row 1: High contrast mode off. |
| + EXPECT_EQ(0xff000000, *bitmap.getAddr32(0, 1)); |
| + EXPECT_EQ(0xffffffff, *bitmap.getAddr32(1, 1)); |
| + EXPECT_EQ(0xffff0000, *bitmap.getAddr32(2, 1)); |
| + EXPECT_EQ(0xff808080, *bitmap.getAddr32(3, 1)); |
| + |
| + // Test row 2: Simple invert for testing. |
| + EXPECT_EQ(0xffffffff, *bitmap.getAddr32(0, 2)); |
| + EXPECT_EQ(0xff000000, *bitmap.getAddr32(1, 2)); |
| + EXPECT_EQ(0xff00ffff, *bitmap.getAddr32(2, 2)); |
| + EXPECT_EQ(0xff7f7f7f, *bitmap.getAddr32(3, 2)); |
| + |
| + // Test row 3: Invert brightness. |
| + EXPECT_EQ(0xffffffff, *bitmap.getAddr32(0, 3)); |
| + EXPECT_EQ(0xff000000, *bitmap.getAddr32(1, 3)); |
| + EXPECT_EQ(0xff00ffff, *bitmap.getAddr32(2, 3)); |
| + EXPECT_EQ(0xffdddddd, *bitmap.getAddr32(3, 3)); |
| + |
| + // Test row 4: Invert lightness. |
| + EXPECT_EQ(0xffffffff, *bitmap.getAddr32(0, 4)); |
| + EXPECT_EQ(0xff000000, *bitmap.getAddr32(1, 4)); |
| + EXPECT_EQ(0xffff0000, *bitmap.getAddr32(2, 4)); |
| + EXPECT_EQ(0xffdddddd, *bitmap.getAddr32(3, 4)); |
| + |
| + // Test row 5: Invert lightness plus grayscale. |
| + EXPECT_EQ(0xffffffff, *bitmap.getAddr32(0, 5)); |
| + EXPECT_EQ(0xff000000, *bitmap.getAddr32(1, 5)); |
| + EXPECT_EQ(0xffe2e2e2, *bitmap.getAddr32(2, 5)); |
| + EXPECT_EQ(0xffdddddd, *bitmap.getAddr32(3, 5)); |
| + |
| + // Test row 6: Invert lightness plus increased contrast. |
| + EXPECT_EQ(0xffffffff, *bitmap.getAddr32(0, 6)); |
| + EXPECT_EQ(0xff000000, *bitmap.getAddr32(1, 6)); |
| + EXPECT_EQ(0xffff0000, *bitmap.getAddr32(2, 6)); |
| + EXPECT_EQ(0xffeeeeee, *bitmap.getAddr32(3, 6)); |
| +} |
| + |
| } // namespace blink |