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

Unified Diff: ui/aura/window_unittest.cc

Issue 102313002: Wires up painting of layerless children (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comment Created 7 years 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/aura/window.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/aura/window_unittest.cc
diff --git a/ui/aura/window_unittest.cc b/ui/aura/window_unittest.cc
index a3db358e867170ecbc35713d9c131601a05e49f8..0b46c041334f1547b5e164f64163e69bfc3e7b63 100644
--- a/ui/aura/window_unittest.cc
+++ b/ui/aura/window_unittest.cc
@@ -41,6 +41,7 @@
#include "ui/gfx/canvas.h"
#include "ui/gfx/screen.h"
#include "ui/gfx/skia_util.h"
+#include "ui/gfx/vector2d.h"
DECLARE_WINDOW_PROPERTY_TYPE(const char*)
DECLARE_WINDOW_PROPERTY_TYPE(int)
@@ -3366,5 +3367,105 @@ TEST_F(WindowTest, NestedLayerlessWindowsBoundsOnSetBounds) {
delete w1ll;
}
+namespace {
+
+// Tracks the number of times paint is invoked along with what the clip and
+// translate was.
+class PaintWindowDelegate : public TestWindowDelegate {
+ public:
+ PaintWindowDelegate() : paint_count_(0) {}
+ virtual ~PaintWindowDelegate() {}
+
+ const gfx::Rect& most_recent_paint_clip_bounds() const {
+ return most_recent_paint_clip_bounds_;
+ }
+
+ const gfx::Vector2d& most_recent_paint_matrix_offset() const {
+ return most_recent_paint_matrix_offset_;
+ }
+
+ void clear_paint_count() { paint_count_ = 0; }
+ int paint_count() const { return paint_count_; }
+
+ // TestWindowDelegate::
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE {
+ paint_count_++;
+ canvas->GetClipBounds(&most_recent_paint_clip_bounds_);
+ const SkMatrix& matrix = canvas->sk_canvas()->getTotalMatrix();
+ most_recent_paint_matrix_offset_ = gfx::Vector2d(
+ SkScalarFloorToInt(matrix.getTranslateX()),
+ SkScalarFloorToInt(matrix.getTranslateY()));
+ }
+
+ private:
+ int paint_count_;
+ gfx::Rect most_recent_paint_clip_bounds_;
+ gfx::Vector2d most_recent_paint_matrix_offset_;
+
+ DISALLOW_COPY_AND_ASSIGN(PaintWindowDelegate);
+};
+
+} // namespace
+
+// Assertions around layerless children being painted when non-layerless window
+// is painted.
+TEST_F(WindowTest, PaintLayerless) {
+ // Creates the following structure (all children owned by root):
+ // root
+ // w1ll 1,2 40x50
+ // w11ll 3,4 11x12
+ // w111 5,6
+ //
+ // ll: layer less, eg no layer
+ PaintWindowDelegate w1ll_delegate;
+ PaintWindowDelegate w11ll_delegate;
+ PaintWindowDelegate w111_delegate;
+
+ Window root(NULL);
+ root.InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN);
+ root.SetBounds(gfx::Rect(0, 0, 100, 100));
+
+ Window* w1ll = new Window(&w1ll_delegate);
+ w1ll->InitWithWindowLayerType(WINDOW_LAYER_NONE);
+ w1ll->SetBounds(gfx::Rect(1, 2, 40, 50));
+ w1ll->Show();
+ root.AddChild(w1ll);
+
+ Window* w11ll = new Window(&w11ll_delegate);
+ w11ll->InitWithWindowLayerType(WINDOW_LAYER_NONE);
+ w11ll->SetBounds(gfx::Rect(3, 4, 11, 12));
+ w11ll->Show();
+ w1ll->AddChild(w11ll);
+
+ Window* w111 = new Window(&w111_delegate);
+ w111->InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN);
+ w111->SetBounds(gfx::Rect(5, 6, 100, 100));
+ w111->Show();
+ w11ll->AddChild(w111);
+
+ EXPECT_EQ(0, w1ll_delegate.paint_count());
+ EXPECT_EQ(0, w11ll_delegate.paint_count());
+ EXPECT_EQ(0, w111_delegate.paint_count());
+
+ // Paint the root, this should trigger painting of the two layerless
+ // descendants but not the layered descendant.
+ gfx::Canvas canvas(gfx::Size(200, 200), 1.0f, true);
+ static_cast<ui::LayerDelegate&>(root).OnPaintLayer(&canvas);
+
+ // NOTE: SkCanvas::getClipBounds() extends the clip 1 pixel to the left and up
+ // and 2 pixels down and to the right.
+ EXPECT_EQ(1, w1ll_delegate.paint_count());
+ EXPECT_EQ("-1,-1 42x52",
+ w1ll_delegate.most_recent_paint_clip_bounds().ToString());
+ EXPECT_EQ("[1 2]",
+ w1ll_delegate.most_recent_paint_matrix_offset().ToString());
+ EXPECT_EQ(1, w11ll_delegate.paint_count());
+ EXPECT_EQ("-1,-1 13x14",
+ w11ll_delegate.most_recent_paint_clip_bounds().ToString());
+ EXPECT_EQ("[4 6]",
+ w11ll_delegate.most_recent_paint_matrix_offset().ToString());
+ EXPECT_EQ(0, w111_delegate.paint_count());
+}
+
} // namespace test
} // namespace aura
« no previous file with comments | « ui/aura/window.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698