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

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

Issue 141953014: Adding support for sending horizonatal mouse wheel information in Chrome ASH on Windows 8. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « win8/metro_driver/chrome_app_view_ash.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "win8/metro_driver/stdafx.h" 5 #include "win8/metro_driver/stdafx.h"
6 #include "win8/metro_driver/chrome_app_view_ash.h" 6 #include "win8/metro_driver/chrome_app_view_ash.h"
7 7
8 #include <corewindow.h> 8 #include <corewindow.h>
9 #include <shellapi.h> 9 #include <shellapi.h>
10 #include <windows.foundation.h> 10 #include <windows.foundation.h>
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 // This class helps decoding the pointer properties of an event. 366 // This class helps decoding the pointer properties of an event.
367 class ChromeAppViewAsh::PointerInfoHandler { 367 class ChromeAppViewAsh::PointerInfoHandler {
368 public: 368 public:
369 PointerInfoHandler() 369 PointerInfoHandler()
370 : x_(0), 370 : x_(0),
371 y_(0), 371 y_(0),
372 wheel_delta_(0), 372 wheel_delta_(0),
373 update_kind_(winui::Input::PointerUpdateKind_Other), 373 update_kind_(winui::Input::PointerUpdateKind_Other),
374 timestamp_(0), 374 timestamp_(0),
375 pointer_id_(0), 375 pointer_id_(0),
376 mouse_down_flags_(0) {} 376 mouse_down_flags_(0),
377 is_horizontal_wheel_(0) {}
377 378
378 HRESULT Init(winui::Core::IPointerEventArgs* args) { 379 HRESULT Init(winui::Core::IPointerEventArgs* args) {
379 HRESULT hr = args->get_CurrentPoint(&pointer_point_); 380 HRESULT hr = args->get_CurrentPoint(&pointer_point_);
380 if (FAILED(hr)) 381 if (FAILED(hr))
381 return hr; 382 return hr;
382 383
383 winfoundtn::Point point; 384 winfoundtn::Point point;
384 hr = pointer_point_->get_Position(&point); 385 hr = pointer_point_->get_Position(&point);
385 if (FAILED(hr)) 386 if (FAILED(hr))
386 return hr; 387 return hr;
387 388
388 mswr::ComPtr<winui::Input::IPointerPointProperties> properties; 389 mswr::ComPtr<winui::Input::IPointerPointProperties> properties;
389 hr = pointer_point_->get_Properties(&properties); 390 hr = pointer_point_->get_Properties(&properties);
390 if (FAILED(hr)) 391 if (FAILED(hr))
391 return hr; 392 return hr;
392 393
393 hr = properties->get_PointerUpdateKind(&update_kind_); 394 hr = properties->get_PointerUpdateKind(&update_kind_);
394 if (FAILED(hr)) 395 if (FAILED(hr))
395 return hr; 396 return hr;
396 397
397 hr = properties->get_MouseWheelDelta(&wheel_delta_); 398 hr = properties->get_MouseWheelDelta(&wheel_delta_);
398 if (FAILED(hr)) 399 if (FAILED(hr))
399 return hr; 400 return hr;
400 401
402 is_horizontal_wheel_ = 0;
403 properties->get_IsHorizontalMouseWheel(&is_horizontal_wheel_);
404
401 x_ = point.X; 405 x_ = point.X;
402 y_ = point.Y; 406 y_ = point.Y;
407
403 pointer_point_->get_Timestamp(&timestamp_); 408 pointer_point_->get_Timestamp(&timestamp_);
404 pointer_point_->get_PointerId(&pointer_id_); 409 pointer_point_->get_PointerId(&pointer_id_);
405 // Map the OS touch event id to a range allowed by the gesture recognizer. 410 // Map the OS touch event id to a range allowed by the gesture recognizer.
406 if (IsTouch()) 411 if (IsTouch())
407 pointer_id_ %= ui::GestureSequence::kMaxGesturePoints; 412 pointer_id_ %= ui::GestureSequence::kMaxGesturePoints;
408 413
409 boolean left_button_state; 414 boolean left_button_state;
410 hr = properties->get_IsLeftButtonPressed(&left_button_state); 415 hr = properties->get_IsLeftButtonPressed(&left_button_state);
411 if (FAILED(hr)) 416 if (FAILED(hr))
412 return hr; 417 return hr;
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 int y() const { return y_; } 481 int y() const { return y_; }
477 482
478 uint32 pointer_id() const { 483 uint32 pointer_id() const {
479 return pointer_id_; 484 return pointer_id_;
480 } 485 }
481 486
482 uint64 timestamp() const { return timestamp_; } 487 uint64 timestamp() const { return timestamp_; }
483 488
484 winui::Input::PointerUpdateKind update_kind() const { return update_kind_; } 489 winui::Input::PointerUpdateKind update_kind() const { return update_kind_; }
485 490
491 bool is_horizontal_wheel() const { return !!is_horizontal_wheel_; }
492
486 private: 493 private:
487 int x_; 494 int x_;
488 int y_; 495 int y_;
489 int wheel_delta_; 496 int wheel_delta_;
490 uint32 pointer_id_; 497 uint32 pointer_id_;
491 winui::Input::PointerUpdateKind update_kind_; 498 winui::Input::PointerUpdateKind update_kind_;
492 mswr::ComPtr<winui::Input::IPointerPoint> pointer_point_; 499 mswr::ComPtr<winui::Input::IPointerPoint> pointer_point_;
493 uint64 timestamp_; 500 uint64 timestamp_;
494 501
495 // Bitmask of ui::EventFlags corresponding to the buttons that are currently 502 // Bitmask of ui::EventFlags corresponding to the buttons that are currently
496 // down. 503 // down.
497 uint32 mouse_down_flags_; 504 uint32 mouse_down_flags_;
498 505
506 // Set to true for a horizontal wheel message.
507 boolean is_horizontal_wheel_;
508
499 DISALLOW_COPY_AND_ASSIGN(PointerInfoHandler); 509 DISALLOW_COPY_AND_ASSIGN(PointerInfoHandler);
500 }; 510 };
501 511
502 ChromeAppViewAsh::ChromeAppViewAsh() 512 ChromeAppViewAsh::ChromeAppViewAsh()
503 : mouse_down_flags_(ui::EF_NONE), 513 : mouse_down_flags_(ui::EF_NONE),
504 ui_channel_(nullptr), 514 ui_channel_(nullptr),
505 core_window_hwnd_(NULL) { 515 core_window_hwnd_(NULL) {
506 DVLOG(1) << __FUNCTION__; 516 DVLOG(1) << __FUNCTION__;
507 globals.previous_state = 517 globals.previous_state =
508 winapp::Activation::ApplicationExecutionState_NotRunning; 518 winapp::Activation::ApplicationExecutionState_NotRunning;
(...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after
935 945
936 void ChromeAppViewAsh::OnTextCommitted(const base::string16& text) { 946 void ChromeAppViewAsh::OnTextCommitted(const base::string16& text) {
937 ui_channel_->Send(new MetroViewerHostMsg_ImeTextCommitted(text)); 947 ui_channel_->Send(new MetroViewerHostMsg_ImeTextCommitted(text));
938 } 948 }
939 949
940 void ChromeAppViewAsh::SendMouseButton(int x, 950 void ChromeAppViewAsh::SendMouseButton(int x,
941 int y, 951 int y,
942 int extra, 952 int extra,
943 ui::EventType event_type, 953 ui::EventType event_type,
944 uint32 flags, 954 uint32 flags,
945 ui::EventFlags changed_button) { 955 ui::EventFlags changed_button,
956 bool is_horizontal_wheel) {
946 MetroViewerHostMsg_MouseButtonParams params; 957 MetroViewerHostMsg_MouseButtonParams params;
947 params.x = static_cast<int32>(x); 958 params.x = static_cast<int32>(x);
948 params.y = static_cast<int32>(y); 959 params.y = static_cast<int32>(y);
949 params.extra = static_cast<int32>(extra); 960 params.extra = static_cast<int32>(extra);
950 params.event_type = event_type; 961 params.event_type = event_type;
951 params.flags = static_cast<int32>(flags); 962 params.flags = static_cast<int32>(flags);
952 params.changed_button = changed_button; 963 params.changed_button = changed_button;
964 params.is_horizontal_wheel = is_horizontal_wheel;
953 ui_channel_->Send(new MetroViewerHostMsg_MouseButton(params)); 965 ui_channel_->Send(new MetroViewerHostMsg_MouseButton(params));
954 } 966 }
955 967
956 void ChromeAppViewAsh::GenerateMouseEventFromMoveIfNecessary( 968 void ChromeAppViewAsh::GenerateMouseEventFromMoveIfNecessary(
957 const PointerInfoHandler& pointer) { 969 const PointerInfoHandler& pointer) {
958 ui::EventType event_type; 970 ui::EventType event_type;
959 // For aura we want the flags to include the button that was released, thus 971 // For aura we want the flags to include the button that was released, thus
960 // we or the old and new. 972 // we or the old and new.
961 uint32 mouse_down_flags = pointer.mouse_down_flags() | mouse_down_flags_; 973 uint32 mouse_down_flags = pointer.mouse_down_flags() | mouse_down_flags_;
962 mouse_down_flags_ = pointer.mouse_down_flags(); 974 mouse_down_flags_ = pointer.mouse_down_flags();
963 switch (pointer.update_kind()) { 975 switch (pointer.update_kind()) {
964 case winui::Input::PointerUpdateKind_LeftButtonPressed: 976 case winui::Input::PointerUpdateKind_LeftButtonPressed:
965 case winui::Input::PointerUpdateKind_RightButtonPressed: 977 case winui::Input::PointerUpdateKind_RightButtonPressed:
966 case winui::Input::PointerUpdateKind_MiddleButtonPressed: 978 case winui::Input::PointerUpdateKind_MiddleButtonPressed:
967 event_type = ui::ET_MOUSE_PRESSED; 979 event_type = ui::ET_MOUSE_PRESSED;
968 break; 980 break;
969 case winui::Input::PointerUpdateKind_LeftButtonReleased: 981 case winui::Input::PointerUpdateKind_LeftButtonReleased:
970 case winui::Input::PointerUpdateKind_RightButtonReleased: 982 case winui::Input::PointerUpdateKind_RightButtonReleased:
971 case winui::Input::PointerUpdateKind_MiddleButtonReleased: 983 case winui::Input::PointerUpdateKind_MiddleButtonReleased:
972 event_type = ui::ET_MOUSE_RELEASED; 984 event_type = ui::ET_MOUSE_RELEASED;
973 break; 985 break;
974 default: 986 default:
975 return; 987 return;
976 } 988 }
977 SendMouseButton(pointer.x(), pointer.y(), 0, event_type, 989 SendMouseButton(pointer.x(), pointer.y(), 0, event_type,
978 mouse_down_flags | GetKeyboardEventFlags(), 990 mouse_down_flags | GetKeyboardEventFlags(),
979 pointer.changed_button()); 991 pointer.changed_button(), pointer.is_horizontal_wheel());
980 } 992 }
981 993
982 HRESULT ChromeAppViewAsh::OnActivate( 994 HRESULT ChromeAppViewAsh::OnActivate(
983 winapp::Core::ICoreApplicationView*, 995 winapp::Core::ICoreApplicationView*,
984 winapp::Activation::IActivatedEventArgs* args) { 996 winapp::Activation::IActivatedEventArgs* args) {
985 DVLOG(1) << __FUNCTION__; 997 DVLOG(1) << __FUNCTION__;
986 // Note: If doing more work in this function, you migth need to call 998 // Note: If doing more work in this function, you migth need to call
987 // get_PreviousExecutionState() and skip the work if the result is 999 // get_PreviousExecutionState() and skip the work if the result is
988 // ApplicationExecutionState_Running and globals.previous_state is too. 1000 // ApplicationExecutionState_Running and globals.previous_state is too.
989 args->get_PreviousExecutionState(&globals.previous_state); 1001 args->get_PreviousExecutionState(&globals.previous_state);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1043 winui::Core::IPointerEventArgs* args) { 1055 winui::Core::IPointerEventArgs* args) {
1044 PointerInfoHandler pointer; 1056 PointerInfoHandler pointer;
1045 HRESULT hr = pointer.Init(args); 1057 HRESULT hr = pointer.Init(args);
1046 if (FAILED(hr)) 1058 if (FAILED(hr))
1047 return hr; 1059 return hr;
1048 1060
1049 if (pointer.IsMouse()) { 1061 if (pointer.IsMouse()) {
1050 mouse_down_flags_ = pointer.mouse_down_flags(); 1062 mouse_down_flags_ = pointer.mouse_down_flags();
1051 SendMouseButton(pointer.x(), pointer.y(), 0, ui::ET_MOUSE_PRESSED, 1063 SendMouseButton(pointer.x(), pointer.y(), 0, ui::ET_MOUSE_PRESSED,
1052 mouse_down_flags_ | GetKeyboardEventFlags(), 1064 mouse_down_flags_ | GetKeyboardEventFlags(),
1053 pointer.changed_button()); 1065 pointer.changed_button(), pointer.is_horizontal_wheel());
1054 } else { 1066 } else {
1055 DCHECK(pointer.IsTouch()); 1067 DCHECK(pointer.IsTouch());
1056 ui_channel_->Send(new MetroViewerHostMsg_TouchDown(pointer.x(), 1068 ui_channel_->Send(new MetroViewerHostMsg_TouchDown(pointer.x(),
1057 pointer.y(), 1069 pointer.y(),
1058 pointer.timestamp(), 1070 pointer.timestamp(),
1059 pointer.pointer_id())); 1071 pointer.pointer_id()));
1060 } 1072 }
1061 return S_OK; 1073 return S_OK;
1062 } 1074 }
1063 1075
1064 HRESULT ChromeAppViewAsh::OnPointerReleased( 1076 HRESULT ChromeAppViewAsh::OnPointerReleased(
1065 winui::Core::ICoreWindow* sender, 1077 winui::Core::ICoreWindow* sender,
1066 winui::Core::IPointerEventArgs* args) { 1078 winui::Core::IPointerEventArgs* args) {
1067 PointerInfoHandler pointer; 1079 PointerInfoHandler pointer;
1068 HRESULT hr = pointer.Init(args); 1080 HRESULT hr = pointer.Init(args);
1069 if (FAILED(hr)) 1081 if (FAILED(hr))
1070 return hr; 1082 return hr;
1071 1083
1072 if (pointer.IsMouse()) { 1084 if (pointer.IsMouse()) {
1073 mouse_down_flags_ = ui::EF_NONE; 1085 mouse_down_flags_ = ui::EF_NONE;
1074 SendMouseButton(pointer.x(), pointer.y(), 0, ui::ET_MOUSE_RELEASED, 1086 SendMouseButton(pointer.x(), pointer.y(), 0, ui::ET_MOUSE_RELEASED,
1075 static_cast<uint32>(pointer.changed_button()) | 1087 static_cast<uint32>(pointer.changed_button()) |
1076 GetKeyboardEventFlags(), 1088 GetKeyboardEventFlags(),
1077 pointer.changed_button()); 1089 pointer.changed_button(),
1090 pointer.is_horizontal_wheel());
1078 } else { 1091 } else {
1079 DCHECK(pointer.IsTouch()); 1092 DCHECK(pointer.IsTouch());
1080 ui_channel_->Send(new MetroViewerHostMsg_TouchUp(pointer.x(), 1093 ui_channel_->Send(new MetroViewerHostMsg_TouchUp(pointer.x(),
1081 pointer.y(), 1094 pointer.y(),
1082 pointer.timestamp(), 1095 pointer.timestamp(),
1083 pointer.pointer_id())); 1096 pointer.pointer_id()));
1084 } 1097 }
1085 return S_OK; 1098 return S_OK;
1086 } 1099 }
1087 1100
1088 HRESULT ChromeAppViewAsh::OnWheel( 1101 HRESULT ChromeAppViewAsh::OnWheel(
1089 winui::Core::ICoreWindow* sender, 1102 winui::Core::ICoreWindow* sender,
1090 winui::Core::IPointerEventArgs* args) { 1103 winui::Core::IPointerEventArgs* args) {
1091 PointerInfoHandler pointer; 1104 PointerInfoHandler pointer;
1092 HRESULT hr = pointer.Init(args); 1105 HRESULT hr = pointer.Init(args);
1093 if (FAILED(hr)) 1106 if (FAILED(hr))
1094 return hr; 1107 return hr;
1095 DCHECK(pointer.IsMouse()); 1108 DCHECK(pointer.IsMouse());
1096 SendMouseButton(pointer.x(), pointer.y(), pointer.wheel_delta(), 1109 SendMouseButton(pointer.x(), pointer.y(), pointer.wheel_delta(),
1097 ui::ET_MOUSEWHEEL, ui::EF_NONE, ui::EF_NONE); 1110 ui::ET_MOUSEWHEEL, ui::EF_NONE, ui::EF_NONE,
1111 pointer.is_horizontal_wheel());
1098 return S_OK; 1112 return S_OK;
1099 } 1113 }
1100 1114
1101 HRESULT ChromeAppViewAsh::OnKeyDown( 1115 HRESULT ChromeAppViewAsh::OnKeyDown(
1102 winui::Core::ICoreWindow* sender, 1116 winui::Core::ICoreWindow* sender,
1103 winui::Core::IKeyEventArgs* args) { 1117 winui::Core::IKeyEventArgs* args) {
1104 winsys::VirtualKey virtual_key; 1118 winsys::VirtualKey virtual_key;
1105 HRESULT hr = args->get_VirtualKey(&virtual_key); 1119 HRESULT hr = args->get_VirtualKey(&virtual_key);
1106 if (FAILED(hr)) 1120 if (FAILED(hr))
1107 return hr; 1121 return hr;
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
1321 mswr::ComPtr<winapp::Core::ICoreApplicationExit> app_exit; 1335 mswr::ComPtr<winapp::Core::ICoreApplicationExit> app_exit;
1322 CheckHR(core_app.As(&app_exit)); 1336 CheckHR(core_app.As(&app_exit));
1323 globals.app_exit = app_exit.Detach(); 1337 globals.app_exit = app_exit.Detach();
1324 } 1338 }
1325 1339
1326 IFACEMETHODIMP 1340 IFACEMETHODIMP
1327 ChromeAppViewFactory::CreateView(winapp::Core::IFrameworkView** view) { 1341 ChromeAppViewFactory::CreateView(winapp::Core::IFrameworkView** view) {
1328 *view = mswr::Make<ChromeAppViewAsh>().Detach(); 1342 *view = mswr::Make<ChromeAppViewAsh>().Detach();
1329 return (*view) ? S_OK : E_OUTOFMEMORY; 1343 return (*view) ? S_OK : E_OUTOFMEMORY;
1330 } 1344 }
OLDNEW
« no previous file with comments | « win8/metro_driver/chrome_app_view_ash.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698