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

Side by Side Diff: win8/metro_driver/metro_driver_win7.cc

Issue 303673006: Win7 Ash fullscreen mode (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 6 years, 6 months 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "stdafx.h" 5 #include "stdafx.h"
6 #include <corewindow.h> 6 #include <corewindow.h>
7 #include <shobjidl.h>
7 8
8 #include "base/logging.h" 9 #include "base/logging.h"
9 #include "ui/gfx/geometry/safe_integer_conversions.h" 10 #include "ui/gfx/geometry/safe_integer_conversions.h"
10 #include "ui/gfx/win/msg_util.h" 11 #include "ui/gfx/win/msg_util.h"
11 12
13 #pragma comment(lib, "shell32.lib")
14
12 EXTERN_C IMAGE_DOS_HEADER __ImageBase; 15 EXTERN_C IMAGE_DOS_HEADER __ImageBase;
16 // Even though we only create a single window, we need to keep this
17 // count because of the hidden window used by the UI message loop of
18 // the metro viewer.
13 int g_window_count = 0; 19 int g_window_count = 0;
14 20
21 const wchar_t kAshWin7AppId[] = L"Google.Chrome.AshWin7.1";
22
15 extern float GetModernUIScale(); 23 extern float GetModernUIScale();
16 24
17 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, 25 LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
18 WPARAM wparam, LPARAM lparam) { 26 WPARAM wparam, LPARAM lparam) {
19 PAINTSTRUCT ps; 27 PAINTSTRUCT ps;
20 HDC hdc; 28 HDC hdc;
21 switch (message) { 29 switch (message) {
22 case WM_CREATE: 30 case WM_CREATE:
23 ++g_window_count; 31 ++g_window_count;
24 break; 32 break;
ananta 2014/06/10 00:37:38 Are these alignment changes needed?
25 case WM_PAINT: 33 case WM_PAINT:
26 hdc = ::BeginPaint(hwnd, &ps); 34 hdc = ::BeginPaint(hwnd, &ps);
27 ::EndPaint(hwnd, &ps); 35 ::EndPaint(hwnd, &ps);
28 break; 36 break;
29 case WM_CLOSE: 37 case WM_CLOSE:
30 ::DestroyWindow(hwnd); 38 ::DestroyWindow(hwnd);
31 break; 39 break;
32 case WM_DESTROY: 40 case WM_DESTROY:
33 --g_window_count; 41 --g_window_count;
34 if (!g_window_count) 42 if (!g_window_count)
35 ::PostQuitMessage(0); 43 ::PostQuitMessage(0);
36 break; 44 break;
37 // Always allow Chrome to set the cursor. 45 // Always allow Chrome to set the cursor.
38 case WM_SETCURSOR: 46 case WM_SETCURSOR:
39 return 1; 47 return 1;
40 default: 48 default:
41 return ::DefWindowProc(hwnd, message, wparam, lparam); 49 return ::DefWindowProc(hwnd, message, wparam, lparam);
42 } 50 }
43 return 0; 51 return 0;
44 } 52 }
45 53
46 HWND CreateMetroTopLevelWindow() { 54 bool DeveloperModeLaunch() {
ananta 2014/06/10 00:37:38 Instead of a keystate based check, how about IsDeb
55 unsigned short key = ::GetAsyncKeyState(VK_SHIFT);
56 const unsigned short kPressedMask = 0x8000;
57 return (key & kPressedMask) != 0;
58 }
59
60 HWND CreateMetroTopLevelWindow(const RECT& work_area) {
47 HINSTANCE hInst = reinterpret_cast<HINSTANCE>(&__ImageBase); 61 HINSTANCE hInst = reinterpret_cast<HINSTANCE>(&__ImageBase);
48 WNDCLASSEXW wcex; 62 WNDCLASSEXW wcex;
49 wcex.cbSize = sizeof(wcex); 63 wcex.cbSize = sizeof(wcex);
50 wcex.style = CS_HREDRAW | CS_VREDRAW; 64 wcex.style = CS_HREDRAW | CS_VREDRAW;
51 wcex.lpfnWndProc = WndProc; 65 wcex.lpfnWndProc = WndProc;
52 wcex.cbClsExtra = 0; 66 wcex.cbClsExtra = 0;
53 wcex.cbWndExtra = 0; 67 wcex.cbWndExtra = 0;
54 wcex.hInstance = hInst; 68 wcex.hInstance = hInst;
55 wcex.hIcon = 0; 69 wcex.hIcon = LoadIcon(::GetModuleHandle(NULL), L"IDR_MAINFRAME");
56 wcex.hCursor = LoadCursor(NULL, IDC_ARROW); 70 wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
57 wcex.hbrBackground = (HBRUSH)(COLOR_INACTIVECAPTION+1); 71 wcex.hbrBackground = (HBRUSH)(COLOR_INACTIVECAPTION+1);
58 wcex.lpszMenuName = 0; 72 wcex.lpszMenuName = 0;
59 wcex.lpszClassName = L"Windows.UI.Core.CoreWindow"; 73 wcex.lpszClassName = L"Windows.UI.Core.CoreWindow";
60 wcex.hIconSm = 0; 74 wcex.hIconSm = LoadIcon(::GetModuleHandle(NULL), L"IDR_MAINFRAME");
75
76
61 77
62 HWND hwnd = ::CreateWindowExW(0, 78 HWND hwnd = ::CreateWindowExW(0,
63 MAKEINTATOM(::RegisterClassExW(&wcex)), 79 MAKEINTATOM(::RegisterClassExW(&wcex)),
64 L"metro_win7", 80 L"metro_win7",
65 WS_POPUP | WS_VISIBLE, 81 WS_POPUP | WS_VISIBLE | WS_MINIMIZEBOX,
66 0, 0, 1600, 900, 82 work_area.top, work_area.left,
83 work_area.right, work_area.bottom,
67 NULL, NULL, hInst, NULL); 84 NULL, NULL, hInst, NULL);
68 return hwnd; 85 return hwnd;
69 } 86 }
70 87
71 typedef winfoundtn::ITypedEventHandler< 88 typedef winfoundtn::ITypedEventHandler<
72 winapp::Core::CoreApplicationView*, 89 winapp::Core::CoreApplicationView*,
73 winapp::Activation::IActivatedEventArgs*> ActivatedHandler; 90 winapp::Activation::IActivatedEventArgs*> ActivatedHandler;
74 91
75 typedef winfoundtn::ITypedEventHandler< 92 typedef winfoundtn::ITypedEventHandler<
76 winui::Core::CoreWindow*, 93 winui::Core::CoreWindow*,
(...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 mouse_capture_lost_handler_(NULL), 576 mouse_capture_lost_handler_(NULL),
560 mouse_pressed_handler_(NULL), 577 mouse_pressed_handler_(NULL),
561 mouse_released_handler_(NULL), 578 mouse_released_handler_(NULL),
562 mouse_entered_handler_(NULL), 579 mouse_entered_handler_(NULL),
563 mouse_exited_handler_(NULL), 580 mouse_exited_handler_(NULL),
564 mouse_wheel_changed_handler_(NULL), 581 mouse_wheel_changed_handler_(NULL),
565 key_down_handler_(NULL), 582 key_down_handler_(NULL),
566 key_up_handler_(NULL), 583 key_up_handler_(NULL),
567 character_received_handler_(NULL) { 584 character_received_handler_(NULL) {
568 dispatcher_ = mswr::Make<CoreDispatcherEmulation>(this); 585 dispatcher_ = mswr::Make<CoreDispatcherEmulation>(this);
569 core_hwnd_ = CreateMetroTopLevelWindow(); 586
587 // Unless we select our own AppUserModelID the shell might confuse us
588 // with the app launcher one and we get the wrong taskbar button and icon.
589 ::SetCurrentProcessExplicitAppUserModelID(kAshWin7AppId);
590
591 RECT work_area = {0};
592 ::SystemParametersInfo(SPI_GETWORKAREA, 0, &work_area, 0);
593 if (DeveloperModeLaunch()) {
594 work_area.top = 0;
595 work_area.left = 0;
596 work_area.right = 1600;
597 work_area.bottom = 900;
598 }
599
600 core_hwnd_ = CreateMetroTopLevelWindow(work_area);
570 } 601 }
571 602
572 ~CoreWindowEmulation() { 603 ~CoreWindowEmulation() {
573 if (core_hwnd_) 604 if (core_hwnd_)
574 ::DestroyWindow(core_hwnd_); 605 ::DestroyWindow(core_hwnd_);
575 } 606 }
576 607
577 // ICoreWindow implementation: 608 // ICoreWindow implementation:
578 virtual HRESULT STDMETHODCALLTYPE get_AutomationHostProvider( 609 virtual HRESULT STDMETHODCALLTYPE get_AutomationHostProvider(
579 IInspectable** value) { 610 IInspectable** value) {
(...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after
1175 }; 1206 };
1176 1207
1177 1208
1178 mswr::ComPtr<winapp::Core::ICoreApplication> InitWindows7() { 1209 mswr::ComPtr<winapp::Core::ICoreApplication> InitWindows7() {
1179 HRESULT hr = ::CoInitializeEx(NULL, COINIT_MULTITHREADED); 1210 HRESULT hr = ::CoInitializeEx(NULL, COINIT_MULTITHREADED);
1180 if (FAILED(hr)) 1211 if (FAILED(hr))
1181 CHECK(false); 1212 CHECK(false);
1182 return mswr::Make<CoreApplicationWin7Emulation>(); 1213 return mswr::Make<CoreApplicationWin7Emulation>();
1183 } 1214 }
1184 1215
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698