diff options
author | shrikant@chromium.org <shrikant@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-18 10:18:38 +0000 |
---|---|---|
committer | shrikant@chromium.org <shrikant@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-18 10:18:38 +0000 |
commit | fe07d2bb2df441e57f90f7f9b303510cc26bc2c3 (patch) | |
tree | df1c2613d6cc3e870ed207c013f2765ed72eb681 | |
parent | 4c9fd7c5048abe243b03b3691767fe451ce7d400 (diff) | |
download | chromium_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.cc | 7 | ||||
-rw-r--r-- | chrome/browser/ui/views/chrome_views_delegate.cc | 27 | ||||
-rw-r--r-- | chrome/browser/ui/views/chrome_views_delegate.h | 6 | ||||
-rw-r--r-- | chrome/browser/ui/views/chrome_views_delegate_aura.cc | 23 | ||||
-rw-r--r-- | chrome/browser/ui/views/chrome_views_delegate_chromeos.cc | 11 | ||||
-rw-r--r-- | chrome/chrome_browser_ui.gypi | 2 | ||||
-rw-r--r-- | content/shell/browser/shell_views.cc | 5 | ||||
-rw-r--r-- | ui/views/test/test_views_delegate.cc | 10 | ||||
-rw-r--r-- | ui/views/test/test_views_delegate.h | 1 | ||||
-rw-r--r-- | ui/views/views_delegate.h | 5 | ||||
-rw-r--r-- | ui/views/widget/widget.cc | 29 | ||||
-rw-r--r-- | ui/views/widget/widget.h | 4 | ||||
-rw-r--r-- | ui/views/widget/widget_unittest.cc | 15 |
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(¶ms, 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); } //////////////////////////////////////////////////////////////////////////////// |