Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(155)

Side by Side Diff: chrome/browser/ui/views/frame/app_non_client_frame_view_ash.cc

Issue 42353002: Introduce WindowStateDelegate::ToggleFullscreen (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/views/frame/app_non_client_frame_view_ash.h" 5 #include "chrome/browser/ui/views/frame/app_non_client_frame_view_ash.h"
6 6
7 #include "ash/wm/caption_buttons/frame_caption_button_container_view.h" 7 #include "ash/wm/caption_buttons/frame_caption_button_container_view.h"
8 #include "ash/wm/window_state.h"
9 #include "ash/wm/window_state_delegate.h"
8 #include "base/i18n/rtl.h" 10 #include "base/i18n/rtl.h"
11 #include "chrome/browser/ui/browser_commands.h"
12 #include "chrome/browser/ui/browser_finder.h"
13 #include "chrome/browser/ui/browser_window.h"
9 #include "chrome/browser/ui/views/frame/browser_frame.h" 14 #include "chrome/browser/ui/views/frame/browser_frame.h"
10 #include "chrome/browser/ui/views/frame/browser_view.h" 15 #include "chrome/browser/ui/views/frame/browser_view.h"
11 #include "grit/ash_resources.h" 16 #include "grit/ash_resources.h"
12 #include "ui/aura/window.h" 17 #include "ui/aura/window.h"
13 #include "ui/base/hit_test.h" 18 #include "ui/base/hit_test.h"
14 #include "ui/base/resource/resource_bundle.h" 19 #include "ui/base/resource/resource_bundle.h"
15 #include "ui/gfx/canvas.h" 20 #include "ui/gfx/canvas.h"
16 #include "ui/gfx/image/image.h" 21 #include "ui/gfx/image/image.h"
17 #include "ui/gfx/point.h" 22 #include "ui/gfx/point.h"
18 #include "ui/gfx/rect.h" 23 #include "ui/gfx/rect.h"
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 paint_bounds.set_x(view->GetMirroredXForRect(paint_bounds)); 83 paint_bounds.set_x(view->GetMirroredXForRect(paint_bounds));
79 canvas->TileImageInt(background_, paint_bounds.x(), paint_bounds.y(), 84 canvas->TileImageInt(background_, paint_bounds.x(), paint_bounds.y(),
80 paint_bounds.width(), paint_bounds.height()); 85 paint_bounds.width(), paint_bounds.height());
81 } 86 }
82 87
83 gfx::ImageSkia background_; 88 gfx::ImageSkia background_;
84 89
85 DISALLOW_COPY_AND_ASSIGN(ControlViewBackground); 90 DISALLOW_COPY_AND_ASSIGN(ControlViewBackground);
86 }; 91 };
87 92
93 class FrameWindowStateDelegate : public ash::wm::WindowStateDelegate {
94 public:
95 FrameWindowStateDelegate() {}
96 virtual ~FrameWindowStateDelegate(){}
97
98 // Invoked when the user uses Shift+F4/F4 to toggle the window
99 // fullscreen state.
100 virtual bool ToggleFullscreen(ash::wm::WindowState* window_state) OVERRIDE {
101 bool is_fullscreen = window_state->IsFullscreen();
102
103 // Windows which cannot be maximized should not be fullscreened.
104 if (!is_fullscreen && !window_state->CanMaximize())
105 return true;
106
107 Browser* browser = chrome::FindBrowserWithWindow(window_state->window());
108 CHECK(browser);
109 if (is_fullscreen) {
110 chrome::ToggleFullscreenMode(browser);
111 return true;
112 }
113 // AppNonClientFrameViewAsh shows only the window controls and no other
114 // window decorations which is pretty close to fullscreen. Put v1 apps
115 // into maximized mode instead of fullscreen to avoid showing the ugly
116 // fullscreen exit bubble.
117 if (browser->is_app() && browser->app_type() != Browser::APP_TYPE_CHILD)
118 window_state->ToggleMaximized();
119 else
120 chrome::ToggleFullscreenMode(browser);
121 return true;
122 }
123 private:
124 DISALLOW_COPY_AND_ASSIGN(FrameWindowStateDelegate);
125 };
126
88 } // namespace 127 } // namespace
89 128
90 // Observer to detect when the browser frame widget closes so we can clean 129 // Observer to detect when the browser frame widget closes so we can clean
91 // up our ControlView. Because we can be closed via a keyboard shortcut we 130 // up our ControlView. Because we can be closed via a keyboard shortcut we
92 // are not guaranteed to run AppNonClientFrameView's Close() or Restore(). 131 // are not guaranteed to run AppNonClientFrameView's Close() or Restore().
93 class AppNonClientFrameViewAsh::FrameObserver : public views::WidgetObserver { 132 class AppNonClientFrameViewAsh::FrameObserver : public views::WidgetObserver {
94 public: 133 public:
95 explicit FrameObserver(AppNonClientFrameViewAsh* owner) : owner_(owner) {} 134 explicit FrameObserver(AppNonClientFrameViewAsh* owner) : owner_(owner) {}
96 virtual ~FrameObserver() {} 135 virtual ~FrameObserver() {}
97 136
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 // Need to exclude the shadow from the active control area. 185 // Need to exclude the shadow from the active control area.
147 gfx::Insets hit_test_insets(control_view_->GetInsets()); 186 gfx::Insets hit_test_insets(control_view_->GetInsets());
148 if (base::i18n::IsRTL()) { 187 if (base::i18n::IsRTL()) {
149 hit_test_insets = gfx::Insets(hit_test_insets.top(), 188 hit_test_insets = gfx::Insets(hit_test_insets.top(),
150 hit_test_insets.right(), 189 hit_test_insets.right(),
151 hit_test_insets.bottom(), 190 hit_test_insets.bottom(),
152 hit_test_insets.left()); 191 hit_test_insets.left());
153 } 192 }
154 window->SetHitTestBoundsOverrideOuter(hit_test_insets, hit_test_insets); 193 window->SetHitTestBoundsOverrideOuter(hit_test_insets, hit_test_insets);
155 194
195
196 ash::wm::GetWindowState(window)->SetDelegate(new FrameWindowStateDelegate());
197
156 gfx::Rect control_bounds = GetControlBounds(); 198 gfx::Rect control_bounds = GetControlBounds();
157 window->SetBounds(control_bounds); 199 window->SetBounds(control_bounds);
158 control_widget_->Show(); 200 control_widget_->Show();
159 } 201 }
160 202
161 AppNonClientFrameViewAsh::~AppNonClientFrameViewAsh() { 203 AppNonClientFrameViewAsh::~AppNonClientFrameViewAsh() {
162 frame()->RemoveObserver(frame_observer_.get()); 204 frame()->RemoveObserver(frame_observer_.get());
163 // This frame view can be replaced (and deleted) if the window is restored 205 // This frame view can be replaced (and deleted) if the window is restored
164 // via a keyboard shortcut like Alt-[. Ensure we close the control widget. 206 // via a keyboard shortcut like Alt-[. Ensure we close the control widget.
165 CloseControlWidget(); 207 CloseControlWidget();
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 base::i18n::IsRTL() ? 0 : (width() - preferred.width()), 0, 269 base::i18n::IsRTL() ? 0 : (width() - preferred.width()), 0,
228 preferred.width(), preferred.height()); 270 preferred.width(), preferred.height());
229 } 271 }
230 272
231 void AppNonClientFrameViewAsh::CloseControlWidget() { 273 void AppNonClientFrameViewAsh::CloseControlWidget() {
232 if (control_widget_) { 274 if (control_widget_) {
233 control_widget_->Close(); 275 control_widget_->Close();
234 control_widget_ = NULL; 276 control_widget_ = NULL;
235 } 277 }
236 } 278 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698