summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorsadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-11 04:16:18 +0000
committersadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-11 04:16:18 +0000
commit6fdefb06df4668407059c7dd4cfeaf1ff842b8eb (patch)
tree57f156f3638fea87cb644a611660a9cbc6c0ff24 /ui
parent3ca314e1b535852ab615f2bca7d1b11812241c12 (diff)
downloadchromium_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.cc1
-rw-r--r--ui/aura/test/test_window_delegate.cc3
-rw-r--r--ui/aura/test/test_window_delegate.h1
-rw-r--r--ui/aura/window.cc5
-rw-r--r--ui/aura/window_delegate.h3
-rw-r--r--ui/aura/window_unittest.cc38
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());