summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorshrikant@chromium.org <shrikant@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-18 10:18:38 +0000
committershrikant@chromium.org <shrikant@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-18 10:18:38 +0000
commitfe07d2bb2df441e57f90f7f9b303510cc26bc2c3 (patch)
treedf1c2613d6cc3e870ed207c013f2765ed72eb681
parent4c9fd7c5048abe243b03b3691767fe451ce7d400 (diff)
downloadchromium_src-fe07d2bb2df441e57f90f7f9b303510cc26bc2c3.zip
chromium_src-fe07d2bb2df441e57f90f7f9b303510cc26bc2c3.tar.gz
chromium_src-fe07d2bb2df441e57f90f7f9b303510cc26bc2c3.tar.bz2
Fixing opacity for browser frame window on ASH/Windows.
Reviewers=scottmg, sky, cpu TBR=pfeldman BUG=324103 Review URL: https://codereview.chromium.org/108193005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@241535 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--ash/shell/content_client/shell_browser_main_parts.cc7
-rw-r--r--chrome/browser/ui/views/chrome_views_delegate.cc27
-rw-r--r--chrome/browser/ui/views/chrome_views_delegate.h6
-rw-r--r--chrome/browser/ui/views/chrome_views_delegate_aura.cc23
-rw-r--r--chrome/browser/ui/views/chrome_views_delegate_chromeos.cc11
-rw-r--r--chrome/chrome_browser_ui.gypi2
-rw-r--r--content/shell/browser/shell_views.cc5
-rw-r--r--ui/views/test/test_views_delegate.cc10
-rw-r--r--ui/views/test/test_views_delegate.h1
-rw-r--r--ui/views/views_delegate.h5
-rw-r--r--ui/views/widget/widget.cc29
-rw-r--r--ui/views/widget/widget.h4
-rw-r--r--ui/views/widget/widget_unittest.cc15
13 files changed, 72 insertions, 73 deletions
diff --git a/ash/shell/content_client/shell_browser_main_parts.cc b/ash/shell/content_client/shell_browser_main_parts.cc
index 478453d..980c63b 100644
--- a/ash/shell/content_client/shell_browser_main_parts.cc
+++ b/ash/shell/content_client/shell_browser_main_parts.cc
@@ -57,13 +57,12 @@ class ShellViewsDelegate : public views::TestViewsDelegate {
views::Widget* widget) OVERRIDE {
return ash::Shell::GetInstance()->CreateDefaultNonClientFrameView(widget);
}
- virtual bool UseTransparentWindows() const OVERRIDE {
- // Ash uses transparent window frames.
- return true;
- }
virtual void OnBeforeWidgetInit(
views::Widget::InitParams* params,
views::internal::NativeWidgetDelegate* delegate) OVERRIDE {
+ if (params->opacity == views::Widget::InitParams::INFER_OPACITY)
+ params->opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW;
+
if (params->native_widget)
return;
diff --git a/chrome/browser/ui/views/chrome_views_delegate.cc b/chrome/browser/ui/views/chrome_views_delegate.cc
index 65f44b5..b1faf5a 100644
--- a/chrome/browser/ui/views/chrome_views_delegate.cc
+++ b/chrome/browser/ui/views/chrome_views_delegate.cc
@@ -175,21 +175,6 @@ views::NonClientFrameView* ChromeViewsDelegate::CreateDefaultNonClientFrameView(
return NULL;
}
-bool ChromeViewsDelegate::UseTransparentWindows() const {
-#if defined(USE_ASH)
- // TODO(scottmg): http://crbug.com/133312. This needs context to determine
- // if it's desktop or ash.
-#if defined(OS_CHROMEOS)
- return true;
-#else
- NOTIMPLEMENTED();
- return false;
-#endif
-#else
- return false;
-#endif
-}
-
void ChromeViewsDelegate::AddRef() {
g_browser_process->AddRefModule();
}
@@ -207,6 +192,10 @@ content::WebContents* ChromeViewsDelegate::CreateWebContents(
void ChromeViewsDelegate::OnBeforeWidgetInit(
views::Widget::InitParams* params,
views::internal::NativeWidgetDelegate* delegate) {
+ // We need to determine opacity if it's not already specified.
+ if (params->opacity == views::Widget::InitParams::INFER_OPACITY)
+ params->opacity = GetOpacityForInitParams(*params);
+
// If we already have a native_widget, we don't have to try to come
// up with one.
if (params->native_widget)
@@ -311,3 +300,11 @@ base::TimeDelta
ChromeViewsDelegate::GetDefaultTextfieldObscuredRevealDuration() {
return base::TimeDelta();
}
+
+#if !defined(USE_AURA) && !defined(USE_CHROMEOS)
+views::Widget::InitParams::WindowOpacity
+ChromeViewsDelegate::GetOpacityForInitParams(
+ const views::Widget::InitParams& params) {
+ return views::Widget::InitParams::OPAQUE_WINDOW;
+}
+#endif
diff --git a/chrome/browser/ui/views/chrome_views_delegate.h b/chrome/browser/ui/views/chrome_views_delegate.h
index d20c1f0..e3e8f5b 100644
--- a/chrome/browser/ui/views/chrome_views_delegate.h
+++ b/chrome/browser/ui/views/chrome_views_delegate.h
@@ -42,7 +42,6 @@ class ChromeViewsDelegate : public views::ViewsDelegate {
#endif
virtual views::NonClientFrameView* CreateDefaultNonClientFrameView(
views::Widget* widget) OVERRIDE;
- virtual bool UseTransparentWindows() const OVERRIDE;
virtual void AddRef() OVERRIDE;
virtual void ReleaseRef() OVERRIDE;
virtual content::WebContents* CreateWebContents(
@@ -54,6 +53,11 @@ class ChromeViewsDelegate : public views::ViewsDelegate {
virtual base::TimeDelta GetDefaultTextfieldObscuredRevealDuration() OVERRIDE;
private:
+ // Function to retrieve default opacity value mainly based on platform
+ // and desktop context.
+ views::Widget::InitParams::WindowOpacity GetOpacityForInitParams(
+ const views::Widget::InitParams& params);
+
DISALLOW_COPY_AND_ASSIGN(ChromeViewsDelegate);
};
diff --git a/chrome/browser/ui/views/chrome_views_delegate_aura.cc b/chrome/browser/ui/views/chrome_views_delegate_aura.cc
new file mode 100644
index 0000000..c9d7081
--- /dev/null
+++ b/chrome/browser/ui/views/chrome_views_delegate_aura.cc
@@ -0,0 +1,23 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/views/chrome_views_delegate.h"
+
+#include "chrome/browser/ui/ash/ash_util.h"
+
+views::Widget::InitParams::WindowOpacity
+ChromeViewsDelegate::GetOpacityForInitParams(
+ const views::Widget::InitParams& params) {
+#if defined(USE_ASH)
+ gfx::NativeView native_view = params.parent ? params.parent : params.context;
+ if (native_view && chrome::IsNativeViewInAsh(native_view))
+ return views::Widget::InitParams::TRANSLUCENT_WINDOW;
+#endif
+ // We want translucent windows when either we are in ASH or we are
+ // a top level window which is not of type TYPE_WINDOW.
+ if (params.top_level && params.type != views::Widget::InitParams::TYPE_WINDOW)
+ return views::Widget::InitParams::TRANSLUCENT_WINDOW;
+
+ return views::Widget::InitParams::OPAQUE_WINDOW;
+}
diff --git a/chrome/browser/ui/views/chrome_views_delegate_chromeos.cc b/chrome/browser/ui/views/chrome_views_delegate_chromeos.cc
new file mode 100644
index 0000000..c02b480
--- /dev/null
+++ b/chrome/browser/ui/views/chrome_views_delegate_chromeos.cc
@@ -0,0 +1,11 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/views/chrome_views_delegate.h"
+
+views::Widget::InitParams::WindowOpacity
+ChromeViewsDelegate::GetOpacityForInitParams(
+ const views::Widget::InitParams& params) {
+ return views::Widget::InitParams::TRANSLUCENT_WINDOW;
+}
diff --git a/chrome/chrome_browser_ui.gypi b/chrome/chrome_browser_ui.gypi
index 318ce24..fc0d887 100644
--- a/chrome/chrome_browser_ui.gypi
+++ b/chrome/chrome_browser_ui.gypi
@@ -1744,6 +1744,8 @@
'browser/ui/views/chrome_browser_main_extra_parts_views.h',
'browser/ui/views/chrome_views_delegate.cc',
'browser/ui/views/chrome_views_delegate.h',
+ 'browser/ui/views/chrome_views_delegate_aura.cc',
+ 'browser/ui/views/chrome_views_delegate_chromeos.cc',
'browser/ui/views/chrome_web_dialog_view.cc',
'browser/ui/views/collected_cookies_views.cc',
'browser/ui/views/collected_cookies_views.h',
diff --git a/content/shell/browser/shell_views.cc b/content/shell/browser/shell_views.cc
index c27e783..c87f198 100644
--- a/content/shell/browser/shell_views.cc
+++ b/content/shell/browser/shell_views.cc
@@ -56,11 +56,6 @@ class ShellViewsDelegateAura : public views::DesktopTestViewsDelegate {
use_transparent_windows_ = transparent;
}
- // Overridden from views::TestViewsDelegate:
- virtual bool UseTransparentWindows() const OVERRIDE {
- return use_transparent_windows_;
- }
-
private:
bool use_transparent_windows_;
diff --git a/ui/views/test/test_views_delegate.cc b/ui/views/test/test_views_delegate.cc
index a310121a..6a3565cf 100644
--- a/ui/views/test/test_views_delegate.cc
+++ b/ui/views/test/test_views_delegate.cc
@@ -54,10 +54,6 @@ NonClientFrameView* TestViewsDelegate::CreateDefaultNonClientFrameView(
return NULL;
}
-bool TestViewsDelegate::UseTransparentWindows() const {
- return use_transparent_windows_;
-}
-
content::WebContents* TestViewsDelegate::CreateWebContents(
content::BrowserContext* browser_context,
content::SiteInstance* site_instance) {
@@ -67,6 +63,12 @@ content::WebContents* TestViewsDelegate::CreateWebContents(
void TestViewsDelegate::OnBeforeWidgetInit(
Widget::InitParams* params,
internal::NativeWidgetDelegate* delegate) {
+ if (params->opacity == Widget::InitParams::INFER_OPACITY) {
+ if (use_transparent_windows_)
+ params->opacity = Widget::InitParams::TRANSLUCENT_WINDOW;
+ else
+ params->opacity = Widget::InitParams::OPAQUE_WINDOW;
+ }
}
base::TimeDelta TestViewsDelegate::GetDefaultTextfieldObscuredRevealDuration() {
diff --git a/ui/views/test/test_views_delegate.h b/ui/views/test/test_views_delegate.h
index 7816b68..aa7110b3 100644
--- a/ui/views/test/test_views_delegate.h
+++ b/ui/views/test/test_views_delegate.h
@@ -59,7 +59,6 @@ class TestViewsDelegate : public ViewsDelegate {
#endif
virtual NonClientFrameView* CreateDefaultNonClientFrameView(
Widget* widget) OVERRIDE;
- virtual bool UseTransparentWindows() const OVERRIDE;
virtual void AddRef() OVERRIDE {}
virtual void ReleaseRef() OVERRIDE {}
virtual content::WebContents* CreateWebContents(
diff --git a/ui/views/views_delegate.h b/ui/views/views_delegate.h
index 85fa50b..8227865 100644
--- a/ui/views/views_delegate.h
+++ b/ui/views/views_delegate.h
@@ -102,11 +102,6 @@ class VIEWS_EXPORT ViewsDelegate {
virtual NonClientFrameView* CreateDefaultNonClientFrameView(
Widget* widget) = 0;
- // Returns whether the embedding app wants windows to be created with the
- // views::Widget marked as transparent. For example, an app may wish to
- // apply transparent window frames in the NonClientFrameView.
- virtual bool UseTransparentWindows() const = 0;
-
// AddRef/ReleaseRef are invoked while a menu is visible. They are used to
// ensure we don't attempt to exit while a menu is showing.
virtual void AddRef() = 0;
diff --git a/ui/views/widget/widget.cc b/ui/views/widget/widget.cc
index e8e5aa6..05d2060 100644
--- a/ui/views/widget/widget.cc
+++ b/ui/views/widget/widget.cc
@@ -112,9 +112,7 @@ Widget::InitParams::InitParams()
: type(TYPE_WINDOW),
delegate(NULL),
child(false),
- opacity((ViewsDelegate::views_delegate &&
- ViewsDelegate::views_delegate->UseTransparentWindows()) ?
- TRANSLUCENT_WINDOW : INFER_OPACITY),
+ opacity(INFER_OPACITY),
accept_events(true),
can_activate(true),
keep_on_top(false),
@@ -137,10 +135,7 @@ Widget::InitParams::InitParams(Type type)
: type(type),
delegate(NULL),
child(type == TYPE_CONTROL),
- opacity(((type == TYPE_WINDOW || type == TYPE_PANEL) &&
- ViewsDelegate::views_delegate &&
- ViewsDelegate::views_delegate->UseTransparentWindows()) ?
- TRANSLUCENT_WINDOW : INFER_OPACITY),
+ opacity(INFER_OPACITY),
accept_events(true),
can_activate(type != TYPE_POPUP && type != TYPE_MENU &&
type != TYPE_DRAG),
@@ -349,22 +344,18 @@ void Widget::Init(const InitParams& in_params) {
params.type != InitParams::TYPE_CONTROL &&
params.type != InitParams::TYPE_TOOLTIP);
params.top_level = is_top_level_;
- if (params.opacity == InitParams::INFER_OPACITY) {
-#if defined(OS_WIN) && defined(USE_AURA)
- // By default, make all top-level windows but the main window transparent
- // initially so that they can be made to fade in.
- if (is_top_level_ && params.type != InitParams::TYPE_WINDOW)
- params.opacity = InitParams::TRANSLUCENT_WINDOW;
- else
- params.opacity = InitParams::OPAQUE_WINDOW;
-#else
- params.opacity = InitParams::OPAQUE_WINDOW;
-#endif
- }
+
+ if (params.opacity == views::Widget::InitParams::INFER_OPACITY &&
+ params.type != views::Widget::InitParams::TYPE_WINDOW &&
+ params.type != views::Widget::InitParams::TYPE_PANEL)
+ params.opacity = views::Widget::InitParams::OPAQUE_WINDOW;
if (ViewsDelegate::views_delegate)
ViewsDelegate::views_delegate->OnBeforeWidgetInit(&params, this);
+ if (params.opacity == views::Widget::InitParams::INFER_OPACITY)
+ params.opacity = views::Widget::InitParams::OPAQUE_WINDOW;
+
widget_delegate_ = params.delegate ?
params.delegate : new DefaultWidgetDelegate(this, params);
ownership_ = params.ownership;
diff --git a/ui/views/widget/widget.h b/ui/views/widget/widget.h
index ce14d7c..c273192 100644
--- a/ui/views/widget/widget.h
+++ b/ui/views/widget/widget.h
@@ -169,10 +169,6 @@ class VIEWS_EXPORT Widget : public internal::NativeWidgetDelegate,
explicit InitParams(Type type);
~InitParams();
- // Will return the first of the following that isn't NULL: the native view,
- // |parent|, |context|.
- gfx::NativeView GetContext() const;
-
Type type;
// If NULL, a default implementation will be constructed.
WidgetDelegate* delegate;
diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc
index 52d6a5f..b8800d1 100644
--- a/ui/views/widget/widget_unittest.cc
+++ b/ui/views/widget/widget_unittest.cc
@@ -171,24 +171,9 @@ ui::WindowShowState GetWidgetShowState(const Widget* widget) {
}
TEST_F(WidgetTest, WidgetInitParams) {
- ASSERT_FALSE(views_delegate().UseTransparentWindows());
-
// Widgets are not transparent by default.
Widget::InitParams init1;
EXPECT_EQ(Widget::InitParams::INFER_OPACITY, init1.opacity);
-
- // Non-window widgets are not transparent either.
- Widget::InitParams init2(Widget::InitParams::TYPE_MENU);
- EXPECT_EQ(Widget::InitParams::INFER_OPACITY, init2.opacity);
-
- // A ViewsDelegate can set windows transparent by default.
- views_delegate().SetUseTransparentWindows(true);
- Widget::InitParams init3;
- EXPECT_EQ(Widget::InitParams::TRANSLUCENT_WINDOW, init3.opacity);
-
- // Non-window widgets stay opaque.
- Widget::InitParams init4(Widget::InitParams::TYPE_MENU);
- EXPECT_EQ(Widget::InitParams::INFER_OPACITY, init4.opacity);
}
////////////////////////////////////////////////////////////////////////////////