Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(43)

Unified Diff: third_party/WebKit/Source/platform/graphics/GraphicsContextTest.cpp

Issue 2878573003: Initial skeleton of high-contrast mode. (Closed)
Patch Set: Move to CompositedLayerMapping::DoPaintTask and add unit test Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698