Index: ui/views/win/hwnd_message_handler.cc |
diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc |
index b394556ee2943a4c74837aa3e1ff4547c81c9347..7bc4b0016bada615409bf90a2001b2c31a6b3f63 100644 |
--- a/ui/views/win/hwnd_message_handler.cc |
+++ b/ui/views/win/hwnd_message_handler.cc |
@@ -2341,7 +2341,6 @@ LRESULT HWNDMessageHandler::OnTouchEvent(UINT message, |
// input[i].dwTime doesn't necessarily relate to the system time at all, |
// so use base::TimeTicks::Now(). |
const base::TimeTicks event_time = base::TimeTicks::Now(); |
- int flags = ui::GetModifiersFromKeyState(); |
TouchEvents touch_events; |
for (int i = 0; i < num_points; ++i) { |
POINT point; |
@@ -2363,39 +2362,32 @@ LRESULT HWNDMessageHandler::OnTouchEvent(UINT message, |
last_touch_message_time_ = ::GetMessageTime(); |
- ui::EventType touch_event_type = ui::ET_UNKNOWN; |
+ gfx::Point touch_point(point.x, point.y); |
+ unsigned int touch_id = id_generator_.GetGeneratedID(input[i].dwID); |
+ base::TimeDelta time_delta = event_time - base::TimeTicks(); |
if (input[i].dwFlags & TOUCHEVENTF_DOWN) { |
touch_ids_.insert(input[i].dwID); |
- touch_event_type = ui::ET_TOUCH_PRESSED; |
+ GenerateTouchEvent(ui::ET_TOUCH_PRESSED, touch_point, touch_id, |
+ event_time, time_delta, &touch_events); |
touch_down_contexts_++; |
base::MessageLoop::current()->PostDelayedTask( |
FROM_HERE, |
base::Bind(&HWNDMessageHandler::ResetTouchDownContext, |
weak_factory_.GetWeakPtr()), |
base::TimeDelta::FromMilliseconds(kTouchDownContextResetTimeout)); |
- } else if (input[i].dwFlags & TOUCHEVENTF_UP) { |
- touch_ids_.erase(input[i].dwID); |
- touch_event_type = ui::ET_TOUCH_RELEASED; |
- } else if (input[i].dwFlags & TOUCHEVENTF_MOVE) { |
- touch_event_type = ui::ET_TOUCH_MOVED; |
- } |
- if (touch_event_type != ui::ET_UNKNOWN) { |
- ui::TouchEvent event(touch_event_type, |
- gfx::Point(point.x, point.y), |
- id_generator_.GetGeneratedID(input[i].dwID), |
- event_time - base::TimeTicks()); |
- event.set_flags(flags); |
- event.latency()->AddLatencyNumberWithTimestamp( |
- ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, |
- 0, |
- 0, |
- event_time, |
- 1); |
- |
- touch_events.push_back(event); |
- if (touch_event_type == ui::ET_TOUCH_RELEASED) |
+ } else { |
+ if (input[i].dwFlags & TOUCHEVENTF_MOVE) { |
+ GenerateTouchEvent(ui::ET_TOUCH_MOVED, touch_point, touch_id, |
+ event_time, time_delta, &touch_events); |
+ } |
+ |
+ if (input[i].dwFlags & TOUCHEVENTF_UP) { |
+ touch_ids_.erase(input[i].dwID); |
+ GenerateTouchEvent(ui::ET_TOUCH_RELEASED, touch_point, touch_id, |
+ event_time, time_delta, &touch_events); |
id_generator_.ReleaseNumber(input[i].dwID); |
+ } |
} |
} |
// Handle the touch events asynchronously. We need this because touch |
@@ -2790,4 +2782,24 @@ void HWNDMessageHandler::PerformDwmTransition() { |
EnumChildWindows(hwnd(), &SendDwmCompositionChanged, NULL); |
} |
+void HWNDMessageHandler::GenerateTouchEvent(ui::EventType event_type, |
+ const gfx::Point& point, |
+ unsigned int id, |
+ base::TimeTicks event_time, |
+ base::TimeDelta time_stamp, |
+ TouchEvents* touch_events) { |
+ ui::TouchEvent event(event_type, point, id, time_stamp); |
+ |
+ event.set_flags(ui::GetModifiersFromKeyState()); |
+ |
+ event.latency()->AddLatencyNumberWithTimestamp( |
+ ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, |
+ 0, |
+ 0, |
+ event_time, |
+ 1); |
+ |
+ touch_events->push_back(event); |
+} |
+ |
} // namespace views |