diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-11 04:16:18 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-11 04:16:18 +0000 |
commit | 6fdefb06df4668407059c7dd4cfeaf1ff842b8eb (patch) | |
tree | 57f156f3638fea87cb644a611660a9cbc6c0ff24 /ui | |
parent | 3ca314e1b535852ab615f2bca7d1b11812241c12 (diff) | |
download | chromium_src-6fdefb06df4668407059c7dd4cfeaf1ff842b8eb.zip chromium_src-6fdefb06df4668407059c7dd4cfeaf1ff842b8eb.tar.gz chromium_src-6fdefb06df4668407059c7dd4cfeaf1ff842b8eb.tar.bz2 |
views: Some more layer change, and add/update some tests for layers.
Hide the RootView's layer when a Widget is hidden. Call OnNativeWidgetVisibilityChanged on NativeWidgetGtk's hide/show callbacks.
The tests:
. Make sure Layer bounds change with a View even if it's not visible.
. Make sure Layer visibility is updated with a View's visibility.
. Make sure Layers get unparented properly when a View is removed from the parent view.
BUG=none
TEST=views_unittests
Review URL: http://codereview.chromium.org/8202026
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@104846 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r-- | ui/aura/demo/demo_main.cc | 1 | ||||
-rw-r--r-- | ui/aura/test/test_window_delegate.cc | 3 | ||||
-rw-r--r-- | ui/aura/test/test_window_delegate.h | 1 | ||||
-rw-r--r-- | ui/aura/window.cc | 5 | ||||
-rw-r--r-- | ui/aura/window_delegate.h | 3 | ||||
-rw-r--r-- | ui/aura/window_unittest.cc | 38 |
6 files changed, 49 insertions, 2 deletions
diff --git a/ui/aura/demo/demo_main.cc b/ui/aura/demo/demo_main.cc index 4dae809..cbbdd69 100644 --- a/ui/aura/demo/demo_main.cc +++ b/ui/aura/demo/demo_main.cc @@ -55,6 +55,7 @@ class DemoWindowDelegate : public aura::WindowDelegate { } virtual void OnWindowDestroying() OVERRIDE {} virtual void OnWindowDestroyed() OVERRIDE {} + virtual void OnWindowVisibilityChanged(bool visible) OVERRIDE {} private: SkColor color_; diff --git a/ui/aura/test/test_window_delegate.cc b/ui/aura/test/test_window_delegate.cc index 70a8293..93e84fe 100644 --- a/ui/aura/test/test_window_delegate.cc +++ b/ui/aura/test/test_window_delegate.cc @@ -63,5 +63,8 @@ void TestWindowDelegate::OnWindowDestroying() { void TestWindowDelegate::OnWindowDestroyed() { } +void TestWindowDelegate::OnWindowVisibilityChanged(bool visible) { +} + } // namespace test } // namespace aura diff --git a/ui/aura/test/test_window_delegate.h b/ui/aura/test/test_window_delegate.h index 6cc74ce..e00b87b 100644 --- a/ui/aura/test/test_window_delegate.h +++ b/ui/aura/test/test_window_delegate.h @@ -34,6 +34,7 @@ class TestWindowDelegate : public WindowDelegate { virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; virtual void OnWindowDestroying() OVERRIDE; virtual void OnWindowDestroyed() OVERRIDE; + virtual void OnWindowVisibilityChanged(bool visible) OVERRIDE; private: DISALLOW_COPY_AND_ASSIGN(TestWindowDelegate); diff --git a/ui/aura/window.cc b/ui/aura/window.cc index e6404cc..33f7998 100644 --- a/ui/aura/window.cc +++ b/ui/aura/window.cc @@ -367,8 +367,11 @@ void Window::SetVisible(bool visible) { bool was_visible = IsVisible(); layer_->SetVisible(visible); bool is_visible = IsVisible(); - if (was_visible != is_visible) + if (was_visible != is_visible) { SchedulePaint(); + if (delegate_) + delegate_->OnWindowVisibilityChanged(is_visible); + } } void Window::SchedulePaint() { diff --git a/ui/aura/window_delegate.h b/ui/aura/window_delegate.h index 3e81515..928f164 100644 --- a/ui/aura/window_delegate.h +++ b/ui/aura/window_delegate.h @@ -70,6 +70,9 @@ class AURA_EXPORT WindowDelegate { // The delegate can use this as an opportunity to delete itself if necessary. virtual void OnWindowDestroyed() = 0; + // Called when the visibility of a Window changed. + virtual void OnWindowVisibilityChanged(bool visible) = 0; + protected: virtual ~WindowDelegate() {} }; diff --git a/ui/aura/window_unittest.cc b/ui/aura/window_unittest.cc index b4df76c8..1494ba7 100644 --- a/ui/aura/window_unittest.cc +++ b/ui/aura/window_unittest.cc @@ -543,9 +543,38 @@ TEST_F(WindowTest, GetEventHandlerForPoint_NoDelegate) { EXPECT_EQ(w111.get(), w1->GetEventHandlerForPoint(target_point)); } +class VisibilityWindowDelegate : public TestWindowDelegate { + public: + VisibilityWindowDelegate() + : shown_(0), + hidden_(0) { + } + + int shown() const { return shown_; } + int hidden() const { return hidden_; } + void Clear() { + shown_ = 0; + hidden_ = 0; + } + + virtual void OnWindowVisibilityChanged(bool visible) OVERRIDE { + if (visible) + shown_++; + else + hidden_++; + } + + private: + int shown_; + int hidden_; + + DISALLOW_COPY_AND_ASSIGN(VisibilityWindowDelegate); +}; + // Verifies show/hide propagate correctly to children and the layer. TEST_F(WindowTest, Visibility) { - scoped_ptr<Window> w1(CreateTestWindowWithId(1, NULL)); + VisibilityWindowDelegate d; + scoped_ptr<Window> w1(CreateTestWindowWithDelegate(&d, 1, gfx::Rect(), NULL)); scoped_ptr<Window> w2(CreateTestWindowWithId(2, w1.get())); scoped_ptr<Window> w3(CreateTestWindowWithId(3, w2.get())); @@ -553,11 +582,15 @@ TEST_F(WindowTest, Visibility) { EXPECT_TRUE(w1->IsVisible()); EXPECT_TRUE(w2->IsVisible()); EXPECT_TRUE(w3->IsVisible()); + EXPECT_EQ(1, d.shown()); + d.Clear(); w1->Hide(); EXPECT_FALSE(w1->IsVisible()); EXPECT_FALSE(w2->IsVisible()); EXPECT_FALSE(w3->IsVisible()); + EXPECT_EQ(1, d.hidden()); + EXPECT_EQ(0, d.shown()); w2->Show(); EXPECT_FALSE(w1->IsVisible()); @@ -569,10 +602,13 @@ TEST_F(WindowTest, Visibility) { EXPECT_FALSE(w2->IsVisible()); EXPECT_FALSE(w3->IsVisible()); + d.Clear(); w1->Show(); EXPECT_TRUE(w1->IsVisible()); EXPECT_TRUE(w2->IsVisible()); EXPECT_FALSE(w3->IsVisible()); + EXPECT_EQ(0, d.hidden()); + EXPECT_EQ(1, d.shown()); w3->Show(); EXPECT_TRUE(w1->IsVisible()); |