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

Unified Diff: ui/compositor/layer_unittest.cc

Issue 499503002: Respect window transparency when applying window shape. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Swap params for ExpectRgba Created 6 years, 3 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
« no previous file with comments | « ui/compositor/layer.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/compositor/layer_unittest.cc
diff --git a/ui/compositor/layer_unittest.cc b/ui/compositor/layer_unittest.cc
index defb4a24020a541e5fabb83aa47800dceaab5ad4..404b0b6f781563ec250ab08029eeff107af815dd 100644
--- a/ui/compositor/layer_unittest.cc
+++ b/ui/compositor/layer_unittest.cc
@@ -847,6 +847,21 @@ TEST_F(LayerWithNullDelegateTest, SetBoundsSchedulesPaint) {
WaitForDraw();
}
+void ExpectRgba(int x, int y, SkColor expected_color, SkColor actual_color) {
+ EXPECT_EQ(expected_color, actual_color)
+ << "Pixel error at x=" << x << " y=" << y << "; "
+ << "actual RGBA=("
+ << SkColorGetR(actual_color) << ","
+ << SkColorGetG(actual_color) << ","
+ << SkColorGetB(actual_color) << ","
+ << SkColorGetA(actual_color) << "); "
+ << "expected RGBA=("
+ << SkColorGetR(expected_color) << ","
+ << SkColorGetG(expected_color) << ","
+ << SkColorGetB(expected_color) << ","
+ << SkColorGetA(expected_color) << ")";
+}
+
// Checks that pixels are actually drawn to the screen with a read back.
TEST_F(LayerWithRealCompositorTest, DrawPixels) {
gfx::Size viewport_size = GetCompositor()->size();
@@ -877,18 +892,86 @@ TEST_F(LayerWithRealCompositorTest, DrawPixels) {
for (int y = 0; y < viewport_size.height(); y++) {
SkColor actual_color = bitmap.getColor(x, y);
SkColor expected_color = y < blue_height ? SK_ColorBLUE : SK_ColorRED;
- EXPECT_EQ(expected_color, actual_color)
- << "Pixel error at x=" << x << " y=" << y << "; "
- << "actual RGBA=("
- << SkColorGetR(actual_color) << ","
- << SkColorGetG(actual_color) << ","
- << SkColorGetB(actual_color) << ","
- << SkColorGetA(actual_color) << "); "
- << "expected RGBA=("
- << SkColorGetR(expected_color) << ","
- << SkColorGetG(expected_color) << ","
- << SkColorGetB(expected_color) << ","
- << SkColorGetA(expected_color) << ")";
+ ExpectRgba(x, y, expected_color, actual_color);
+ }
+ }
+}
+
+// Checks that drawing a layer with transparent pixels is blended correctly
+// with the lower layer.
+TEST_F(LayerWithRealCompositorTest, DrawAlphaBlendedPixels) {
+ gfx::Size viewport_size = GetCompositor()->size();
+
+ int test_size = 200;
+ EXPECT_GE(viewport_size.width(), test_size);
+ EXPECT_GE(viewport_size.height(), test_size);
+
+ // Blue with a wee bit of transparency.
+ SkColor blue_with_alpha = SkColorSetARGBInline(40, 10, 20, 200);
+ SkColor blend_color = SkColorSetARGBInline(255, 216, 3, 32);
+
+ scoped_ptr<Layer> background_layer(
+ CreateColorLayer(SK_ColorRED, gfx::Rect(viewport_size)));
+ scoped_ptr<Layer> foreground_layer(
+ CreateColorLayer(blue_with_alpha, gfx::Rect(viewport_size)));
+
+ // This must be set to false for layers with alpha to be blended correctly.
+ foreground_layer->SetFillsBoundsOpaquely(false);
+
+ background_layer->Add(foreground_layer.get());
+ DrawTree(background_layer.get());
+
+ SkBitmap bitmap;
+ ASSERT_TRUE(ReadPixels(&bitmap, gfx::Rect(viewport_size)));
+ ASSERT_FALSE(bitmap.empty());
+
+ SkAutoLockPixels lock(bitmap);
+ for (int x = 0; x < test_size; x++) {
+ for (int y = 0; y < test_size; y++) {
+ SkColor actual_color = bitmap.getColor(x, y);
+ ExpectRgba(x, y, blend_color, actual_color);
+ }
+ }
+}
+
+// Checks that using the AlphaShape filter applied to a layer with
+// transparency, alpha-blends properly with the layer below.
+TEST_F(LayerWithRealCompositorTest, DrawAlphaThresholdFilterPixels) {
+ gfx::Size viewport_size = GetCompositor()->size();
+
+ int test_size = 200;
+ EXPECT_GE(viewport_size.width(), test_size);
+ EXPECT_GE(viewport_size.height(), test_size);
+
+ int blue_height = 10;
+ SkColor blue_with_alpha = SkColorSetARGBInline(40, 0, 0, 255);
+ SkColor blend_color = SkColorSetARGBInline(255, 215, 0, 40);
+
+ scoped_ptr<Layer> background_layer(
+ CreateColorLayer(SK_ColorRED, gfx::Rect(viewport_size)));
+ scoped_ptr<Layer> foreground_layer(
+ CreateColorLayer(blue_with_alpha, gfx::Rect(viewport_size)));
+
+ // Add a shape to restrict the visible part of the layer.
+ SkRegion shape;
+ shape.setRect(0, 0, viewport_size.width(), blue_height);
+ foreground_layer->SetAlphaShape(make_scoped_ptr(new SkRegion(shape)));
+
+ foreground_layer->SetFillsBoundsOpaquely(false);
+
+ background_layer->Add(foreground_layer.get());
+ DrawTree(background_layer.get());
+
+ SkBitmap bitmap;
+ ASSERT_TRUE(ReadPixels(&bitmap, gfx::Rect(viewport_size)));
+ ASSERT_FALSE(bitmap.empty());
+
+ SkAutoLockPixels lock(bitmap);
+ for (int x = 0; x < test_size; x++) {
+ for (int y = 0; y < test_size; y++) {
+ SkColor actual_color = bitmap.getColor(x, y);
+ ExpectRgba(x, y, actual_color,
+ y < blue_height ? blend_color : SK_ColorRED);
}
}
}
« no previous file with comments | « ui/compositor/layer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698