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

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

Issue 11411286: Decouple IsMetroProcess() calls, introducing IsSingleWindowMetroMode(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: keep base/win/metro.h in omnibox_view_win.cc for IsTSFAwareRequired() Created 8 years 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/browser_frame_win.h" 5 #include "chrome/browser/ui/views/frame/browser_frame_win.h"
6 6
7 #include <dwmapi.h> 7 #include <dwmapi.h>
8 #include <shellapi.h> 8 #include <shellapi.h>
9 #include <set> 9 #include <set>
10 10
(...skipping 28 matching lines...) Expand all
39 #include "ui/base/models/simple_menu_model.h" 39 #include "ui/base/models/simple_menu_model.h"
40 #include "ui/base/resource/resource_bundle.h" 40 #include "ui/base/resource/resource_bundle.h"
41 #include "ui/base/theme_provider.h" 41 #include "ui/base/theme_provider.h"
42 #include "ui/gfx/font.h" 42 #include "ui/gfx/font.h"
43 #include "ui/views/controls/menu/native_menu_win.h" 43 #include "ui/views/controls/menu/native_menu_win.h"
44 #include "ui/views/views_delegate.h" 44 #include "ui/views/views_delegate.h"
45 #include "ui/views/widget/native_widget_win.h" 45 #include "ui/views/widget/native_widget_win.h"
46 #include "ui/views/widget/widget.h" 46 #include "ui/views/widget/widget.h"
47 #include "ui/views/window/non_client_view.h" 47 #include "ui/views/window/non_client_view.h"
48 #include "webkit/glue/window_open_disposition.h" 48 #include "webkit/glue/window_open_disposition.h"
49 #include "win8/util/win8_util.h"
49 50
50 #pragma comment(lib, "dwmapi.lib") 51 #pragma comment(lib, "dwmapi.lib")
51 52
52 // static 53 // static
53 static const int kClientEdgeThickness = 3; 54 static const int kClientEdgeThickness = 3;
54 static const int kTabDragWindowAlpha = 200; 55 static const int kTabDragWindowAlpha = 200;
55 // We need to offset the DWMFrame into the toolbar so that the blackness 56 // We need to offset the DWMFrame into the toolbar so that the blackness
56 // doesn't show up on our rounded corners. 57 // doesn't show up on our rounded corners.
57 static const int kDWMFrameTopOffset = 3; 58 static const int kDWMFrameTopOffset = 3;
58 // If not -1, windows are shown with this state. 59 // If not -1, windows are shown with this state.
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 /////////////////////////////////////////////////////////////////////////////// 96 ///////////////////////////////////////////////////////////////////////////////
96 // BrowserFrameWin, public: 97 // BrowserFrameWin, public:
97 98
98 BrowserFrameWin::BrowserFrameWin(BrowserFrame* browser_frame, 99 BrowserFrameWin::BrowserFrameWin(BrowserFrame* browser_frame,
99 BrowserView* browser_view) 100 BrowserView* browser_view)
100 : views::NativeWidgetWin(browser_frame), 101 : views::NativeWidgetWin(browser_frame),
101 browser_view_(browser_view), 102 browser_view_(browser_view),
102 browser_frame_(browser_frame), 103 browser_frame_(browser_frame),
103 system_menu_delegate_(new SystemMenuModelDelegate(browser_view, 104 system_menu_delegate_(new SystemMenuModelDelegate(browser_view,
104 browser_view->browser())) { 105 browser_view->browser())) {
105 if (base::win::IsMetroProcess()) { 106 if (win8::IsSingleWindowMetroMode()) {
106 browser_view->SetWindowSwitcherButton( 107 browser_view->SetWindowSwitcherButton(
107 MakeWindowSwitcherButton(this, browser_view->IsOffTheRecord())); 108 MakeWindowSwitcherButton(this, browser_view->IsOffTheRecord()));
108 } 109 }
109 } 110 }
110 111
111 BrowserFrameWin::~BrowserFrameWin() { 112 BrowserFrameWin::~BrowserFrameWin() {
112 } 113 }
113 114
114 // static 115 // static
115 void BrowserFrameWin::SetShowState(int state) { 116 void BrowserFrameWin::SetShowState(int state) {
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 GetMetroCurrentTabInfo(w_param); 200 GetMetroCurrentTabInfo(w_param);
200 return false; 201 return false;
201 } 202 }
202 203
203 switch (message) { 204 switch (message) {
204 case WM_ACTIVATE: 205 case WM_ACTIVATE:
205 if (LOWORD(w_param) != WA_INACTIVE) 206 if (LOWORD(w_param) != WA_INACTIVE)
206 minimize_button_metrics_.OnHWNDActivated(); 207 minimize_button_metrics_.OnHWNDActivated();
207 return false; 208 return false;
208 case WM_PRINT: 209 case WM_PRINT:
209 if (base::win::IsMetroProcess()) { 210 if (win8::IsSingleWindowMetroMode()) {
210 // This message is sent by the AnimateWindow API which is used in metro 211 // This message is sent by the AnimateWindow API which is used in metro
211 // mode to flip between active chrome windows. 212 // mode to flip between active chrome windows.
212 RECT client_rect = {0}; 213 RECT client_rect = {0};
213 ::GetClientRect(GetNativeView(), &client_rect); 214 ::GetClientRect(GetNativeView(), &client_rect);
214 HDC dest_dc = reinterpret_cast<HDC>(w_param); 215 HDC dest_dc = reinterpret_cast<HDC>(w_param);
215 DCHECK(dest_dc); 216 DCHECK(dest_dc);
216 HDC src_dc = ::GetDC(GetNativeView()); 217 HDC src_dc = ::GetDC(GetNativeView());
217 ::BitBlt(dest_dc, 0, 0, client_rect.right - client_rect.left, 218 ::BitBlt(dest_dc, 0, 0, client_rect.right - client_rect.left,
218 client_rect.bottom - client_rect.top, src_dc, 0, 0, 219 client_rect.bottom - client_rect.top, src_dc, 0, 0,
219 SRCCOPY); 220 SRCCOPY);
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 304
304 void BrowserFrameWin::Close() { 305 void BrowserFrameWin::Close() {
305 CloseImmersiveFrame(); 306 CloseImmersiveFrame();
306 views::NativeWidgetWin::Close(); 307 views::NativeWidgetWin::Close();
307 } 308 }
308 309
309 void BrowserFrameWin::FrameTypeChanged() { 310 void BrowserFrameWin::FrameTypeChanged() {
310 // In Windows 8 metro mode the frame type is set to FRAME_TYPE_FORCE_CUSTOM 311 // In Windows 8 metro mode the frame type is set to FRAME_TYPE_FORCE_CUSTOM
311 // by default. We reset it back to FRAME_TYPE_DEFAULT to ensure that we 312 // by default. We reset it back to FRAME_TYPE_DEFAULT to ensure that we
312 // don't end up defaulting to BrowserNonClientFrameView in all cases. 313 // don't end up defaulting to BrowserNonClientFrameView in all cases.
313 if (base::win::IsMetroProcess()) 314 if (win8::IsSingleWindowMetroMode())
314 browser_frame_->set_frame_type(views::Widget::FRAME_TYPE_DEFAULT); 315 browser_frame_->set_frame_type(views::Widget::FRAME_TYPE_DEFAULT);
315 316
316 views::NativeWidgetWin::FrameTypeChanged(); 317 views::NativeWidgetWin::FrameTypeChanged();
317 318
318 // In Windows 8 metro mode we call Show on the BrowserFrame instance to 319 // In Windows 8 metro mode we call Show on the BrowserFrame instance to
319 // ensure that the window can be styled appropriately, i.e. no sysmenu, 320 // ensure that the window can be styled appropriately, i.e. no sysmenu,
320 // etc. 321 // etc.
321 if (base::win::IsMetroProcess()) 322 if (win8::IsSingleWindowMetroMode())
322 Show(); 323 Show();
323 } 324 }
324 325
325 void BrowserFrameWin::SetFullscreen(bool fullscreen) { 326 void BrowserFrameWin::SetFullscreen(bool fullscreen) {
326 if (base::win::IsMetroProcess()) { 327 if (win8::IsSingleWindowMetroMode()) {
327 HMODULE metro = base::win::GetMetroModule(); 328 HMODULE metro = base::win::GetMetroModule();
328 if (metro) { 329 if (metro) {
329 MetroSetFullscreen set_full_screen = reinterpret_cast<MetroSetFullscreen>( 330 MetroSetFullscreen set_full_screen = reinterpret_cast<MetroSetFullscreen>(
330 ::GetProcAddress(metro, "SetFullscreen")); 331 ::GetProcAddress(metro, "SetFullscreen"));
331 DCHECK(set_full_screen); 332 DCHECK(set_full_screen);
332 if (set_full_screen) 333 if (set_full_screen)
333 set_full_screen(fullscreen); 334 set_full_screen(fullscreen);
334 } else { 335 } else {
335 NOTREACHED() << "Failed to get metro driver module"; 336 NOTREACHED() << "Failed to get metro driver module";
336 } 337 }
337 } 338 }
338 views::NativeWidgetWin::SetFullscreen(fullscreen); 339 views::NativeWidgetWin::SetFullscreen(fullscreen);
339 } 340 }
340 341
341 void BrowserFrameWin::Activate() { 342 void BrowserFrameWin::Activate() {
342 // In Windows 8 metro mode we have only one window visible at any given time. 343 // In Windows 8 metro mode we have only one window visible at any given time.
343 // The Activate code path is typically called when a new browser window is 344 // The Activate code path is typically called when a new browser window is
344 // being activated. In metro we need to ensure that the window currently 345 // being activated. In metro we need to ensure that the window currently
345 // being displayed is hidden and the new window being activated becomes 346 // being displayed is hidden and the new window being activated becomes
346 // visible. This is achieved by calling AdjustFrameForImmersiveMode() 347 // visible. This is achieved by calling AdjustFrameForImmersiveMode()
347 // followed by ShowWindow(). 348 // followed by ShowWindow().
348 if (base::win::IsMetroProcess()) { 349 if (win8::IsSingleWindowMetroMode()) {
349 AdjustFrameForImmersiveMode(); 350 AdjustFrameForImmersiveMode();
350 ::ShowWindow(browser_frame_->GetNativeWindow(), SW_SHOWNORMAL); 351 ::ShowWindow(browser_frame_->GetNativeWindow(), SW_SHOWNORMAL);
351 } else { 352 } else {
352 views::NativeWidgetWin::Activate(); 353 views::NativeWidgetWin::Activate();
353 } 354 }
354 } 355 }
355 356
356 357
357 //////////////////////////////////////////////////////////////////////////////// 358 ////////////////////////////////////////////////////////////////////////////////
358 // BrowserFrameWin, NativeBrowserFrame implementation: 359 // BrowserFrameWin, NativeBrowserFrame implementation:
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
598 // BrowserFrame, public: 599 // BrowserFrame, public:
599 600
600 // static 601 // static
601 const gfx::Font& BrowserFrame::GetTitleFont() { 602 const gfx::Font& BrowserFrame::GetTitleFont() {
602 static gfx::Font* title_font = 603 static gfx::Font* title_font =
603 new gfx::Font(views::NativeWidgetWin::GetWindowTitleFont()); 604 new gfx::Font(views::NativeWidgetWin::GetWindowTitleFont());
604 return *title_font; 605 return *title_font;
605 } 606 }
606 607
607 bool BrowserFrame::ShouldLeaveOffsetNearTopBorder() { 608 bool BrowserFrame::ShouldLeaveOffsetNearTopBorder() {
608 if (base::win::IsMetroProcess()) { 609 if (win8::IsSingleWindowMetroMode()) {
609 if (ui::GetDisplayLayout() == ui::LAYOUT_DESKTOP) 610 if (ui::GetDisplayLayout() == ui::LAYOUT_DESKTOP)
610 return false; 611 return false;
611 } 612 }
612 return !IsMaximized(); 613 return !IsMaximized();
613 } 614 }
614 615
615 //////////////////////////////////////////////////////////////////////////////// 616 ////////////////////////////////////////////////////////////////////////////////
616 // NativeBrowserFrame, public: 617 // NativeBrowserFrame, public:
617 618
618 // static 619 // static
619 NativeBrowserFrame* NativeBrowserFrame::CreateNativeBrowserFrame( 620 NativeBrowserFrame* NativeBrowserFrame::CreateNativeBrowserFrame(
620 BrowserFrame* browser_frame, 621 BrowserFrame* browser_frame,
621 BrowserView* browser_view) { 622 BrowserView* browser_view) {
622 return new BrowserFrameWin(browser_frame, browser_view); 623 return new BrowserFrameWin(browser_frame, browser_view);
623 } 624 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698