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

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

Issue 15599002: Fix Ash on Windows multi-monitor support and snap-view sizing. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Improve comment describing MetroViewerHostMsg_WindowSizeChanged message. Created 7 years, 7 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
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 "win8/metro_driver/stdafx.h" 5 #include "win8/metro_driver/stdafx.h"
6 #include "win8/metro_driver/chrome_app_view_ash.h" 6 #include "win8/metro_driver/chrome_app_view_ash.h"
7 7
8 #include <corewindow.h> 8 #include <corewindow.h>
9 #include <windows.foundation.h> 9 #include <windows.foundation.h>
10 10
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 winui::Core::CharacterReceivedEventArgs*> CharEventHandler; 47 winui::Core::CharacterReceivedEventArgs*> CharEventHandler;
48 48
49 typedef winfoundtn::ITypedEventHandler< 49 typedef winfoundtn::ITypedEventHandler<
50 winui::Core::CoreWindow*, 50 winui::Core::CoreWindow*,
51 winui::Core::VisibilityChangedEventArgs*> VisibilityChangedHandler; 51 winui::Core::VisibilityChangedEventArgs*> VisibilityChangedHandler;
52 52
53 typedef winfoundtn::ITypedEventHandler< 53 typedef winfoundtn::ITypedEventHandler<
54 winui::Core::CoreWindow*, 54 winui::Core::CoreWindow*,
55 winui::Core::WindowActivatedEventArgs*> WindowActivatedHandler; 55 winui::Core::WindowActivatedEventArgs*> WindowActivatedHandler;
56 56
57 typedef winfoundtn::ITypedEventHandler<
58 winui::Core::CoreWindow*,
59 winui::Core::WindowSizeChangedEventArgs*> SizeChangedHandler;
60
57 // This function is exported by chrome.exe. 61 // This function is exported by chrome.exe.
58 typedef int (__cdecl *BreakpadExceptionHandler)(EXCEPTION_POINTERS* info); 62 typedef int (__cdecl *BreakpadExceptionHandler)(EXCEPTION_POINTERS* info);
59 63
60 // Global information used across the metro driver. 64 // Global information used across the metro driver.
61 struct Globals { 65 struct Globals {
62 winapp::Activation::ApplicationExecutionState previous_state; 66 winapp::Activation::ApplicationExecutionState previous_state;
63 winapp::Core::ICoreApplicationExit* app_exit; 67 winapp::Core::ICoreApplicationExit* app_exit;
64 BreakpadExceptionHandler breakpad_exception_handler; 68 BreakpadExceptionHandler breakpad_exception_handler;
65 } globals; 69 } globals;
66 70
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 window_ = window; 323 window_ = window;
320 DVLOG(1) << __FUNCTION__; 324 DVLOG(1) << __FUNCTION__;
321 325
322 // Retrieve the native window handle via the interop layer. 326 // Retrieve the native window handle via the interop layer.
323 mswr::ComPtr<ICoreWindowInterop> interop; 327 mswr::ComPtr<ICoreWindowInterop> interop;
324 HRESULT hr = window->QueryInterface(interop.GetAddressOf()); 328 HRESULT hr = window->QueryInterface(interop.GetAddressOf());
325 CheckHR(hr); 329 CheckHR(hr);
326 hr = interop->get_WindowHandle(&core_window_hwnd_); 330 hr = interop->get_WindowHandle(&core_window_hwnd_);
327 CheckHR(hr); 331 CheckHR(hr);
328 332
333 hr = window_->add_SizeChanged(mswr::Callback<SizeChangedHandler>(
334 this, &ChromeAppViewAsh::OnSizeChanged).Get(),
335 &sizechange_token_);
336 CheckHR(hr);
337
329 // Register for pointer and keyboard notifications. We forward 338 // Register for pointer and keyboard notifications. We forward
330 // them to the browser process via IPC. 339 // them to the browser process via IPC.
331 hr = window_->add_PointerMoved(mswr::Callback<PointerEventHandler>( 340 hr = window_->add_PointerMoved(mswr::Callback<PointerEventHandler>(
332 this, &ChromeAppViewAsh::OnPointerMoved).Get(), 341 this, &ChromeAppViewAsh::OnPointerMoved).Get(),
333 &pointermoved_token_); 342 &pointermoved_token_);
334 CheckHR(hr); 343 CheckHR(hr);
335 344
336 hr = window_->add_PointerPressed(mswr::Callback<PointerEventHandler>( 345 hr = window_->add_PointerPressed(mswr::Callback<PointerEventHandler>(
337 this, &ChromeAppViewAsh::OnPointerPressed).Get(), 346 this, &ChromeAppViewAsh::OnPointerPressed).Get(),
338 &pointerpressed_token_); 347 &pointerpressed_token_);
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 &ui_channel_listener, 450 &ui_channel_listener,
442 io_thread.message_loop_proxy()); 451 io_thread.message_loop_proxy());
443 ui_channel_ = &ui_channel; 452 ui_channel_ = &ui_channel;
444 453
445 // Upon receipt of the MetroViewerHostMsg_SetTargetSurface message the 454 // Upon receipt of the MetroViewerHostMsg_SetTargetSurface message the
446 // browser will use D3D from the browser process to present to our Window. 455 // browser will use D3D from the browser process to present to our Window.
447 ui_channel_->Send(new MetroViewerHostMsg_SetTargetSurface( 456 ui_channel_->Send(new MetroViewerHostMsg_SetTargetSurface(
448 gfx::NativeViewId(core_window_hwnd_))); 457 gfx::NativeViewId(core_window_hwnd_)));
449 DVLOG(1) << "ICoreWindow sent " << core_window_hwnd_; 458 DVLOG(1) << "ICoreWindow sent " << core_window_hwnd_;
450 459
460 // Send an initial size message so that the Ash root window host gets sized
461 // correctly.
462 RECT rect = {0};
463 ::GetWindowRect(core_window_hwnd_, &rect);
464 ui_channel_->Send(
465 new MetroViewerHostMsg_WindowSizeChanged(rect.right - rect.left,
466 rect.bottom - rect.top));
467
451 // And post the task that'll do the inner Metro message pumping to it. 468 // And post the task that'll do the inner Metro message pumping to it.
452 msg_loop.PostTask(FROM_HERE, base::Bind(&RunMessageLoop, dispatcher.Get())); 469 msg_loop.PostTask(FROM_HERE, base::Bind(&RunMessageLoop, dispatcher.Get()));
453 msg_loop.Run(); 470 msg_loop.Run();
454 471
455 DVLOG(0) << "ProcessEvents done, hr=" << hr; 472 DVLOG(0) << "ProcessEvents done, hr=" << hr;
456 return hr; 473 return hr;
457 } 474 }
458 475
459 IFACEMETHODIMP 476 IFACEMETHODIMP
460 ChromeAppViewAsh::Uninitialize() { 477 ChromeAppViewAsh::Uninitialize() {
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
823 winui::Core::CoreWindowActivationState state; 840 winui::Core::CoreWindowActivationState state;
824 HRESULT hr = args->get_WindowActivationState(&state); 841 HRESULT hr = args->get_WindowActivationState(&state);
825 if (FAILED(hr)) 842 if (FAILED(hr))
826 return hr; 843 return hr;
827 DVLOG(1) << "Window activation state: " << state; 844 DVLOG(1) << "Window activation state: " << state;
828 ui_channel_->Send(new MetroViewerHostMsg_WindowActivated( 845 ui_channel_->Send(new MetroViewerHostMsg_WindowActivated(
829 state != winui::Core::CoreWindowActivationState_Deactivated)); 846 state != winui::Core::CoreWindowActivationState_Deactivated));
830 return S_OK; 847 return S_OK;
831 } 848 }
832 849
850 HRESULT ChromeAppViewAsh::OnSizeChanged(winui::Core::ICoreWindow* sender,
851 winui::Core::IWindowSizeChangedEventArgs* args) {
852 if (!window_) {
853 return S_OK;
854 }
855
856 winfoundtn::Size size;
857 HRESULT hr = args->get_Size(&size);
858 if (FAILED(hr))
859 return hr;
860
861 int32 cx = static_cast<int32>(size.Width);
862 int32 cy = static_cast<int32>(size.Height);
863
864 DVLOG(1) << "Window size changed: width=" << cx << ", height=" << cy;
865 ui_channel_->Send(new MetroViewerHostMsg_WindowSizeChanged(cx, cy));
866 return S_OK;
867 }
868
833 869
834 /////////////////////////////////////////////////////////////////////////////// 870 ///////////////////////////////////////////////////////////////////////////////
835 871
836 ChromeAppViewFactory::ChromeAppViewFactory( 872 ChromeAppViewFactory::ChromeAppViewFactory(
837 winapp::Core::ICoreApplication* icore_app, 873 winapp::Core::ICoreApplication* icore_app,
838 LPTHREAD_START_ROUTINE host_main, 874 LPTHREAD_START_ROUTINE host_main,
839 void* host_context) { 875 void* host_context) {
840 mswr::ComPtr<winapp::Core::ICoreApplication> core_app(icore_app); 876 mswr::ComPtr<winapp::Core::ICoreApplication> core_app(icore_app);
841 mswr::ComPtr<winapp::Core::ICoreApplicationExit> app_exit; 877 mswr::ComPtr<winapp::Core::ICoreApplicationExit> app_exit;
842 CheckHR(core_app.As(&app_exit)); 878 CheckHR(core_app.As(&app_exit));
843 globals.app_exit = app_exit.Detach(); 879 globals.app_exit = app_exit.Detach();
844 } 880 }
845 881
846 IFACEMETHODIMP 882 IFACEMETHODIMP
847 ChromeAppViewFactory::CreateView(winapp::Core::IFrameworkView** view) { 883 ChromeAppViewFactory::CreateView(winapp::Core::IFrameworkView** view) {
848 *view = mswr::Make<ChromeAppViewAsh>().Detach(); 884 *view = mswr::Make<ChromeAppViewAsh>().Detach();
849 return (*view) ? S_OK : E_OUTOFMEMORY; 885 return (*view) ? S_OK : E_OUTOFMEMORY;
850 } 886 }
OLDNEW
« ui/metro_viewer/metro_viewer_messages.h ('K') | « win8/metro_driver/chrome_app_view_ash.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698