Changeset 162111 in webkit


Ignore:
Timestamp:
Jan 15, 2014 8:29:04 PM (10 years ago)
Author:
eunmi15.lee@samsung.com
Message:

[EFL][WK2] Use timestamp when event occurs for touch events.
https://bugs.webkit.org/show_bug.cgi?id=126424

Reviewed by Gyuyoung Kim.

Current time is used for touch event's timestamp instead of timestamp
when event occurs. Timestamp of touch event is used to implement flick
gesture, so it should be real value for accurate gesture processing.

  • UIProcess/API/efl/EwkView.cpp:

Function names for handling touch events are changed to distinguish
mouse events and multi events.
(EwkView::setTouchEventsEnabled):
(EwkView::feedTouchEvents):
(EwkView::handleMouseDownForTouch):
(EwkView::handleMouseUpForTouch):
(EwkView::handleMouseMoveForTouch):
(EwkView::handleMultiDownForTouch):
(EwkView::handleMultiUpForTouch):
(EwkView::handleMultiMoveForTouch):

  • UIProcess/API/efl/EwkView.h:
  • UIProcess/API/efl/GestureRecognizer.cpp:

(WebKit::GestureHandler::handlePan):
(WebKit::GestureRecognizer::processTouchEvent):
(WebKit::GestureRecognizer::noGesture):
(WebKit::GestureRecognizer::singleTapGesture):
(WebKit::GestureRecognizer::doubleTapGesture):
(WebKit::GestureRecognizer::panGesture):
(WebKit::GestureRecognizer::pinchGesture):

  • UIProcess/API/efl/GestureRecognizer.h:
Location:
trunk/Source/WebKit2
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r162107 r162111  
     12014-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
    1342014-01-15  Gavin Barraclough  <barraclough@apple.com>
    235
  • trunk/Source/WebKit2/UIProcess/API/efl/EwkView.cpp

    r161915 r162111  
    779779        // See https://bugs.webkit.org/show_bug.cgi?id=97785 for details.
    780780        Ewk_View_Smart_Data* sd = smartData();
    781         evas_object_event_callback_add(m_evasObject, EVAS_CALLBACK_MOUSE_DOWN, handleTouchDown, sd);
    782         evas_object_event_callback_add(m_evasObject, EVAS_CALLBACK_MOUSE_UP, handleTouchUp, sd);
    783         evas_object_event_callback_add(m_evasObject, EVAS_CALLBACK_MOUSE_MOVE, handleTouchMove, sd);
    784         evas_object_event_callback_add(m_evasObject, EVAS_CALLBACK_MULTI_DOWN, handleTouchDown, sd);
    785         evas_object_event_callback_add(m_evasObject, EVAS_CALLBACK_MULTI_UP, handleTouchUp, sd);
    786         evas_object_event_callback_add(m_evasObject, EVAS_CALLBACK_MULTI_MOVE, handleTouchMove, 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);
    787787    } else {
    788         evas_object_event_callback_del(m_evasObject, EVAS_CALLBACK_MOUSE_DOWN, handleTouchDown);
    789         evas_object_event_callback_del(m_evasObject, EVAS_CALLBACK_MOUSE_UP, handleTouchUp);
    790         evas_object_event_callback_del(m_evasObject, EVAS_CALLBACK_MOUSE_MOVE, handleTouchMove);
    791         evas_object_event_callback_del(m_evasObject, EVAS_CALLBACK_MULTI_DOWN, handleTouchDown);
    792         evas_object_event_callback_del(m_evasObject, EVAS_CALLBACK_MULTI_UP, handleTouchUp);
    793         evas_object_event_callback_del(m_evasObject, EVAS_CALLBACK_MULTI_MOVE, handleTouchMove);
     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);
    794794    }
    795795}
     
    13141314
    13151315#if ENABLE(TOUCH_EVENTS)
    1316 void EwkView::feedTouchEvents(Ewk_Touch_Event_Type type)
     1316void EwkView::feedTouchEvents(Ewk_Touch_Event_Type type, double timestamp)
    13171317{
    13181318    Ewk_View_Smart_Data* sd = smartData();
     
    13331333    WKRetainPtr<WKArrayRef> wkTouchPoints(AdoptWK, WKArrayCreateAdoptingValues(touchPoints.get(), length));
    13341334
    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
     1338void 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
     1343void 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
     1348void 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
     1353void 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
     1358void 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
     1363void 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);
    13511366}
    13521367#endif
  • trunk/Source/WebKit2/UIProcess/API/efl/EwkView.h

    r159863 r162111  
    240240
    241241#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);
    246249#endif
    247250    static void handleFaviconChanged(const char* pageURL, void* eventInfo);
  • trunk/Source/WebKit2/UIProcess/API/efl/GestureRecognizer.cpp

    r159401 r162111  
    5252    void handleTapAndHold(const IntPoint&);
    5353    void handlePanStarted(const IntPoint&);
    54     void handlePan(const IntPoint&);
     54    void handlePan(const IntPoint&, double timestamp);
    5555    void handlePanFinished();
    5656    void handleFlick(const IntSize&);
     
    194194}
    195195
    196 void GestureHandler::handlePan(const IntPoint& point)
     196void GestureHandler::handlePan(const IntPoint& point, double timestamp)
    197197{
    198198    m_currentPoint = point;
     
    200200
    201201    // Save current point to use to calculate offset of flick.
    202     HistoryItem item = { m_currentPoint, ecore_time_get() };
     202    HistoryItem item = { m_currentPoint, timestamp };
    203203    if (m_history.size() < m_history.capacity())
    204204        m_history.uncheckedAppend(item);
     
    296296    }
    297297
    298     (this->*m_recognizerFunction)(type, WKTouchEventGetTouchPoints(eventRef));
     298    (this->*m_recognizerFunction)(eventRef);
    299299}
    300300
     
    353353}
    354354
    355 void GestureRecognizer::noGesture(WKEventType type, WKArrayRef touchPoints)
    356 {
    357     switch (type) {
     355void GestureRecognizer::noGesture(WKTouchEventRef eventRef)
     356{
     357    switch (WKTouchEventGetType(eventRef)) {
    358358    case kWKEventTypeTouchStart:
    359359        m_gestureHandler->reset();
    360360
    361361        m_recognizerFunction = &GestureRecognizer::singleTapGesture;
    362         m_firstPressedPoint = toIntPoint(getPointAtIndex(touchPoints, 0));
     362        m_firstPressedPoint = toIntPoint(getPointAtIndex(WKTouchEventGetTouchPoints(eventRef), 0));
    363363        ASSERT(!m_tapAndHoldTimer);
    364364        m_tapAndHoldTimer = ecore_timer_add(s_tapAndHoldTimeoutInSeconds, tapAndHoldTimerCallback, this);
     
    374374}
    375375
    376 void GestureRecognizer::singleTapGesture(WKEventType type, WKArrayRef touchPoints)
    377 {
    378     switch (type) {
     376void GestureRecognizer::singleTapGesture(WKTouchEventRef eventRef)
     377{
     378    WKArrayRef touchPoints = WKTouchEventGetTouchPoints(eventRef);
     379
     380    switch (WKTouchEventGetType(eventRef)) {
    379381    case kWKEventTypeTouchStart:
    380382        stopTapTimers();
     
    410412}
    411413
    412 void GestureRecognizer::doubleTapGesture(WKEventType type, WKArrayRef touchPoints)
    413 {
    414     switch (type) {
     414void GestureRecognizer::doubleTapGesture(WKTouchEventRef eventRef)
     415{
     416    WKArrayRef touchPoints = WKTouchEventGetTouchPoints(eventRef);
     417
     418    switch (WKTouchEventGetType(eventRef)) {
    415419    case kWKEventTypeTouchStart: {
    416420        if (m_doubleTapTimer) {
     
    447451}
    448452
    449 void GestureRecognizer::panGesture(WKEventType type, WKArrayRef touchPoints)
    450 {
    451     switch (type) {
     453void GestureRecognizer::panGesture(WKTouchEventRef eventRef)
     454{
     455    WKArrayRef touchPoints = WKTouchEventGetTouchPoints(eventRef);
     456
     457    switch (WKTouchEventGetType(eventRef)) {
    452458    case kWKEventTypeTouchStart:
    453459        m_recognizerFunction = &GestureRecognizer::pinchGesture;
     
    455461        break;
    456462    case kWKEventTypeTouchMove:
    457         m_gestureHandler->handlePan(toIntPoint(getPointAtIndex(touchPoints, 0)));
     463        m_gestureHandler->handlePan(toIntPoint(getPointAtIndex(touchPoints, 0)), WKTouchEventGetTimestamp(eventRef));
    458464        break;
    459465    case kWKEventTypeTouchEnd:
     
    467473}
    468474
    469 void GestureRecognizer::pinchGesture(WKEventType type, WKArrayRef touchPoints)
    470 {
     475void GestureRecognizer::pinchGesture(WKTouchEventRef eventRef)
     476{
     477    WKArrayRef touchPoints = WKTouchEventGetTouchPoints(eventRef);
    471478    size_t numberOfTouchPoints = WKArrayGetSize(touchPoints);
    472479    ASSERT(numberOfTouchPoints >= 2);
    473480
    474     switch (type) {
     481    switch (WKTouchEventGetType(eventRef)) {
    475482    case kWKEventTypeTouchMove: {
    476483        m_gestureHandler->handlePinch(createVectorWithWKArray(touchPoints, 2));
  • trunk/Source/WebKit2/UIProcess/API/efl/GestureRecognizer.h

    r159190 r162111  
    5757
    5858    // State functions.
    59     void noGesture(WKEventType, WKArrayRef);
    60     void singleTapGesture(WKEventType, WKArrayRef);
    61     void doubleTapGesture(WKEventType, WKArrayRef);
    62     void panGesture(WKEventType, WKArrayRef);
    63     void pinchGesture(WKEventType, WKArrayRef);
     59    void noGesture(WKTouchEventRef);
     60    void singleTapGesture(WKTouchEventRef);
     61    void doubleTapGesture(WKTouchEventRef);
     62    void panGesture(WKTouchEventRef);
     63    void pinchGesture(WKTouchEventRef);
    6464
    6565    void stopTapTimers();
     
    7070    static const int s_squaredPanThreshold;
    7171
    72     typedef void (GestureRecognizer::*RecognizerFunction)(WKEventType, WKArrayRef);
     72    typedef void (GestureRecognizer::*RecognizerFunction)(WKTouchEventRef);
    7373    RecognizerFunction m_recognizerFunction;
    7474
Note: See TracChangeset for help on using the changeset viewer.