Index: ui/events/x/events_x_utils.cc |
diff --git a/ui/events/x/events_x_utils.cc b/ui/events/x/events_x_utils.cc |
index ea481039880255f70700b199b12505b472b5c060..c96dde851f395987c042f7bf6957237048fe517b 100644 |
--- a/ui/events/x/events_x_utils.cc |
+++ b/ui/events/x/events_x_utils.cc |
@@ -16,14 +16,17 @@ |
namespace { |
-const int kScrollValuatorNum = 5; |
+const int kScrollValuatorNum = 8; |
const int kScrollValuatorMap[kScrollValuatorNum][4] = { |
// { valuator_index, valuator_type, min_val, max_val } |
{ 0, ui::DeviceDataManager::DT_CMT_SCROLL_X, -100, 100 }, |
{ 1, ui::DeviceDataManager::DT_CMT_SCROLL_Y, -100, 100 }, |
- { 2, ui::DeviceDataManager::DT_CMT_ORDINAL_X, -100, 100 }, |
- { 3, ui::DeviceDataManager::DT_CMT_ORDINAL_Y, -100, 100 }, |
- { 4, ui::DeviceDataManager::DT_CMT_FINGER_COUNT, 0, 3}, |
+ { 2, ui::DeviceDataManager::DT_CMT_FLING_X, -100, 100 }, |
+ { 3, ui::DeviceDataManager::DT_CMT_FLING_Y, -100, 100 }, |
+ { 4, ui::DeviceDataManager::DT_CMT_ORDINAL_X, -100, 100 }, |
+ { 5, ui::DeviceDataManager::DT_CMT_ORDINAL_Y, -100, 100 }, |
+ { 6, ui::DeviceDataManager::DT_CMT_FINGER_COUNT, 0, 3}, |
+ { 7, ui::DeviceDataManager::DT_CMT_FLING_STATE, 0, 1}, |
}; |
#if defined(USE_XI2_MT) |
@@ -106,13 +109,25 @@ unsigned int XButtonEventButton(ui::EventType type, |
return 0; |
} |
-void InitValuatorsForXIDeviceEvent(XIDeviceEvent* xiev, int valuator_count) { |
+void ClearValuatorsForXIDeviceEvent(XIDeviceEvent* xiev, int valuator_count) { |
xiev->valuators.mask_len = (valuator_count / 8) + 1; |
xiev->valuators.mask = new unsigned char[xiev->valuators.mask_len]; |
memset(xiev->valuators.mask, 0, xiev->valuators.mask_len); |
xiev->valuators.values = new double[valuator_count]; |
} |
+void SetValuatorsForXIDeviceEvent(XIDeviceEvent* xiev, |
+ const int* valuator_data, |
+ int valuator_data_count, |
+ int total_valuator_count, |
+ const unsigned char* valuator_mask) { |
+ ClearValuatorsForXIDeviceEvent(xiev, total_valuator_count); |
+ memcpy(xiev->valuators.mask, valuator_mask, xiev->valuators.mask_len); |
+ for(int i = 0; i < valuator_data_count; ++i) { |
+ xiev->valuators.values[i] = valuator_data[i]; |
+ } |
+} |
+ |
XEvent* CreateXInput2Event(int deviceid, |
int evtype, |
int tracking_id, |
@@ -191,9 +206,9 @@ void InitXButtonEventForTesting(EventType type, |
event->xbutton = button_event; |
} |
-EVENTS_EXPORT void InitXMouseWheelEventForTesting(int wheel_delta, |
- int flags, |
- XEvent* event) { |
+void InitXMouseWheelEventForTesting(int wheel_delta, |
+ int flags, |
+ XEvent* event) { |
InitXButtonEventForTesting(ui::ET_MOUSEWHEEL, flags, event); |
// MouseWheelEvents are not taking horizontal scrolls into account |
// at the moment. |
@@ -213,7 +228,7 @@ ScopedXI2Event::~ScopedXI2Event() { |
} |
} |
-EVENTS_EXPORT XEvent* CreateScrollEventForTest( |
+XEvent* CreateScrollEventForTest( |
int deviceid, |
int x_offset, |
int y_offset, |
@@ -223,20 +238,48 @@ EVENTS_EXPORT XEvent* CreateScrollEventForTest( |
XEvent* event = CreateXInput2Event( |
deviceid, XI_Motion, deviceid, gfx::Point(0, 0)); |
+ // Set the valuator data for the event. Please ensure that |valuator_mask| |
+ // is the same size as the valuators mask length. |
+ unsigned char valuator_mask = 0x73; // 01110011 |
int valuator_data[kScrollValuatorNum] = |
- { x_offset, y_offset, x_offset_ordinal, y_offset_ordinal, finger_count }; |
- XIDeviceEvent* xiev = |
- static_cast<XIDeviceEvent*>(event->xcookie.data); |
- InitValuatorsForXIDeviceEvent(xiev, kScrollValuatorNum); |
- for(int i = 0; i < kScrollValuatorNum; i++) { |
- XISetMask(xiev->valuators.mask, i); |
- xiev->valuators.values[i] = valuator_data[i]; |
- } |
+ { x_offset, y_offset, x_offset_ordinal, y_offset_ordinal, finger_count}; |
+ |
+ SetValuatorsForXIDeviceEvent( |
+ static_cast<XIDeviceEvent*>(event->xcookie.data), |
+ valuator_data, |
+ 5, |
+ kScrollValuatorNum, |
+ &valuator_mask); |
+ return event; |
+} |
+XEvent* CreateFlingEventForTest( |
+ int deviceid, |
+ int x_velocity, |
+ int y_velocity, |
+ int x_velocity_ordinal, |
+ int y_velocity_ordinal, |
+ bool is_cancel) { |
+ XEvent* event = CreateXInput2Event( |
+ deviceid, XI_Motion, deviceid, gfx::Point(0, 0)); |
+ |
+ // Set the valuator data for the event. Please ensure that |valuator_mask| |
+ // is the same size as the valuators mask length. |
+ unsigned char valuator_mask = 0xBC; // 10111100 |
+ int valuator_data[kScrollValuatorNum] = |
+ { x_velocity, y_velocity, x_velocity_ordinal, y_velocity_ordinal, |
+ is_cancel ? 1 : 0 }; |
+ |
+ SetValuatorsForXIDeviceEvent( |
+ static_cast<XIDeviceEvent*>(event->xcookie.data), |
+ valuator_data, |
+ 5, |
+ kScrollValuatorNum, |
+ &valuator_mask); |
return event; |
} |
-EVENTS_EXPORT void SetUpScrollDeviceForTest(unsigned int deviceid) { |
+void SetUpScrollDeviceForTest(unsigned int deviceid) { |
std::vector<unsigned int> device_list; |
device_list.push_back(deviceid); |
@@ -266,7 +309,7 @@ XEvent* CreateTouchEventForTest(int deviceid, |
XIDeviceEvent* xiev = |
static_cast<XIDeviceEvent*>(event->xcookie.data); |
- InitValuatorsForXIDeviceEvent(xiev, valuators.size()); |
+ ClearValuatorsForXIDeviceEvent(xiev, valuators.size()); |
int val_count = 0; |
for (int i = 0; i < kTouchValuatorNum; i++) { |
for(size_t j = 0; j < valuators.size(); j++) { |