diff options
author | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-11 03:49:41 +0000 |
---|---|---|
committer | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-11 03:49:41 +0000 |
commit | ae79f8bbf66c3de33a7f08a4117fa3ae4423af7e (patch) | |
tree | 2bb0d11281dc043f2a383e2bf8519e80f159baad | |
parent | 0a993c822f1b65cf0c8b40d30896ce98a1d45f0c (diff) | |
download | chromium_src-ae79f8bbf66c3de33a7f08a4117fa3ae4423af7e.zip chromium_src-ae79f8bbf66c3de33a7f08a4117fa3ae4423af7e.tar.gz chromium_src-ae79f8bbf66c3de33a7f08a4117fa3ae4423af7e.tar.bz2 |
Allow a Views client to provide a default frameview for window widgets.
Provides a default one in Ash that will be used to match kennedy-spec.
Much tweaking is needed, but that can come in future CLs.
http://crbug.com/109138
TEST=none
Review URL: http://codereview.chromium.org/9166014
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@117165 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | ash/ash.gyp | 2 | ||||
-rw-r--r-- | ash/ash_switches.cc | 3 | ||||
-rw-r--r-- | ash/ash_switches.h | 1 | ||||
-rw-r--r-- | ash/shell.cc | 10 | ||||
-rw-r--r-- | ash/shell.h | 9 | ||||
-rw-r--r-- | ash/shell/shell_main.cc | 17 | ||||
-rw-r--r-- | ash/wm/modal_container_layout_manager.cc | 12 | ||||
-rw-r--r-- | chrome/app/generated_resources.grd | 6 | ||||
-rw-r--r-- | chrome/browser/about_flags.cc | 7 | ||||
-rw-r--r-- | chrome/browser/ui/views/chrome_views_delegate.cc | 13 | ||||
-rw-r--r-- | chrome/browser/ui/views/chrome_views_delegate.h | 2 | ||||
-rw-r--r-- | chrome/browser/ui/views/constrained_window_views.cc | 8 | ||||
-rw-r--r-- | ui/views/test/test_views_delegate.cc | 5 | ||||
-rw-r--r-- | ui/views/test/test_views_delegate.h | 3 | ||||
-rw-r--r-- | ui/views/views_delegate.h | 7 | ||||
-rw-r--r-- | ui/views/widget/widget.cc | 4 |
16 files changed, 106 insertions, 3 deletions
diff --git a/ash/ash.gyp b/ash/ash.gyp index 3bc383e..32d9cbb 100644 --- a/ash/ash.gyp +++ b/ash/ash.gyp @@ -107,6 +107,8 @@ 'wm/default_container_event_filter.h', 'wm/default_container_layout_manager.cc', 'wm/default_container_layout_manager.h', + 'wm/dialog_frame_view.cc', + 'wm/dialog_frame_view.h', 'wm/image_grid.cc', 'wm/image_grid.h', 'wm/modal_container_layout_manager.cc', diff --git a/ash/ash_switches.cc b/ash/ash_switches.cc index 8ffd94b..30857a8 100644 --- a/ash/ash_switches.cc +++ b/ash/ash_switches.cc @@ -11,6 +11,9 @@ namespace ash { namespace switches { +// Use Google-style dialog box frames. +const char kAuraGoogleDialogFrames[] = "aura-google-dialog-frames"; + // Avoid drawing drop shadows under windows. const char kAuraNoShadows[] = "aura-no-shadows"; diff --git a/ash/ash_switches.h b/ash/ash_switches.h index 2480bb6..65ba77d 100644 --- a/ash/ash_switches.h +++ b/ash/ash_switches.h @@ -12,6 +12,7 @@ namespace ash { namespace switches { // Please keep alphabetized. +ASH_EXPORT extern const char kAuraGoogleDialogFrames[]; ASH_EXPORT extern const char kAuraNoShadows[]; ASH_EXPORT extern const char kAuraTranslucentFrames[]; ASH_EXPORT extern const char kAuraViewsAppList[]; diff --git a/ash/shell.cc b/ash/shell.cc index c2e04fe..7d9863e 100644 --- a/ash/shell.cc +++ b/ash/shell.cc @@ -22,6 +22,7 @@ #include "ash/wm/compact_status_area_layout_manager.h" #include "ash/wm/default_container_event_filter.h" #include "ash/wm/default_container_layout_manager.h" +#include "ash/wm/dialog_frame_view.h" #include "ash/wm/modal_container_layout_manager.h" #include "ash/wm/power_button_controller.h" #include "ash/wm/root_window_event_filter.h" @@ -394,6 +395,15 @@ bool Shell::IsModalWindowOpen() const { return !modal_container->children().empty(); } +views::NonClientFrameView* Shell::CreateDefaultNonClientFrameView( + views::Widget* widget) { + if (CommandLine::ForCurrentProcess()->HasSwitch( + switches::kAuraGoogleDialogFrames)) { + return new internal::DialogFrameView; + } + return NULL; +} + //////////////////////////////////////////////////////////////////////////////// // Shell, private: diff --git a/ash/shell.h b/ash/shell.h index 037b66f..7bb5d0b 100644 --- a/ash/shell.h +++ b/ash/shell.h @@ -27,6 +27,10 @@ namespace gfx { class Rect; class Size; } +namespace views { +class NonClientFrameView; +class Widget; +} namespace ash { @@ -88,6 +92,11 @@ class ASH_EXPORT Shell { // See enum WindowMode for details. bool IsWindowModeCompact() const { return window_mode_ == COMPACT_MODE; } + // Creates a default views::NonClientFrameView for use by windows in the + // Ash environment. + views::NonClientFrameView* CreateDefaultNonClientFrameView( + views::Widget* widget); + AcceleratorController* accelerator_controller() { return accelerator_controller_.get(); } diff --git a/ash/shell/shell_main.cc b/ash/shell/shell_main.cc index acbf788..5619d00 100644 --- a/ash/shell/shell_main.cc +++ b/ash/shell/shell_main.cc @@ -26,6 +26,21 @@ namespace { +class ShellViewsDelegate : public views::TestViewsDelegate { + public: + ShellViewsDelegate() {} + virtual ~ShellViewsDelegate() {} + + // Overridden from views::TestViewsDelegate: + virtual views::NonClientFrameView* CreateDefaultNonClientFrameView( + views::Widget* widget) OVERRIDE { + return ash::Shell::GetInstance()->CreateDefaultNonClientFrameView(widget); + } + + private: + DISALLOW_COPY_AND_ASSIGN(ShellViewsDelegate); +}; + class ShellDelegateImpl : public ash::ShellDelegate { public: ShellDelegateImpl() { @@ -116,7 +131,7 @@ int main(int argc, char** argv) { // A ViewsDelegate is required. if (!views::ViewsDelegate::views_delegate) - views::ViewsDelegate::views_delegate = new views::TestViewsDelegate; + views::ViewsDelegate::views_delegate = new ShellViewsDelegate; ash::Shell::CreateInstance(new ShellDelegateImpl); diff --git a/ash/wm/modal_container_layout_manager.cc b/ash/wm/modal_container_layout_manager.cc index 589305e..e4b8ea4 100644 --- a/ash/wm/modal_container_layout_manager.cc +++ b/ash/wm/modal_container_layout_manager.cc @@ -4,10 +4,12 @@ #include "ash/wm/modal_container_layout_manager.h" +#include "ash/ash_switches.h" #include "ash/shell.h" #include "ash/wm/modality_event_filter.h" #include "ash/wm/window_util.h" #include "base/bind.h" +#include "base/command_line.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/event.h" #include "ui/aura/root_window.h" @@ -30,10 +32,18 @@ class ScreenView : public views::View { // Overridden from views::View: virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE { - canvas->FillRect(SK_ColorBLACK, GetLocalBounds()); + canvas->FillRect(GetOverlayColor(), GetLocalBounds()); } private: + SkColor GetOverlayColor() { + if (CommandLine::ForCurrentProcess()->HasSwitch( + switches::kAuraGoogleDialogFrames)) { + return SK_ColorWHITE; + } + return SK_ColorBLACK; + } + DISALLOW_COPY_AND_ASSIGN(ScreenView); }; diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index effed95..34ab6c1 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd @@ -5019,6 +5019,12 @@ Keep your key file in a safe place. You will need it to create new versions of y <message name="IDS_FLAGS_AURA_TRANSLUCENT_FRAMES_DESCRIPTION" desc="Description for the flag to enable fancy translucent windows."> Enable translucent window frames. </message> + <message name="IDS_FLAGS_AURA_GOOGLE_DIALOG_FRAMES_NAME" desc="Title for the flag to enable Google-style dialog frames."> + Google-style dialogs + </message> + <message name="IDS_FLAGS_AURA_GOOGLE_DIALOG_FRAMES_DESCRIPTION" desc="Description for the flag to enable Google-style dialog frames."> + Enable Google-style dialog frames. + </message> <message name="IDS_FLAGS_ENABLE_POINTER_LOCK_NAME" desc="Title for the flag to enable the pointer lock feature."> Enable Pointer Lock </message> diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 0d0a177..21ff5d7 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc @@ -465,6 +465,13 @@ const Experiment kExperiments[] = { kOsWin | kOsLinux | kOsCrOS, SINGLE_VALUE_TYPE(ash::switches::kAuraTranslucentFrames) }, + { + "aura-google-dialog-frames", + IDS_FLAGS_AURA_GOOGLE_DIALOG_FRAMES_NAME, + IDS_FLAGS_AURA_GOOGLE_DIALOG_FRAMES_DESCRIPTION, + kOsWin | kOsLinux | kOsCrOS, + SINGLE_VALUE_TYPE(ash::switches::kAuraGoogleDialogFrames) + }, #endif // defined(USE_AURA) { "enable-gamepad", diff --git a/chrome/browser/ui/views/chrome_views_delegate.cc b/chrome/browser/ui/views/chrome_views_delegate.cc index ac0f073..f5aceb5 100644 --- a/chrome/browser/ui/views/chrome_views_delegate.cc +++ b/chrome/browser/ui/views/chrome_views_delegate.cc @@ -24,6 +24,10 @@ #include "chrome/browser/app_icon_win.h" #endif +#if defined(USE_AURA) +#include "ash/shell.h" +#endif + namespace { // If the given window has a profile associated with it, use that profile's @@ -124,6 +128,15 @@ HICON ChromeViewsDelegate::GetDefaultWindowIcon() const { } #endif +views::NonClientFrameView* ChromeViewsDelegate::CreateDefaultNonClientFrameView( + views::Widget* widget) { +#if defined(USE_AURA) + return ash::Shell::GetInstance()->CreateDefaultNonClientFrameView(widget); +#else + return NULL; +#endif +} + void ChromeViewsDelegate::AddRef() { g_browser_process->AddRefModule(); } diff --git a/chrome/browser/ui/views/chrome_views_delegate.h b/chrome/browser/ui/views/chrome_views_delegate.h index 71c5dc1..136b5e8 100644 --- a/chrome/browser/ui/views/chrome_views_delegate.h +++ b/chrome/browser/ui/views/chrome_views_delegate.h @@ -38,6 +38,8 @@ class ChromeViewsDelegate : public views::ViewsDelegate { #if defined(OS_WIN) virtual HICON GetDefaultWindowIcon() const OVERRIDE; #endif + virtual views::NonClientFrameView* CreateDefaultNonClientFrameView( + views::Widget* widget) OVERRIDE; virtual void AddRef() OVERRIDE; virtual void ReleaseRef() OVERRIDE; diff --git a/chrome/browser/ui/views/constrained_window_views.cc b/chrome/browser/ui/views/constrained_window_views.cc index 899cc02..36e1418 100644 --- a/chrome/browser/ui/views/constrained_window_views.cc +++ b/chrome/browser/ui/views/constrained_window_views.cc @@ -46,6 +46,10 @@ #include "ui/views/widget/native_widget_win.h" #endif +#if defined(USE_AURA) +#include "ash/shell.h" +#endif + using base::TimeDelta; namespace views { @@ -602,7 +606,11 @@ gfx::NativeWindow ConstrainedWindowViews::GetNativeWindow() { // ConstrainedWindowViews, views::Widget overrides: views::NonClientFrameView* ConstrainedWindowViews::CreateNonClientFrameView() { +#if defined(USE_AURA) + return ash::Shell::GetInstance()->CreateDefaultNonClientFrameView(this); +#else return new ConstrainedWindowFrameView(this); +#endif } //////////////////////////////////////////////////////////////////////////////// diff --git a/ui/views/test/test_views_delegate.cc b/ui/views/test/test_views_delegate.cc index 779e23c..73eef06 100644 --- a/ui/views/test/test_views_delegate.cc +++ b/ui/views/test/test_views_delegate.cc @@ -39,6 +39,11 @@ bool TestViewsDelegate::GetSavedWindowPlacement( return false; } +NonClientFrameView* TestViewsDelegate::CreateDefaultNonClientFrameView( + Widget* widget) { + return NULL; +} + int TestViewsDelegate::GetDispositionForEvent(int event_flags) { return 0; } diff --git a/ui/views/test/test_views_delegate.h b/ui/views/test/test_views_delegate.h index f2c8f69..5fa952d 100644 --- a/ui/views/test/test_views_delegate.h +++ b/ui/views/test/test_views_delegate.h @@ -49,7 +49,8 @@ class TestViewsDelegate : public ViewsDelegate { return NULL; } #endif - + virtual NonClientFrameView* CreateDefaultNonClientFrameView( + Widget* widget) OVERRIDE; virtual void AddRef() OVERRIDE {} virtual void ReleaseRef() OVERRIDE {} diff --git a/ui/views/views_delegate.h b/ui/views/views_delegate.h index 6194617d..2544413 100644 --- a/ui/views/views_delegate.h +++ b/ui/views/views_delegate.h @@ -27,6 +27,7 @@ class Clipboard; namespace views { +class NonClientFrameView; class View; class Widget; @@ -77,6 +78,12 @@ class VIEWS_EXPORT ViewsDelegate { virtual HICON GetDefaultWindowIcon() const = 0; #endif + // Creates a default NonClientFrameView to be used for windows that don't + // specify their own. If this function returns NULL, the + // views::CustomFrameView type will be used. + virtual NonClientFrameView* CreateDefaultNonClientFrameView( + Widget* widget) = 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 d00eedd..a69a1d2 100644 --- a/ui/views/widget/widget.cc +++ b/ui/views/widget/widget.cc @@ -750,6 +750,10 @@ NonClientFrameView* Widget::CreateNonClientFrameView() { NonClientFrameView* frame_view = widget_delegate_->CreateNonClientFrameView(); if (!frame_view) frame_view = native_widget_->CreateNonClientFrameView(); + if (!frame_view && ViewsDelegate::views_delegate) { + frame_view = + ViewsDelegate::views_delegate->CreateDefaultNonClientFrameView(this); + } return frame_view ? frame_view : new CustomFrameView(this); } |