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

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

Issue 235933004: 3rd part of porting Chrome Ash to Windows 7 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ash_unittests fixes Created 6 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « win8/metro_driver/chrome_app_view_ash.cc ('k') | win8/viewer/metro_viewer_process_host.cc » ('j') | 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 7
8 #include "base/logging.h" 8 #include "base/logging.h"
9 9
10 EXTERN_C IMAGE_DOS_HEADER __ImageBase; 10 EXTERN_C IMAGE_DOS_HEADER __ImageBase;
11 int g_window_count = 0;
11 12
12 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, 13 LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
13 WPARAM wparam, LPARAM lparam) { 14 WPARAM wparam, LPARAM lparam) {
14 PAINTSTRUCT ps; 15 PAINTSTRUCT ps;
15 HDC hdc; 16 HDC hdc;
16 switch (message) { 17 switch (message) {
18 case WM_CREATE:
19 ++g_window_count;
20 break;
17 case WM_PAINT: 21 case WM_PAINT:
18 hdc = ::BeginPaint(hwnd, &ps); 22 hdc = ::BeginPaint(hwnd, &ps);
19 EndPaint(hwnd, &ps); 23 ::EndPaint(hwnd, &ps);
20 break; 24 break;
21 case WM_LBUTTONUP: 25 case WM_LBUTTONUP:
22 // TODO(cpu): Remove this test code. 26 // TODO(cpu): Remove this test code.
23 ::InvalidateRect(hwnd, NULL, TRUE); 27 ::InvalidateRect(hwnd, NULL, TRUE);
24 break; 28 break;
29 case WM_CLOSE:
30 ::DestroyWindow(hwnd);
31 break;
25 case WM_DESTROY: 32 case WM_DESTROY:
26 PostQuitMessage(0); 33 --g_window_count;
34 if (!g_window_count)
35 ::PostQuitMessage(0);
27 break; 36 break;
28 default: 37 default:
29 return ::DefWindowProc(hwnd, message, wparam, lparam); 38 return ::DefWindowProc(hwnd, message, wparam, lparam);
30 } 39 }
31 return 0; 40 return 0;
32 } 41 }
33 42
34 HWND CreateMetroTopLevelWindow() { 43 HWND CreateMetroTopLevelWindow() {
35 HINSTANCE hInst = reinterpret_cast<HINSTANCE>(&__ImageBase); 44 HINSTANCE hInst = reinterpret_cast<HINSTANCE>(&__ImageBase);
36 WNDCLASSEXW wcex; 45 WNDCLASSEXW wcex;
37 wcex.cbSize = sizeof(wcex); 46 wcex.cbSize = sizeof(wcex);
38 wcex.style = CS_HREDRAW | CS_VREDRAW; 47 wcex.style = CS_HREDRAW | CS_VREDRAW;
39 wcex.lpfnWndProc = WndProc; 48 wcex.lpfnWndProc = WndProc;
40 wcex.cbClsExtra = 0; 49 wcex.cbClsExtra = 0;
41 wcex.cbWndExtra = 0; 50 wcex.cbWndExtra = 0;
42 wcex.hInstance = hInst; 51 wcex.hInstance = hInst;
43 wcex.hIcon = 0; 52 wcex.hIcon = 0;
44 wcex.hCursor = LoadCursor(NULL, IDC_ARROW); 53 wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
45 wcex.hbrBackground = (HBRUSH)(COLOR_INACTIVECAPTION+1); 54 wcex.hbrBackground = (HBRUSH)(COLOR_INACTIVECAPTION+1);
46 wcex.lpszMenuName = 0; 55 wcex.lpszMenuName = 0;
47 wcex.lpszClassName = L"Windows.UI.Core.CoreWindow"; 56 wcex.lpszClassName = L"Windows.UI.Core.CoreWindow";
48 wcex.hIconSm = 0; 57 wcex.hIconSm = 0;
49 58
50 HWND hwnd = ::CreateWindowExW(0, 59 HWND hwnd = ::CreateWindowExW(0,
51 MAKEINTATOM(::RegisterClassExW(&wcex)), 60 MAKEINTATOM(::RegisterClassExW(&wcex)),
52 L"metro_win7", 61 L"metro_win7",
53 WS_POPUP | WS_VISIBLE, 62 WS_POPUP | WS_VISIBLE,
54 0, 0, 1024, 1024, 63 0, 0, 1600, 900,
55 NULL, NULL, hInst, NULL); 64 NULL, NULL, hInst, NULL);
56 return hwnd; 65 return hwnd;
57 } 66 }
58 67
59 typedef winfoundtn::ITypedEventHandler< 68 typedef winfoundtn::ITypedEventHandler<
60 winapp::Core::CoreApplicationView*, 69 winapp::Core::CoreApplicationView*,
61 winapp::Activation::IActivatedEventArgs*> ActivatedHandler; 70 winapp::Activation::IActivatedEventArgs*> ActivatedHandler;
62 71
63 typedef winfoundtn::ITypedEventHandler< 72 typedef winfoundtn::ITypedEventHandler<
64 winui::Core::CoreWindow*, 73 winui::Core::CoreWindow*,
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 } 148 }
140 149
141 virtual HRESULT STDMETHODCALLTYPE ProcessEvents( 150 virtual HRESULT STDMETHODCALLTYPE ProcessEvents(
142 winui::Core::CoreProcessEventsOption options) { 151 winui::Core::CoreProcessEventsOption options) {
143 // We don't support the other message pump modes. So we basically enter a 152 // We don't support the other message pump modes. So we basically enter a
144 // traditional message loop that we only exit a teardown. 153 // traditional message loop that we only exit a teardown.
145 if (options != winui::Core::CoreProcessEventsOption_ProcessUntilQuit) 154 if (options != winui::Core::CoreProcessEventsOption_ProcessUntilQuit)
146 return E_FAIL; 155 return E_FAIL;
147 156
148 MSG msg = {0}; 157 MSG msg = {0};
149 while(::GetMessage(&msg, NULL, 0, 0) != 0) { 158 while((::GetMessage(&msg, NULL, 0, 0) != 0) && g_window_count > 0) {
150 ::TranslateMessage(&msg); 159 ::TranslateMessage(&msg);
151 ::DispatchMessage(&msg); 160 ::DispatchMessage(&msg);
152 } 161 }
153 // TODO(cpu): figure what to do with msg.WParam which we would normally 162 // TODO(cpu): figure what to do with msg.WParam which we would normally
154 // return here. 163 // return here.
155 return S_OK; 164 return S_OK;
156 } 165 }
157 166
158 virtual HRESULT STDMETHODCALLTYPE RunAsync( 167 virtual HRESULT STDMETHODCALLTYPE RunAsync(
159 winui::Core::CoreDispatcherPriority priority, 168 winui::Core::CoreDispatcherPriority priority,
(...skipping 27 matching lines...) Expand all
187 : public mswr::RuntimeClass< 196 : public mswr::RuntimeClass<
188 mswr::RuntimeClassFlags<mswr::WinRtClassicComMix>, 197 mswr::RuntimeClassFlags<mswr::WinRtClassicComMix>,
189 winui::Core::ICoreWindow, ICoreWindowInterop> { 198 winui::Core::ICoreWindow, ICoreWindowInterop> {
190 public: 199 public:
191 CoreWindowEmulation() : core_hwnd_(NULL) { 200 CoreWindowEmulation() : core_hwnd_(NULL) {
192 dispatcher_ = mswr::Make<CoreDispacherEmulation>(); 201 dispatcher_ = mswr::Make<CoreDispacherEmulation>();
193 core_hwnd_ = CreateMetroTopLevelWindow(); 202 core_hwnd_ = CreateMetroTopLevelWindow();
194 } 203 }
195 204
196 ~CoreWindowEmulation() { 205 ~CoreWindowEmulation() {
197 ::DestroyWindow(core_hwnd_); 206 if (core_hwnd_)
207 ::DestroyWindow(core_hwnd_);
198 } 208 }
199 209
200 // ICoreWindow implementation: 210 // ICoreWindow implementation:
201 virtual HRESULT STDMETHODCALLTYPE get_AutomationHostProvider( 211 virtual HRESULT STDMETHODCALLTYPE get_AutomationHostProvider(
202 IInspectable** value) { 212 IInspectable** value) {
203 return S_OK; 213 return S_OK;
204 } 214 }
205 215
206 virtual HRESULT STDMETHODCALLTYPE get_Bounds( 216 virtual HRESULT STDMETHODCALLTYPE get_Bounds(
207 winfoundtn::Rect* value) { 217 winfoundtn::Rect* value) {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 boolean* value) { 272 boolean* value) {
263 return S_OK; 273 return S_OK;
264 } 274 }
265 275
266 virtual HRESULT STDMETHODCALLTYPE Activate(void) { 276 virtual HRESULT STDMETHODCALLTYPE Activate(void) {
267 // After we fire OnActivate on the View, Chrome calls us back here. 277 // After we fire OnActivate on the View, Chrome calls us back here.
268 return S_OK; 278 return S_OK;
269 } 279 }
270 280
271 virtual HRESULT STDMETHODCALLTYPE Close(void) { 281 virtual HRESULT STDMETHODCALLTYPE Close(void) {
282 ::PostMessage(core_hwnd_, WM_CLOSE, 0, 0);
283 core_hwnd_ = NULL;
272 return S_OK; 284 return S_OK;
273 } 285 }
274 286
275 virtual HRESULT STDMETHODCALLTYPE GetAsyncKeyState( 287 virtual HRESULT STDMETHODCALLTYPE GetAsyncKeyState(
276 ABI::Windows::System::VirtualKey virtualKey, 288 ABI::Windows::System::VirtualKey virtualKey,
277 winui::Core::CoreVirtualKeyStates* KeyState) { 289 winui::Core::CoreVirtualKeyStates* KeyState) {
278 return S_OK; 290 return S_OK;
279 } 291 }
280 292
281 virtual HRESULT STDMETHODCALLTYPE GetKeyState( 293 virtual HRESULT STDMETHODCALLTYPE GetKeyState(
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
543 HRESULT Activate() { 555 HRESULT Activate() {
544 if (activated_handler_) { 556 if (activated_handler_) {
545 auto ae = mswr::Make<ActivatedEvent>( 557 auto ae = mswr::Make<ActivatedEvent>(
546 winapp::Activation::ActivationKind_File); 558 winapp::Activation::ActivationKind_File);
547 return activated_handler_->Invoke(this, ae.Get()); 559 return activated_handler_->Invoke(this, ae.Get());
548 } else { 560 } else {
549 return S_OK; 561 return S_OK;
550 } 562 }
551 } 563 }
552 564
565 HRESULT Close() {
566 return core_window_->Close();
567 }
568
553 // ICoreApplicationView implementation: 569 // ICoreApplicationView implementation:
554 virtual HRESULT STDMETHODCALLTYPE get_CoreWindow( 570 virtual HRESULT STDMETHODCALLTYPE get_CoreWindow(
555 winui::Core::ICoreWindow** value) { 571 winui::Core::ICoreWindow** value) {
556 if (!core_window_) 572 if (!core_window_)
557 return E_FAIL; 573 return E_FAIL;
558 return core_window_.CopyTo(value); 574 return core_window_.CopyTo(value);
559 } 575 }
560 576
561 virtual HRESULT STDMETHODCALLTYPE add_Activated( 577 virtual HRESULT STDMETHODCALLTYPE add_Activated(
562 ActivatedHandler* handler, 578 ActivatedHandler* handler,
(...skipping 15 matching lines...) Expand all
578 boolean* value) { 594 boolean* value) {
579 return S_OK; 595 return S_OK;
580 } 596 }
581 597
582 virtual HRESULT STDMETHODCALLTYPE get_IsHosted( 598 virtual HRESULT STDMETHODCALLTYPE get_IsHosted(
583 boolean* value) { 599 boolean* value) {
584 return S_OK; 600 return S_OK;
585 } 601 }
586 602
587 private: 603 private:
588 mswr::ComPtr<winui::Core::ICoreWindow> core_window_; 604 mswr::ComPtr<CoreWindowEmulation> core_window_;
589 mswr::ComPtr<ActivatedHandler> activated_handler_; 605 mswr::ComPtr<ActivatedHandler> activated_handler_;
590 }; 606 };
591 607
592 class CoreApplicationWin7Emulation 608 class CoreApplicationWin7Emulation
593 : public mswr::RuntimeClass<winapp::Core::ICoreApplication, 609 : public mswr::RuntimeClass<winapp::Core::ICoreApplication,
594 winapp::Core::ICoreApplicationExit> { 610 winapp::Core::ICoreApplicationExit> {
595 public: 611 public:
596 // ICoreApplication implementation: 612 // ICoreApplication implementation:
597 613
598 virtual HRESULT STDMETHODCALLTYPE get_Id( 614 virtual HRESULT STDMETHODCALLTYPE get_Id(
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
658 } 674 }
659 675
660 virtual HRESULT STDMETHODCALLTYPE RunWithActivationFactories( 676 virtual HRESULT STDMETHODCALLTYPE RunWithActivationFactories(
661 winfoundtn::IGetActivationFactory* activationFactoryCallback) { 677 winfoundtn::IGetActivationFactory* activationFactoryCallback) {
662 return S_OK; 678 return S_OK;
663 } 679 }
664 680
665 // ICoreApplicationExit implementation: 681 // ICoreApplicationExit implementation:
666 682
667 virtual HRESULT STDMETHODCALLTYPE Exit(void) { 683 virtual HRESULT STDMETHODCALLTYPE Exit(void) {
668 return S_OK; 684 return view_emulation_->Close();
669 } 685 }
670 686
671 virtual HRESULT STDMETHODCALLTYPE add_Exiting( 687 virtual HRESULT STDMETHODCALLTYPE add_Exiting(
672 winfoundtn::IEventHandler<IInspectable*>* handler, 688 winfoundtn::IEventHandler<IInspectable*>* handler,
673 EventRegistrationToken* token) { 689 EventRegistrationToken* token) {
674 return S_OK; 690 return S_OK;
675 } 691 }
676 692
677 virtual HRESULT STDMETHODCALLTYPE remove_Exiting( 693 virtual HRESULT STDMETHODCALLTYPE remove_Exiting(
678 EventRegistrationToken token) { 694 EventRegistrationToken token) {
679 return S_OK; 695 return S_OK;
680 } 696 }
681 697
682 private: 698 private:
683 mswr::ComPtr<winapp::Core::IFrameworkView> app_view_; 699 mswr::ComPtr<winapp::Core::IFrameworkView> app_view_;
684 mswr::ComPtr<CoreApplicationViewEmulation> view_emulation_; 700 mswr::ComPtr<CoreApplicationViewEmulation> view_emulation_;
685 }; 701 };
686 702
687 703
688 mswr::ComPtr<winapp::Core::ICoreApplication> InitWindows7() { 704 mswr::ComPtr<winapp::Core::ICoreApplication> InitWindows7() {
689 HRESULT hr = ::CoInitializeEx(NULL, COINIT_MULTITHREADED); 705 HRESULT hr = ::CoInitializeEx(NULL, COINIT_MULTITHREADED);
690 if (FAILED(hr)) 706 if (FAILED(hr))
691 CHECK(false); 707 CHECK(false);
692 return mswr::Make<CoreApplicationWin7Emulation>(); 708 return mswr::Make<CoreApplicationWin7Emulation>();
693 } 709 }
694 710
OLDNEW
« no previous file with comments | « win8/metro_driver/chrome_app_view_ash.cc ('k') | win8/viewer/metro_viewer_process_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698