15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "stdafx.h" 6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include <corewindow.h> 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <shobjidl.h> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/logging.h" 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/gfx/geometry/safe_integer_conversions.h" 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/gfx/win/msg_util.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#pragma comment(lib, "shell32.lib") 14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 15effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochEXTERN_C IMAGE_DOS_HEADER __ImageBase; 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Even though we only create a single window, we need to keep this 17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// count because of the hidden window used by the UI message loop of 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// the metro viewer. 190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochint g_window_count = 0; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const wchar_t kAshWin7AppId[] = L"Google.Chrome.AshWin7.1"; 22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)extern float GetModernUIScale(); 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)LRESULT CALLBACK WndProc(HWND hwnd, UINT message, 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WPARAM wparam, LPARAM lparam) { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PAINTSTRUCT ps; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HDC hdc; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (message) { 300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch case WM_CREATE: 310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ++g_window_count; 320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch break; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case WM_PAINT: 34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch hdc = ::BeginPaint(hwnd, &ps); 350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ::EndPaint(hwnd, &ps); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch case WM_CLOSE: 380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ::DestroyWindow(hwnd); 390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch break; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case WM_DESTROY: 410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch --g_window_count; 420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (!g_window_count) 430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ::PostQuitMessage(0); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Always allow Chrome to set the cursor. 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case WM_SETCURSOR: 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return 1; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return ::DefWindowProc(hwnd, message, wparam, lparam); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)HWND CreateMetroTopLevelWindow(const RECT& work_area) { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HINSTANCE hInst = reinterpret_cast<HINSTANCE>(&__ImageBase); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WNDCLASSEXW wcex; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wcex.cbSize = sizeof(wcex); 58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch wcex.style = CS_HREDRAW | CS_VREDRAW; 59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch wcex.lpfnWndProc = WndProc; 60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch wcex.cbClsExtra = 0; 61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch wcex.cbWndExtra = 0; 62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch wcex.hInstance = hInst; 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) wcex.hIcon = LoadIcon(::GetModuleHandle(NULL), L"IDR_MAINFRAME"); 64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch wcex.hCursor = LoadCursor(NULL, IDC_ARROW); 65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch wcex.hbrBackground = (HBRUSH)(COLOR_INACTIVECAPTION+1); 66effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch wcex.lpszMenuName = 0; 67effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch wcex.lpszClassName = L"Windows.UI.Core.CoreWindow"; 68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) wcex.hIconSm = LoadIcon(::GetModuleHandle(NULL), L"IDR_MAINFRAME"); 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HWND hwnd = ::CreateWindowExW(0, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MAKEINTATOM(::RegisterClassExW(&wcex)), 74effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch L"metro_win7", 75f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) WS_POPUP | WS_VISIBLE | WS_MINIMIZEBOX, 76f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) work_area.top, work_area.left, 77f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) work_area.right, work_area.bottom, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, hInst, NULL); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hwnd; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochtypedef winfoundtn::ITypedEventHandler< 83effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winapp::Core::CoreApplicationView*, 84effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winapp::Activation::IActivatedEventArgs*> ActivatedHandler; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 86effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochtypedef winfoundtn::ITypedEventHandler< 87effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::CoreWindow*, 88effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::WindowActivatedEventArgs*> WindowActivatedHandler; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 90effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochtypedef winfoundtn::ITypedEventHandler< 91effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::CoreWindow*, 92effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::AutomationProviderRequestedEventArgs*> 93effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AutomationProviderHandler; 94effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 95effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochtypedef winfoundtn::ITypedEventHandler< 96effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::CoreWindow*, 97effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::CharacterReceivedEventArgs*> CharEventHandler; 98effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 99effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochtypedef winfoundtn::ITypedEventHandler< 100effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::CoreWindow*, 101effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::CoreWindowEventArgs*> CoreWindowEventHandler; 102effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 103effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochtypedef winfoundtn::ITypedEventHandler< 104effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::CoreWindow*, 105effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::InputEnabledEventArgs*> InputEnabledEventHandler; 106effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 107effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochtypedef winfoundtn::ITypedEventHandler< 108effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::CoreWindow*, 109effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::KeyEventArgs*> KeyEventHandler; 110effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 111effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochtypedef winfoundtn::ITypedEventHandler< 112effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::CoreWindow*, 113effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::PointerEventArgs*> PointerEventHandler; 114effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 115effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochtypedef winfoundtn::ITypedEventHandler< 116effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::CoreWindow*, 117effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::WindowSizeChangedEventArgs*> SizeChangedHandler; 118effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 119effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochtypedef winfoundtn::ITypedEventHandler< 120effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::CoreWindow*, 121effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::TouchHitTestingEventArgs*> TouchHitTestHandler; 122effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 123effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochtypedef winfoundtn::ITypedEventHandler< 124effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::CoreWindow*, 125effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::VisibilityChangedEventArgs*> VisibilityChangedHandler; 126effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 127effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochtypedef winfoundtn::ITypedEventHandler< 128effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::CoreDispatcher*, 129effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::AcceleratorKeyEventArgs*> AcceleratorKeyEventHandler; 130effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// This interface is implemented by classes which handle mouse and keyboard 132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// input. 133cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class InputHandler { 134cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 135cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) InputHandler() {} 136cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~InputHandler() {} 137cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 138cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual bool HandleKeyboardMessage(const MSG& msg) = 0; 139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual bool HandleMouseMessage(const MSG& msg) = 0; 140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(InputHandler); 143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 144cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// This class implements the winrt interfaces corresponding to mouse input. 146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class MouseEvent : public mswr::RuntimeClass< 147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) winui::Core::IPointerEventArgs, 148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) winui::Input::IPointerPoint, 149cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) winui::Input::IPointerPointProperties, 150cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) windevs::Input::IPointerDevice> { 151cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) MouseEvent(const MSG& msg) 153cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : msg_(msg) { 154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 155cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 156cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // IPointerEventArgs implementation. 157f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_CurrentPoint( 158f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) winui::Input::IPointerPoint** point) { 159f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return QueryInterface(winui::Input::IID_IPointerPoint, 160f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) reinterpret_cast<void**>(point)); 161f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 162f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 163f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_KeyModifiers( 164f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) winsys::VirtualKeyModifiers* modifiers) { 165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 166f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 168f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE GetIntermediatePoints( 169f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) winfoundtn::Collections::IVector<winui::Input::PointerPoint*>** points) { 170f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 171f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 172f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 173f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // IPointerPoint implementation. 174f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_PointerDevice( 175f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) windevs::Input::IPointerDevice** pointer_device) { 176f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return QueryInterface(windevs::Input::IID_IPointerDevice, 177f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) reinterpret_cast<void**>(pointer_device)); 178f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 179f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 180f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_Position(winfoundtn::Point* position) { 181f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) static float scale = GetModernUIScale(); 182f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Scale down the points here as they are scaled up on the other side. 183f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) position->X = gfx::ToRoundedInt(CR_GET_X_LPARAM(msg_.lParam) / scale); 184f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) position->Y = gfx::ToRoundedInt(CR_GET_Y_LPARAM(msg_.lParam) / scale); 185f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return S_OK; 186f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 187f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 188f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_PointerId(uint32* pointer_id) { 189f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // TODO(ananta) 190f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Implement this properly. 191f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *pointer_id = 1; 192f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return S_OK; 193f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 194f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 195f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_Timestamp(uint64* timestamp) { 196f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *timestamp = msg_.time; 197f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return S_OK; 198f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 199f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 200f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_Properties( 201f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) winui::Input::IPointerPointProperties** properties) { 202f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return QueryInterface(winui::Input::IID_IPointerPointProperties, 203f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) reinterpret_cast<void**>(properties)); 204f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 205f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 206f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_RawPosition( 207f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) winfoundtn::Point* position) { 208f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 209f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 210f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 211f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_FrameId(uint32* frame_id) { 212f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 213f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 214f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 215f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_IsInContact(boolean* in_contact) { 216f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 217f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 218f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 219f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // IPointerPointProperties implementation. 220f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_PointerUpdateKind( 221f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) winui::Input::PointerUpdateKind* update_kind) { 222f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // TODO(ananta) 223f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // There is no WM_POINTERUPDATE equivalent on Windows 7. Look into 224f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // equivalents. 225f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (msg_.message == WM_LBUTTONDOWN) { 226f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *update_kind = winui::Input::PointerUpdateKind_LeftButtonPressed; 227f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } else if (msg_.message == WM_RBUTTONDOWN) { 228f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *update_kind = winui::Input::PointerUpdateKind_RightButtonPressed; 229f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } else if (msg_.message == WM_MBUTTONDOWN) { 230f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *update_kind = winui::Input::PointerUpdateKind_MiddleButtonPressed; 231f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } else if (msg_.message == WM_LBUTTONUP) { 232f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *update_kind = winui::Input::PointerUpdateKind_LeftButtonReleased; 233f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } else if (msg_.message == WM_RBUTTONUP) { 234f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *update_kind = winui::Input::PointerUpdateKind_RightButtonReleased; 235f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } else if (msg_.message == WM_MBUTTONUP) { 236f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *update_kind = winui::Input::PointerUpdateKind_MiddleButtonReleased; 237f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 238f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return S_OK; 239f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 240f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 241f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_IsLeftButtonPressed( 242f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) boolean* left_button_pressed) { 243f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *left_button_pressed = msg_.wParam & MK_LBUTTON ? true : false; 244f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return S_OK; 245f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 246f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 247f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_IsRightButtonPressed( 248f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) boolean* right_button_pressed) { 249f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *right_button_pressed = msg_.wParam & MK_RBUTTON ? true : false; 250f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return S_OK; 251f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 252f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 253f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_IsMiddleButtonPressed( 254f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) boolean* middle_button_pressed) { 255f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *middle_button_pressed = msg_.wParam & MK_MBUTTON ? true : false; 256f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return S_OK; 257f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 258f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 259f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_IsHorizontalMouseWheel( 260f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) boolean* is_horizontal_mouse_wheel) { 261f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *is_horizontal_mouse_wheel = 262f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) (msg_.message == WM_MOUSEHWHEEL) ? true : false; 263f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return S_OK; 264f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 265f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 266f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_MouseWheelDelta(int* delta) { 267f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (msg_.message == WM_MOUSEWHEEL || msg_.message == WM_MOUSEHWHEEL) { 268f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *delta = GET_WHEEL_DELTA_WPARAM(msg_.wParam); 269f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return S_OK; 270f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } else { 271f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return S_FALSE; 272f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 273f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 274f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 275f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_Pressure(float* pressure) { 276f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 277f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 278f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 279f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_IsInverted(boolean* inverted) { 280f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 281f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 282f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 283f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_IsEraser(boolean* is_eraser) { 284f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 285f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 286f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 287f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_Orientation(float* orientation) { 288f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 289f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 290f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 291f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_XTilt(float* x_tilt) { 292f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 293f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 294f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 295f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_YTilt(float* y_tilt) { 296f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 297f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 298f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 299f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_Twist(float* twist) { 300f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 301f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 302f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 303f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_ContactRect(winfoundtn::Rect* rect) { 304f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 305f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 306f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 307f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_ContactRectRaw(winfoundtn::Rect* rect) { 308f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 309f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 310f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 311f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_TouchConfidence(boolean* confidence) { 312f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 313f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 314f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 315f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_IsPrimary(boolean* is_primary) { 316f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 317f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 318f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 319f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_IsInRange(boolean* is_in_range) { 320f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 321f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 322f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 323f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_IsCanceled(boolean* is_canceled) { 324f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 325f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 326f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 327f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_IsBarrelButtonPressed( 328f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) boolean* is_barrel_button_pressed) { 329f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 330f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 331f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 332f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_IsXButton1Pressed( 333f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) boolean* is_xbutton1_pressed) { 334f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 335f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 336f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 337f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_IsXButton2Pressed( 338f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) boolean* is_xbutton2_pressed) { 339f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 340f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 341f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 342f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE HasUsage(uint32 usage_page, 343f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) uint32 usage_id, 344f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) boolean* has_usage) { 345f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 346f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 347f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 348f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE GetUsageValue(uint32 usage_page, 349f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) uint32 usage_id, 350f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int32* usage_value) { 351f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 352f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 353f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 354f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // IPointerDevice implementation. 355f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_PointerDeviceType( 356f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) windevs::Input::PointerDeviceType* device_type) { 357f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (msg_.message == WM_TOUCH) { 358f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *device_type = windevs::Input::PointerDeviceType_Touch; 359f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } else { 360f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *device_type = windevs::Input::PointerDeviceType_Mouse; 361f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 362f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return S_OK; 363f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 364f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 365f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_IsIntegrated(boolean* is_integrated) { 366f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 367f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 368f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 369f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_MaxContacts(uint32* contacts) { 370f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 371f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 372f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 373f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_PhysicalDeviceRect( 374f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) winfoundtn::Rect* rect) { 375f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 376f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 377f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 378f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_ScreenRect(winfoundtn::Rect* rect) { 379f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 380f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 381f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 382f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_SupportedUsages( 383f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) winfoundtn::Collections::IVectorView< 384f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) windevs::Input::PointerDeviceUsage>** usages) { 385f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return E_NOTIMPL; 386f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 387f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 388f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private: 389f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MSG msg_; 390f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 391f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MouseEvent); 392cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 393cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 394cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// This class implements the winrt interfaces needed to support keyboard 395cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// character and system character messages. 396cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class KeyEvent : public mswr::RuntimeClass< 397cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) winui::Core::IKeyEventArgs, 398cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) winui::Core::ICharacterReceivedEventArgs, 399cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) winui::Core::IAcceleratorKeyEventArgs> { 400cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 401cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) KeyEvent(const MSG& msg) 402cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : msg_(msg) {} 403cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 404cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // IKeyEventArgs implementation. 405f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_VirtualKey( 406f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) winsys::VirtualKey* virtual_key) { 407f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *virtual_key = static_cast<winsys::VirtualKey>(msg_.wParam); 408f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return S_OK; 409f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 410f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 411f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_KeyStatus( 412f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) winui::Core::CorePhysicalKeyStatus* key_status) { 413f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // As per msdn documentation for the keyboard messages. 414f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) key_status->RepeatCount = msg_.lParam & 0x0000FFFF; 415f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) key_status->ScanCode = (msg_.lParam >> 16) & 0x00FF; 416f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) key_status->IsExtendedKey = (msg_.lParam & (1 << 24)); 417f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) key_status->IsMenuKeyDown = (msg_.lParam & (1 << 29)); 418f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) key_status->WasKeyDown = (msg_.lParam & (1 << 30)); 419f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) key_status->IsKeyReleased = (msg_.lParam & (1 << 31)); 420f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return S_OK; 421f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 422f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 423f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // ICharacterReceivedEventArgs implementation. 424f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_KeyCode(uint32* key_code) { 425f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *key_code = msg_.wParam; 426f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return S_OK; 427f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 428f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 429f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // IAcceleratorKeyEventArgs implementation. 430f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual HRESULT STDMETHODCALLTYPE get_EventType( 431f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) winui::Core::CoreAcceleratorKeyEventType* event_type) { 432f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (msg_.message == WM_SYSKEYDOWN) { 433f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *event_type = winui::Core::CoreAcceleratorKeyEventType_SystemKeyDown; 434f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } else if (msg_.message == WM_SYSKEYUP) { 435f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *event_type = winui::Core::CoreAcceleratorKeyEventType_SystemKeyUp; 436f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } else if (msg_.message == WM_SYSCHAR) { 437f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *event_type = winui::Core::CoreAcceleratorKeyEventType_SystemCharacter; 438f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 439f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return S_OK; 440f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 441f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 442f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private: 443f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MSG msg_; 444cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 445cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 446effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// The following classes are the emulation of the WinRT system as exposed 447effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// to metro applications. There is one application (ICoreApplication) which 448effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// contains a series of Views (ICoreApplicationView) each one of them 449effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// containing a CoreWindow which represents a surface that can drawn to 450effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// and that receives events. 451effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// 452effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Here is the general dependency hierachy in terms of interfaces: 453effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// 454effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// IFrameworkViewSource --> IFrameworkView 455effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// ^ | 456effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// | | metro app 457effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// --------------------------------------------------------------------- 458effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// | | winRT system 459effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// | v 460effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// ICoreApplication ICoreApplicationView 461effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// | 462effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// v 463effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// ICoreWindow -----> ICoreWindowInterop 464effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// | | 465effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// | | 466effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// v V 467effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// ICoreDispatcher <==> real HWND 468effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// 469cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class CoreDispatcherEmulation : 470effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public mswr::RuntimeClass< 471effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::ICoreDispatcher, 472effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::ICoreAcceleratorKeys> { 473effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public: 474cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CoreDispatcherEmulation(InputHandler* input_handler) 475cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : input_handler_(input_handler), 476cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) accelerator_key_event_handler_(NULL) {} 477cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 478effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // ICoreDispatcher implementation: 479effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE get_HasThreadAccess(boolean* value) { 480effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 481effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 482effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 483effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE ProcessEvents( 484effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::CoreProcessEventsOption options) { 485effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // We don't support the other message pump modes. So we basically enter a 486effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // traditional message loop that we only exit a teardown. 487effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (options != winui::Core::CoreProcessEventsOption_ProcessUntilQuit) 488effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return E_FAIL; 489effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 490effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch MSG msg = {0}; 4910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch while((::GetMessage(&msg, NULL, 0, 0) != 0) && g_window_count > 0) { 492cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProcessInputMessage(msg); 493effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ::TranslateMessage(&msg); 494effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ::DispatchMessage(&msg); 495effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 496effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // TODO(cpu): figure what to do with msg.WParam which we would normally 497effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // return here. 498effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 499effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 500effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 501effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE RunAsync( 502effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::CoreDispatcherPriority priority, 503effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::IDispatchedHandler *agileCallback, 504effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ABI::Windows::Foundation::IAsyncAction** asyncAction) { 505effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 506effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 507effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 508effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE RunIdleAsync( 509effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::IIdleDispatchedHandler *agileCallback, 510effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winfoundtn::IAsyncAction** asyncAction) { 511effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 512effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 513effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 514effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // ICoreAcceleratorKeys implementation: 515effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE add_AcceleratorKeyActivated( 516effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AcceleratorKeyEventHandler* handler, 517effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken *pCookie) { 518cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) accelerator_key_event_handler_ = handler; 519cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) accelerator_key_event_handler_->AddRef(); 520effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 521effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 522effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 523effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE remove_AcceleratorKeyActivated( 524effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken cookie) { 525cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) accelerator_key_event_handler_->Release(); 526cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) accelerator_key_event_handler_ = NULL; 527effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 528effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 529effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 530cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 531cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool ProcessInputMessage(const MSG& msg) { 532cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Poor man's way of dispatching input events. 533cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool ret = false; 534cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (input_handler_) { 535cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if ((msg.message >= WM_KEYFIRST) && (msg.message <= WM_KEYLAST)) { 536cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if ((msg.message == WM_SYSKEYDOWN) || (msg.message == WM_SYSKEYUP) || 537cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) msg.message == WM_SYSCHAR) { 538cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ret = HandleSystemKeys(msg); 539cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } else { 540cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ret = input_handler_->HandleKeyboardMessage(msg); 541cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 542cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } else if ((msg.message >= WM_MOUSEFIRST) && 543cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) (msg.message <= WM_MOUSELAST)) { 544cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ret = input_handler_->HandleMouseMessage(msg); 545cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 546cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 547cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return ret; 548cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 549cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 550cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool HandleSystemKeys(const MSG& msg) { 551cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mswr::ComPtr<winui::Core::IAcceleratorKeyEventArgs> event_args; 552cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_args = mswr::Make<KeyEvent>(msg); 553cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) accelerator_key_event_handler_->Invoke(this, event_args.Get()); 554cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return true; 555cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 556cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 557cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) InputHandler* input_handler_; 558cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AcceleratorKeyEventHandler* accelerator_key_event_handler_; 559effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}; 560effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 561effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass CoreWindowEmulation 562effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch : public mswr::RuntimeClass< 563effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch mswr::RuntimeClassFlags<mswr::WinRtClassicComMix>, 564cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) winui::Core::ICoreWindow, ICoreWindowInterop>, 565cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public InputHandler { 566effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public: 567cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CoreWindowEmulation() 568cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : core_hwnd_(NULL), 569cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_moved_handler_(NULL), 570cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_capture_lost_handler_(NULL), 571cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_pressed_handler_(NULL), 572cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_released_handler_(NULL), 573cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_entered_handler_(NULL), 574cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_exited_handler_(NULL), 575cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_wheel_changed_handler_(NULL), 576cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) key_down_handler_(NULL), 577cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) key_up_handler_(NULL), 578cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) character_received_handler_(NULL) { 579cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) dispatcher_ = mswr::Make<CoreDispatcherEmulation>(this); 580f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 581f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Unless we select our own AppUserModelID the shell might confuse us 582f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // with the app launcher one and we get the wrong taskbar button and icon. 583f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ::SetCurrentProcessExplicitAppUserModelID(kAshWin7AppId); 584f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 585f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) RECT work_area = {0}; 586f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ::SystemParametersInfo(SPI_GETWORKAREA, 0, &work_area, 0); 587f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (::IsDebuggerPresent()) { 588f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) work_area.top = 0; 589f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) work_area.left = 0; 590f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) work_area.right = 1600; 591f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) work_area.bottom = 900; 592f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 593f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 594f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) core_hwnd_ = CreateMetroTopLevelWindow(work_area); 595effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 596effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 597effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ~CoreWindowEmulation() { 5980529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (core_hwnd_) 5990529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ::DestroyWindow(core_hwnd_); 600effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 601effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 602effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // ICoreWindow implementation: 603effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE get_AutomationHostProvider( 604effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch IInspectable** value) { 605effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 606effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 607effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 608effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE get_Bounds( 609effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winfoundtn::Rect* value) { 610effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RECT rect; 611effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (!::GetClientRect(core_hwnd_, &rect)) 612effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return E_FAIL; 613effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch value->Width = rect.right; 614effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch value->Height = rect.bottom; 615effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 616effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 617effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 618effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE get_CustomProperties( 619effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winfoundtn::Collections::IPropertySet** value) { 620effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 621effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 622effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 623effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE get_Dispatcher( 624effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::ICoreDispatcher** value) { 625effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return dispatcher_.CopyTo(value); 626effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 627effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 628effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE get_FlowDirection( 629effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::CoreWindowFlowDirection* value) { 630effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 631effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 632effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 633effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE put_FlowDirection( 634effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::CoreWindowFlowDirection value) { 635effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 636effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 637effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 638effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE get_IsInputEnabled( 639effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch boolean* value) { 640effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 641effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 642effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 643effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE put_IsInputEnabled( 644effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch boolean value) { 645effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 646effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 647effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 648effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE get_PointerCursor( 649effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::ICoreCursor** value) { 650effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 651effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 652effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 653effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE put_PointerCursor( 654effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::ICoreCursor* value) { 655effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 656effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 657effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 658effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE get_PointerPosition( 659effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winfoundtn::Point* value) { 660effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 661effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 662effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 663effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE get_Visible( 664effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch boolean* value) { 665effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 666effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 667effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 668effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE Activate(void) { 669effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // After we fire OnActivate on the View, Chrome calls us back here. 670effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 671effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 672effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 673effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE Close(void) { 6740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ::PostMessage(core_hwnd_, WM_CLOSE, 0, 0); 6750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch core_hwnd_ = NULL; 676effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 677effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 678effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 679effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE GetAsyncKeyState( 680effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ABI::Windows::System::VirtualKey virtualKey, 681effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::CoreVirtualKeyStates* KeyState) { 682effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 683effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 684effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 685effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE GetKeyState( 686effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ABI::Windows::System::VirtualKey virtualKey, 687effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::CoreVirtualKeyStates* KeyState) { 688effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 689effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 690effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 691effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE ReleasePointerCapture(void) { 692effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 693effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 694effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 695effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE SetPointerCapture(void) { 696effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 697effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 698effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 699effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE add_Activated( 700effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch WindowActivatedHandler* handler, 701effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken* pCookie) { 702effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // TODO(cpu) implement this. 703effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 704effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 705effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 706effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE remove_Activated( 707effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken cookie) { 708effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 709effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 710effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 711effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE add_AutomationProviderRequested( 712effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AutomationProviderHandler* handler, 713effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken* cookie) { 714effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 715effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 716effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 717effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE remove_AutomationProviderRequested( 718effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken cookie) { 719effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 720effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 721effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 722effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE add_CharacterReceived( 723effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch CharEventHandler* handler, 724effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken* pCookie) { 725cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) character_received_handler_ = handler; 726cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) character_received_handler_->AddRef(); 727effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 728effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 729effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 730effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE remove_CharacterReceived( 731effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken cookie) { 732cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) character_received_handler_->Release(); 733cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) character_received_handler_ = NULL; 734effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 735effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 736effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 737effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE add_Closed( 738effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch CoreWindowEventHandler* handler, 739effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken* pCookie) { 740effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 741effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 742effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 743effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE remove_Closed( 744effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken cookie) { 745effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 746effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 747effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 748effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE add_InputEnabled( 749effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch InputEnabledEventHandler* handler, 750effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken* pCookie) { 751effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 752effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 753effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 754effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE remove_InputEnabled( 755effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken cookie) { 756effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 757effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 758effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 759effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE add_KeyDown( 760effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch KeyEventHandler* handler, 761effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken* pCookie) { 762cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) key_down_handler_ = handler; 763cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) key_down_handler_->AddRef(); 764effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 765effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 766effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 767effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE remove_KeyDown( 768effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken cookie) { 769cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) key_down_handler_->Release(); 770cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) key_down_handler_ = NULL; 771effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 772effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 773effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 774effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE add_KeyUp( 775effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch KeyEventHandler* handler, 776effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken* pCookie) { 777cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) key_up_handler_ = handler; 778cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) key_up_handler_->AddRef(); 779effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 780effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 781effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 782effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE remove_KeyUp( 783effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken cookie) { 784cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) key_up_handler_->Release(); 785cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) key_up_handler_ = NULL; 786effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 787effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 788effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 789effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE add_PointerCaptureLost( 790effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PointerEventHandler* handler, 791effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken* cookie) { 792cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_capture_lost_handler_ = handler; 793effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 794effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 795effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 796effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE remove_PointerCaptureLost( 797effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken cookie) { 798cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_capture_lost_handler_ = NULL; 799effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 800effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 801effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 802effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE add_PointerEntered( 803effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PointerEventHandler* handler, 804effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken* cookie) { 805cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_entered_handler_ = handler; 806effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 807effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 808effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 809effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE remove_PointerEntered( 810effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken cookie) { 811cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_entered_handler_ = NULL; 812effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 813effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 814effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 815effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE add_PointerExited( 816effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PointerEventHandler* handler, 817effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken* cookie) { 818cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_exited_handler_ = handler; 819effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 820effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 821effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 822effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE remove_PointerExited( 823effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken cookie) { 824cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_exited_handler_ = NULL; 825effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 826effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 827effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 828effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE add_PointerMoved( 829effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PointerEventHandler* handler, 830effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken* cookie) { 831cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_moved_handler_ = handler; 832cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_moved_handler_->AddRef(); 833effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 834effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 835effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 836effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE remove_PointerMoved( 837effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken cookie) { 838cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_moved_handler_->Release(); 839cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_moved_handler_ = NULL; 840effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 841effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 842effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 843effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE add_PointerPressed( 844effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PointerEventHandler* handler, 845effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken* cookie) { 846cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_pressed_handler_ = handler; 847cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_pressed_handler_->AddRef(); 848effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 849effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 850effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 851effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE remove_PointerPressed( 852effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken cookie) { 853cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_pressed_handler_->Release(); 854cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_pressed_handler_ = NULL; 855effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 856effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 857effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 858effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE add_PointerReleased( 859effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PointerEventHandler* handler, 860effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken* cookie) { 861cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_released_handler_ = handler; 862cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_released_handler_->AddRef(); 863effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 864effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 865effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 866effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE remove_PointerReleased( 867effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken cookie) { 868cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_released_handler_->Release(); 869cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_released_handler_ = NULL; 870effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 871effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 872effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 873effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE add_TouchHitTesting( 874effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch TouchHitTestHandler* handler, 875effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken* pCookie) { 876effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 877effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 878effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 879effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE remove_TouchHitTesting( 880effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken cookie) { 881effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 882effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 883effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 884effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE add_PointerWheelChanged( 885effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PointerEventHandler* handler, 886effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken* cookie) { 887cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_wheel_changed_handler_ = handler; 888cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_wheel_changed_handler_->AddRef(); 889effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 890effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 891effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 892effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE remove_PointerWheelChanged( 893effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken cookie) { 894cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_wheel_changed_handler_->Release(); 895cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mouse_wheel_changed_handler_ = NULL; 896effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 897effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 898effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 899effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE add_SizeChanged( 900effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch SizeChangedHandler* handler, 901effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken* pCookie) { 902effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // TODO(cpu): implement this. 903effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 904effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 905effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 906effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE remove_SizeChanged( 907effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken cookie) { 908effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 909effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 910effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 911effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE add_VisibilityChanged( 912effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch VisibilityChangedHandler* handler, 913effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken* pCookie) { 914effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 915effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 916effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 917effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE remove_VisibilityChanged( 918effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken cookie) { 919effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 920effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 921effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 922effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // ICoreWindowInterop implementation: 923effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE get_WindowHandle(HWND* hwnd) { 924effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (!core_hwnd_) 925effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return E_FAIL; 926effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch *hwnd = core_hwnd_; 927effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 928effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 929effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 930effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE put_MessageHandled( 931effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch boolean value) { 932effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 933effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 934effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 935cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // InputHandler 936cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual bool HandleKeyboardMessage(const MSG& msg) OVERRIDE { 937cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) switch (msg.message) { 938cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case WM_KEYDOWN: 939cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case WM_KEYUP: { 940cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mswr::ComPtr<winui::Core::IKeyEventArgs> event_args; 941cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_args = mswr::Make<KeyEvent>(msg); 942cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) KeyEventHandler* handler = NULL; 943cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (msg.message == WM_KEYDOWN) { 944cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) handler = key_down_handler_; 945cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } else { 946cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) handler = key_up_handler_; 947cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 948cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) handler->Invoke(this, event_args.Get()); 949cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 950cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 951cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 952cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case WM_CHAR: 953cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case WM_DEADCHAR: 954cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case WM_UNICHAR: { 955cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mswr::ComPtr<winui::Core::ICharacterReceivedEventArgs> event_args; 956cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_args = mswr::Make<KeyEvent>(msg); 957cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) character_received_handler_->Invoke(this, event_args.Get()); 958cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 959cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 960cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 961cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) default: 962cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return false; 963cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 964cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return true; 965cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 966cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 967cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual bool HandleMouseMessage(const MSG& msg) OVERRIDE { 968cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PointerEventHandler* handler = NULL; 969cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mswr::ComPtr<winui::Core::IPointerEventArgs> event_args; 970cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event_args = mswr::Make<MouseEvent>(msg); 971cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) switch (msg.message) { 972cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case WM_MOUSEMOVE: { 973cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) handler = mouse_moved_handler_; 974cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 975cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 976cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case WM_LBUTTONDOWN: { 977cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case WM_RBUTTONDOWN: 978cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case WM_MBUTTONDOWN: 979cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) handler = mouse_pressed_handler_; 980cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 981cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 982cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 983cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case WM_LBUTTONUP: { 984cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case WM_RBUTTONUP: 985cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case WM_MBUTTONUP: 986cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) handler = mouse_released_handler_; 987cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 988cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 989cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 990cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case WM_MOUSEWHEEL: { 991cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case WM_MOUSEHWHEEL: 992cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) handler = mouse_wheel_changed_handler_; 993cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 994cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 995cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 996cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) default: 997cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return false; 998cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 999cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(handler); 1000cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) handler->Invoke(this, event_args.Get()); 1001cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return true; 1002cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1003cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1004effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private: 1005cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PointerEventHandler* mouse_moved_handler_; 1006cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PointerEventHandler* mouse_capture_lost_handler_; 1007cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PointerEventHandler* mouse_pressed_handler_; 1008cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PointerEventHandler* mouse_released_handler_; 1009cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PointerEventHandler* mouse_entered_handler_; 1010cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PointerEventHandler* mouse_exited_handler_; 1011cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PointerEventHandler* mouse_wheel_changed_handler_; 1012cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) KeyEventHandler* key_down_handler_; 1013cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) KeyEventHandler* key_up_handler_; 1014cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CharEventHandler* character_received_handler_; 1015effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch HWND core_hwnd_; 1016effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch mswr::ComPtr<winui::Core::ICoreDispatcher> dispatcher_; 1017effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}; 1018effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1019effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass ActivatedEvent 1020effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch : public mswr::RuntimeClass<winapp::Activation::IActivatedEventArgs> { 1021effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public: 1022effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ActivatedEvent(winapp::Activation::ActivationKind activation_kind) 1023effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch : activation_kind_(activation_kind) { 1024effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1025effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1026effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE get_Kind( 1027effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winapp::Activation::ActivationKind *value) { 1028effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch *value = activation_kind_; 1029effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 1030effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1031effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1032effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE get_PreviousExecutionState( 1033effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winapp::Activation::ApplicationExecutionState *value) { 1034effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch *value = winapp::Activation::ApplicationExecutionState_ClosedByUser; 1035effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 1036effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1037effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1038effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE get_SplashScreen( 1039effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winapp::Activation::ISplashScreen **value) { 1040effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return E_FAIL; 1041effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1042effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1043effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private: 1044effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winapp::Activation::ActivationKind activation_kind_; 1045effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}; 1046effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1047effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass CoreApplicationViewEmulation 1048effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch : public mswr::RuntimeClass<winapp::Core::ICoreApplicationView> { 1049effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public: 1050effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch CoreApplicationViewEmulation() { 1051effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch core_window_ = mswr::Make<CoreWindowEmulation>(); 1052effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1053effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1054effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch HRESULT Activate() { 1055effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (activated_handler_) { 1056effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch auto ae = mswr::Make<ActivatedEvent>( 1057effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winapp::Activation::ActivationKind_File); 1058effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return activated_handler_->Invoke(this, ae.Get()); 1059effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } else { 1060effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 1061effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1062effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1063effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 10640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch HRESULT Close() { 10650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return core_window_->Close(); 10660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 10670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 1068effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // ICoreApplicationView implementation: 1069effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE get_CoreWindow( 1070effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winui::Core::ICoreWindow** value) { 1071effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (!core_window_) 1072effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return E_FAIL; 1073effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return core_window_.CopyTo(value); 1074effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1075effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1076effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE add_Activated( 1077effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ActivatedHandler* handler, 1078effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken* token) { 1079effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // The real component supports multiple handles but we don't yet. 1080effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (activated_handler_) 1081effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return E_FAIL; 1082effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch activated_handler_ = handler; 1083effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 1084effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1085effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1086effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE remove_Activated( 1087effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken token) { 1088effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Chrome never unregisters handlers, so we don't care about it. 1089effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 1090effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1091effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1092effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE get_IsMain( 1093effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch boolean* value) { 1094effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 1095effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1096effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1097effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE get_IsHosted( 1098effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch boolean* value) { 1099effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 1100effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1101effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1102effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private: 11030529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mswr::ComPtr<CoreWindowEmulation> core_window_; 1104effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch mswr::ComPtr<ActivatedHandler> activated_handler_; 1105effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}; 1106effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1107effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass CoreApplicationWin7Emulation 1108effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch : public mswr::RuntimeClass<winapp::Core::ICoreApplication, 1109effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winapp::Core::ICoreApplicationExit> { 1110effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public: 1111effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // ICoreApplication implementation: 1112effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1113effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE get_Id( 1114effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch HSTRING* value) { 1115effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 1116effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1117effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1118effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE add_Suspending( 1119effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winfoundtn::IEventHandler<winapp::SuspendingEventArgs*>* handler, 1120effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken* token) { 1121effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 1122effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1123effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1124effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE remove_Suspending( 1125effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken token) { 1126effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 1127effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1128effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1129effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE add_Resuming( 1130effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winfoundtn::IEventHandler<IInspectable*>* handler, 1131effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken* token) { 1132effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 1133effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1134effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1135effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE remove_Resuming( 1136effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken token) { 1137effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 1138effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1139effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1140effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE get_Properties( 1141effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winfoundtn::Collections::IPropertySet** value) { 1142effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 1143effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1144effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1145effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE GetCurrentView( 1146effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winapp::Core::ICoreApplicationView** value) { 1147effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 1148effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1149effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1150effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE Run( 1151effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winapp::Core::IFrameworkViewSource* viewSource) { 1152effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch HRESULT hr = viewSource->CreateView(app_view_.GetAddressOf()); 1153effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (FAILED(hr)) 1154effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return hr; 1155effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch view_emulation_ = mswr::Make<CoreApplicationViewEmulation>(); 1156effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch hr = app_view_->Initialize(view_emulation_.Get()); 1157effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (FAILED(hr)) 1158effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return hr; 1159effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch mswr::ComPtr<winui::Core::ICoreWindow> core_window; 1160effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch hr = view_emulation_->get_CoreWindow(core_window.GetAddressOf()); 1161effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (FAILED(hr)) 1162effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return hr; 1163effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch hr = app_view_->SetWindow(core_window.Get()); 1164effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (FAILED(hr)) 1165effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return hr; 1166effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch hr = app_view_->Load(NULL); 1167effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (FAILED(hr)) 1168effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return hr; 1169effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch hr = view_emulation_->Activate(); 1170effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (FAILED(hr)) 1171effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return hr; 1172effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return app_view_->Run(); 1173effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1174effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1175effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE RunWithActivationFactories( 1176effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winfoundtn::IGetActivationFactory* activationFactoryCallback) { 1177effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 1178effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1179effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1180effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // ICoreApplicationExit implementation: 1181effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1182effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE Exit(void) { 11830529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return view_emulation_->Close(); 1184effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1185effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1186effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE add_Exiting( 1187effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch winfoundtn::IEventHandler<IInspectable*>* handler, 1188effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken* token) { 1189effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 1190effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1191effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1192effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual HRESULT STDMETHODCALLTYPE remove_Exiting( 1193effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventRegistrationToken token) { 1194effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return S_OK; 1195effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1196effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1197effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private: 1198effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch mswr::ComPtr<winapp::Core::IFrameworkView> app_view_; 1199effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch mswr::ComPtr<CoreApplicationViewEmulation> view_emulation_; 1200effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}; 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1203effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochmswr::ComPtr<winapp::Core::ICoreApplication> InitWindows7() { 1204effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch HRESULT hr = ::CoInitializeEx(NULL, COINIT_MULTITHREADED); 1205effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (FAILED(hr)) 1206effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch CHECK(false); 1207effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return mswr::Make<CoreApplicationWin7Emulation>(); 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1210