Changeset 162111 in webkit
- Timestamp:
- Jan 15, 2014 8:29:04 PM (10 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r162107 r162111 1 2014-01-15 Eunmi Lee <eunmi15.lee@samsung.com> 2 3 [EFL][WK2] Use timestamp when event occurs for touch events. 4 https://bugs.webkit.org/show_bug.cgi?id=126424 5 6 Reviewed by Gyuyoung Kim. 7 8 Current time is used for touch event's timestamp instead of timestamp 9 when event occurs. Timestamp of touch event is used to implement flick 10 gesture, so it should be real value for accurate gesture processing. 11 12 * UIProcess/API/efl/EwkView.cpp: 13 Function names for handling touch events are changed to distinguish 14 mouse events and multi events. 15 (EwkView::setTouchEventsEnabled): 16 (EwkView::feedTouchEvents): 17 (EwkView::handleMouseDownForTouch): 18 (EwkView::handleMouseUpForTouch): 19 (EwkView::handleMouseMoveForTouch): 20 (EwkView::handleMultiDownForTouch): 21 (EwkView::handleMultiUpForTouch): 22 (EwkView::handleMultiMoveForTouch): 23 * UIProcess/API/efl/EwkView.h: 24 * UIProcess/API/efl/GestureRecognizer.cpp: 25 (WebKit::GestureHandler::handlePan): 26 (WebKit::GestureRecognizer::processTouchEvent): 27 (WebKit::GestureRecognizer::noGesture): 28 (WebKit::GestureRecognizer::singleTapGesture): 29 (WebKit::GestureRecognizer::doubleTapGesture): 30 (WebKit::GestureRecognizer::panGesture): 31 (WebKit::GestureRecognizer::pinchGesture): 32 * UIProcess/API/efl/GestureRecognizer.h: 33 1 34 2014-01-15 Gavin Barraclough <barraclough@apple.com> 2 35 -
trunk/Source/WebKit2/UIProcess/API/efl/EwkView.cpp
r161915 r162111 779 779 // See https://bugs.webkit.org/show_bug.cgi?id=97785 for details. 780 780 Ewk_View_Smart_Data* sd = smartData(); 781 evas_object_event_callback_add(m_evasObject, EVAS_CALLBACK_MOUSE_DOWN, handle TouchDown, sd);782 evas_object_event_callback_add(m_evasObject, EVAS_CALLBACK_MOUSE_UP, handle TouchUp, sd);783 evas_object_event_callback_add(m_evasObject, EVAS_CALLBACK_MOUSE_MOVE, handle TouchMove, sd);784 evas_object_event_callback_add(m_evasObject, EVAS_CALLBACK_MULTI_DOWN, handle TouchDown, sd);785 evas_object_event_callback_add(m_evasObject, EVAS_CALLBACK_MULTI_UP, handle TouchUp, sd);786 evas_object_event_callback_add(m_evasObject, EVAS_CALLBACK_MULTI_MOVE, handle TouchMove, sd);781 evas_object_event_callback_add(m_evasObject, EVAS_CALLBACK_MOUSE_DOWN, handleMouseDownForTouch, sd); 782 evas_object_event_callback_add(m_evasObject, EVAS_CALLBACK_MOUSE_UP, handleMouseUpForTouch, sd); 783 evas_object_event_callback_add(m_evasObject, EVAS_CALLBACK_MOUSE_MOVE, handleMouseMoveForTouch, sd); 784 evas_object_event_callback_add(m_evasObject, EVAS_CALLBACK_MULTI_DOWN, handleMultiDownForTouch, sd); 785 evas_object_event_callback_add(m_evasObject, EVAS_CALLBACK_MULTI_UP, handleMultiUpForTouch, sd); 786 evas_object_event_callback_add(m_evasObject, EVAS_CALLBACK_MULTI_MOVE, handleMultiMoveForTouch, sd); 787 787 } else { 788 evas_object_event_callback_del(m_evasObject, EVAS_CALLBACK_MOUSE_DOWN, handle TouchDown);789 evas_object_event_callback_del(m_evasObject, EVAS_CALLBACK_MOUSE_UP, handle TouchUp);790 evas_object_event_callback_del(m_evasObject, EVAS_CALLBACK_MOUSE_MOVE, handle TouchMove);791 evas_object_event_callback_del(m_evasObject, EVAS_CALLBACK_MULTI_DOWN, handle TouchDown);792 evas_object_event_callback_del(m_evasObject, EVAS_CALLBACK_MULTI_UP, handle TouchUp);793 evas_object_event_callback_del(m_evasObject, EVAS_CALLBACK_MULTI_MOVE, handle TouchMove);788 evas_object_event_callback_del(m_evasObject, EVAS_CALLBACK_MOUSE_DOWN, handleMouseDownForTouch); 789 evas_object_event_callback_del(m_evasObject, EVAS_CALLBACK_MOUSE_UP, handleMouseUpForTouch); 790 evas_object_event_callback_del(m_evasObject, EVAS_CALLBACK_MOUSE_MOVE, handleMouseMoveForTouch); 791 evas_object_event_callback_del(m_evasObject, EVAS_CALLBACK_MULTI_DOWN, handleMultiDownForTouch); 792 evas_object_event_callback_del(m_evasObject, EVAS_CALLBACK_MULTI_UP, handleMultiUpForTouch); 793 evas_object_event_callback_del(m_evasObject, EVAS_CALLBACK_MULTI_MOVE, handleMultiMoveForTouch); 794 794 } 795 795 } … … 1314 1314 1315 1315 #if ENABLE(TOUCH_EVENTS) 1316 void EwkView::feedTouchEvents(Ewk_Touch_Event_Type type )1316 void EwkView::feedTouchEvents(Ewk_Touch_Event_Type type, double timestamp) 1317 1317 { 1318 1318 Ewk_View_Smart_Data* sd = smartData(); … … 1333 1333 WKRetainPtr<WKArrayRef> wkTouchPoints(AdoptWK, WKArrayCreateAdoptingValues(touchPoints.get(), length)); 1334 1334 1335 WKViewSendTouchEvent(wkView(), adoptWK(WKTouchEventCreate(static_cast<WKEventType>(type), wkTouchPoints.get(), toWKEventModifiers(evas_key_modifier_get(sd->base.evas)), ecore_time_get())).get()); 1336 } 1337 1338 void EwkView::handleTouchDown(void* /* data */, Evas* /* canvas */, Evas_Object* ewkView, void* /* eventInfo */) 1339 { 1340 toEwkView(ewkView)->feedTouchEvents(EWK_TOUCH_START); 1341 } 1342 1343 void EwkView::handleTouchUp(void* /* data */, Evas* /* canvas */, Evas_Object* ewkView, void* /* eventInfo */) 1344 { 1345 toEwkView(ewkView)->feedTouchEvents(EWK_TOUCH_END); 1346 } 1347 1348 void EwkView::handleTouchMove(void* /* data */, Evas* /* canvas */, Evas_Object* ewkView, void* /* eventInfo */) 1349 { 1350 toEwkView(ewkView)->feedTouchEvents(EWK_TOUCH_MOVE); 1335 WKViewSendTouchEvent(wkView(), adoptWK(WKTouchEventCreate(static_cast<WKEventType>(type), wkTouchPoints.get(), toWKEventModifiers(evas_key_modifier_get(sd->base.evas)), timestamp)).get()); 1336 } 1337 1338 void EwkView::handleMouseDownForTouch(void*, Evas*, Evas_Object* ewkView, void* eventInfo) 1339 { 1340 toEwkView(ewkView)->feedTouchEvents(EWK_TOUCH_START, static_cast<Evas_Event_Mouse_Down*>(eventInfo)->timestamp / 1000.0); 1341 } 1342 1343 void EwkView::handleMouseUpForTouch(void*, Evas*, Evas_Object* ewkView, void* eventInfo) 1344 { 1345 toEwkView(ewkView)->feedTouchEvents(EWK_TOUCH_END, static_cast<Evas_Event_Mouse_Up*>(eventInfo)->timestamp / 1000.0); 1346 } 1347 1348 void EwkView::handleMouseMoveForTouch(void*, Evas*, Evas_Object* ewkView, void* eventInfo) 1349 { 1350 toEwkView(ewkView)->feedTouchEvents(EWK_TOUCH_MOVE, static_cast<Evas_Event_Mouse_Move*>(eventInfo)->timestamp / 1000.0); 1351 } 1352 1353 void EwkView::handleMultiDownForTouch(void*, Evas*, Evas_Object* ewkView, void* eventInfo) 1354 { 1355 toEwkView(ewkView)->feedTouchEvents(EWK_TOUCH_START, static_cast<Evas_Event_Multi_Down*>(eventInfo)->timestamp / 1000.0); 1356 } 1357 1358 void EwkView::handleMultiUpForTouch(void*, Evas*, Evas_Object* ewkView, void* eventInfo) 1359 { 1360 toEwkView(ewkView)->feedTouchEvents(EWK_TOUCH_END, static_cast<Evas_Event_Multi_Up*>(eventInfo)->timestamp / 1000.0); 1361 } 1362 1363 void EwkView::handleMultiMoveForTouch(void*, Evas*, Evas_Object* ewkView, void* eventInfo) 1364 { 1365 toEwkView(ewkView)->feedTouchEvents(EWK_TOUCH_MOVE, static_cast<Evas_Event_Multi_Move*>(eventInfo)->timestamp / 1000.0); 1351 1366 } 1352 1367 #endif -
trunk/Source/WebKit2/UIProcess/API/efl/EwkView.h
r159863 r162111 240 240 241 241 #if ENABLE(TOUCH_EVENTS) 242 void feedTouchEvents(Ewk_Touch_Event_Type type); 243 static void handleTouchDown(void* data, Evas*, Evas_Object*, void* eventInfo); 244 static void handleTouchUp(void* data, Evas*, Evas_Object*, void* eventInfo); 245 static void handleTouchMove(void* data, Evas*, Evas_Object*, void* eventInfo); 242 void feedTouchEvents(Ewk_Touch_Event_Type type, double timestamp); 243 static void handleMouseDownForTouch(void* data, Evas*, Evas_Object*, void* eventInfo); 244 static void handleMouseUpForTouch(void* data, Evas*, Evas_Object*, void* eventInfo); 245 static void handleMouseMoveForTouch(void* data, Evas*, Evas_Object*, void* eventInfo); 246 static void handleMultiDownForTouch(void* data, Evas*, Evas_Object*, void* eventInfo); 247 static void handleMultiUpForTouch(void* data, Evas*, Evas_Object*, void* eventInfo); 248 static void handleMultiMoveForTouch(void* data, Evas*, Evas_Object*, void* eventInfo); 246 249 #endif 247 250 static void handleFaviconChanged(const char* pageURL, void* eventInfo); -
trunk/Source/WebKit2/UIProcess/API/efl/GestureRecognizer.cpp
r159401 r162111 52 52 void handleTapAndHold(const IntPoint&); 53 53 void handlePanStarted(const IntPoint&); 54 void handlePan(const IntPoint& );54 void handlePan(const IntPoint&, double timestamp); 55 55 void handlePanFinished(); 56 56 void handleFlick(const IntSize&); … … 194 194 } 195 195 196 void GestureHandler::handlePan(const IntPoint& point )196 void GestureHandler::handlePan(const IntPoint& point, double timestamp) 197 197 { 198 198 m_currentPoint = point; … … 200 200 201 201 // Save current point to use to calculate offset of flick. 202 HistoryItem item = { m_currentPoint, ecore_time_get()};202 HistoryItem item = { m_currentPoint, timestamp }; 203 203 if (m_history.size() < m_history.capacity()) 204 204 m_history.uncheckedAppend(item); … … 296 296 } 297 297 298 (this->*m_recognizerFunction)( type, WKTouchEventGetTouchPoints(eventRef));298 (this->*m_recognizerFunction)(eventRef); 299 299 } 300 300 … … 353 353 } 354 354 355 void GestureRecognizer::noGesture(WK EventType type, WKArrayRef touchPoints)356 { 357 switch ( type) {355 void GestureRecognizer::noGesture(WKTouchEventRef eventRef) 356 { 357 switch (WKTouchEventGetType(eventRef)) { 358 358 case kWKEventTypeTouchStart: 359 359 m_gestureHandler->reset(); 360 360 361 361 m_recognizerFunction = &GestureRecognizer::singleTapGesture; 362 m_firstPressedPoint = toIntPoint(getPointAtIndex( touchPoints, 0));362 m_firstPressedPoint = toIntPoint(getPointAtIndex(WKTouchEventGetTouchPoints(eventRef), 0)); 363 363 ASSERT(!m_tapAndHoldTimer); 364 364 m_tapAndHoldTimer = ecore_timer_add(s_tapAndHoldTimeoutInSeconds, tapAndHoldTimerCallback, this); … … 374 374 } 375 375 376 void GestureRecognizer::singleTapGesture(WKEventType type, WKArrayRef touchPoints) 377 { 378 switch (type) { 376 void GestureRecognizer::singleTapGesture(WKTouchEventRef eventRef) 377 { 378 WKArrayRef touchPoints = WKTouchEventGetTouchPoints(eventRef); 379 380 switch (WKTouchEventGetType(eventRef)) { 379 381 case kWKEventTypeTouchStart: 380 382 stopTapTimers(); … … 410 412 } 411 413 412 void GestureRecognizer::doubleTapGesture(WKEventType type, WKArrayRef touchPoints) 413 { 414 switch (type) { 414 void GestureRecognizer::doubleTapGesture(WKTouchEventRef eventRef) 415 { 416 WKArrayRef touchPoints = WKTouchEventGetTouchPoints(eventRef); 417 418 switch (WKTouchEventGetType(eventRef)) { 415 419 case kWKEventTypeTouchStart: { 416 420 if (m_doubleTapTimer) { … … 447 451 } 448 452 449 void GestureRecognizer::panGesture(WKEventType type, WKArrayRef touchPoints) 450 { 451 switch (type) { 453 void GestureRecognizer::panGesture(WKTouchEventRef eventRef) 454 { 455 WKArrayRef touchPoints = WKTouchEventGetTouchPoints(eventRef); 456 457 switch (WKTouchEventGetType(eventRef)) { 452 458 case kWKEventTypeTouchStart: 453 459 m_recognizerFunction = &GestureRecognizer::pinchGesture; … … 455 461 break; 456 462 case kWKEventTypeTouchMove: 457 m_gestureHandler->handlePan(toIntPoint(getPointAtIndex(touchPoints, 0)) );463 m_gestureHandler->handlePan(toIntPoint(getPointAtIndex(touchPoints, 0)), WKTouchEventGetTimestamp(eventRef)); 458 464 break; 459 465 case kWKEventTypeTouchEnd: … … 467 473 } 468 474 469 void GestureRecognizer::pinchGesture(WKEventType type, WKArrayRef touchPoints) 470 { 475 void GestureRecognizer::pinchGesture(WKTouchEventRef eventRef) 476 { 477 WKArrayRef touchPoints = WKTouchEventGetTouchPoints(eventRef); 471 478 size_t numberOfTouchPoints = WKArrayGetSize(touchPoints); 472 479 ASSERT(numberOfTouchPoints >= 2); 473 480 474 switch ( type) {481 switch (WKTouchEventGetType(eventRef)) { 475 482 case kWKEventTypeTouchMove: { 476 483 m_gestureHandler->handlePinch(createVectorWithWKArray(touchPoints, 2)); -
trunk/Source/WebKit2/UIProcess/API/efl/GestureRecognizer.h
r159190 r162111 57 57 58 58 // State functions. 59 void noGesture(WK EventType, WKArrayRef);60 void singleTapGesture(WK EventType, WKArrayRef);61 void doubleTapGesture(WK EventType, WKArrayRef);62 void panGesture(WK EventType, WKArrayRef);63 void pinchGesture(WK EventType, WKArrayRef);59 void noGesture(WKTouchEventRef); 60 void singleTapGesture(WKTouchEventRef); 61 void doubleTapGesture(WKTouchEventRef); 62 void panGesture(WKTouchEventRef); 63 void pinchGesture(WKTouchEventRef); 64 64 65 65 void stopTapTimers(); … … 70 70 static const int s_squaredPanThreshold; 71 71 72 typedef void (GestureRecognizer::*RecognizerFunction)(WK EventType, WKArrayRef);72 typedef void (GestureRecognizer::*RecognizerFunction)(WKTouchEventRef); 73 73 RecognizerFunction m_recognizerFunction; 74 74
Note: See TracChangeset
for help on using the changeset viewer.