From: chanywa Date: Tue, 27 Sep 2016 04:19:39 +0000 (+0900) Subject: Adjust panning gesture X-Git-Tag: submit/tizen/20160928.024352^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=541ae3bd280dc9c24b9be31dbfc72f2aa65b8f57;p=platform%2Fcore%2Fapi%2Fmaps-service.git Adjust panning gesture Change-Id: I80885695d5d871b72a3104c8b2ed2d50a7304a0d --- diff --git a/capi-maps-service.changes b/capi-maps-service.changes index 1b98598..30cdc4a 100644 --- a/capi-maps-service.changes +++ b/capi-maps-service.changes @@ -1,3 +1,8 @@ +[Version] capi-maps-service_0.6.7 +[Date] 27 Sep 2016 +[Title] adjust panning gesture +[Developer] Seechan Kim + [Version] capi-maps-service_0.6.6 [Date] 27 Sep 2016 [Title] fixed click area, and resizing the marker which image file changed diff --git a/packaging/capi-maps-service.spec b/packaging/capi-maps-service.spec index e8b57ef..b756783 100644 --- a/packaging/capi-maps-service.spec +++ b/packaging/capi-maps-service.spec @@ -1,6 +1,6 @@ Name: capi-maps-service Summary: Tizen Maps Service API -Version: 0.6.6 +Version: 0.6.7 Release: 1 Group: Location/API License: Apache-2.0 diff --git a/src/view/inertial_gesture.cpp b/src/view/inertial_gesture.cpp index f5f9ba4..88ad7a1 100644 --- a/src/view/inertial_gesture.cpp +++ b/src/view/inertial_gesture.cpp @@ -32,6 +32,7 @@ view::inertial_gesture::inertial_gesture(maps_view_h view) : gesture_detector(view) , _d(NULL) , transiting(false) + , transiting_trajectory(false) { reset(); @@ -53,6 +54,7 @@ view::inertial_gesture::inertial_gesture(const inertial_gesture &src) : gesture_detector(NULL) , _d(NULL) , transiting(false) + , transiting_trajectory(false) { } @@ -90,6 +92,7 @@ void view::inertial_gesture::tap(int finger_no, const touch_point &tp) _prev[finger_no] = tp; _cur_x[finger_no] = tp._x; _cur_y[finger_no] = tp._y; + _inertial_start[finger_no] = tp; if (_d) _d->tap(finger_no, tp); @@ -100,12 +103,19 @@ void view::inertial_gesture::move(int finger_no, const touch_point &tp) MAPS_LOGI("TRANSITION finger %d move", finger_no); _maps_view_halt_inertial_camera(_view); + update_inertial_start_point(finger_no); _prev[finger_no] = _last[finger_no]; _last[finger_no] = tp; _cur_x[finger_no] = tp._x; _cur_y[finger_no] = tp._y; + /* check if moved enough as much as effective length */ + int trajectory = get_trajectory_effective_length(_down[finger_no], tp); + MAPS_LOGD("trajectory=%d", trajectory); + if (trajectory >= __CLICK_AREA) + transiting_trajectory = true; + if (_d) _d->move(finger_no, tp); } @@ -117,20 +127,27 @@ void view::inertial_gesture::up(int finger_no, const touch_point &tp) _last[finger_no] = tp; - const int delta_x = _last[finger_no]._x - _prev[finger_no]._x; - const int delta_y = _last[finger_no]._y - _prev[finger_no]._y; - unsigned int dt = _last[finger_no]._timestamp - _prev[finger_no]._timestamp; + const int delta_x = _last[finger_no]._x - _inertial_start[finger_no]._x; + const int delta_y = _last[finger_no]._y - _inertial_start[finger_no]._y; + unsigned int dt = _last[finger_no]._timestamp - _inertial_start[finger_no]._timestamp; - int trajectory = get_trajectory_effective_length(_down[finger_no], tp); - MAPS_LOGD("trajectory=%d", trajectory); - if (trajectory <= __CLICK_AREA) dt = 0; + /* check if moved enough as much as effective length */ + int trajectory_total = get_trajectory_effective_length(_down[finger_no], tp); + int trajectory_last = get_trajectory_effective_length(_prev[finger_no], tp); + MAPS_LOGD("trajectory total=%d, local=%d dx=%d, dy=%d, dt=%d", + trajectory_total, trajectory_last, delta_x, delta_y, dt); - if (dt == 0) { + if (trajectory_total >= __CLICK_AREA) + transiting_trajectory = true; + if (trajectory_last <= __CLICK_AREA / 3.) + transiting_trajectory = false; + + if (dt == 0 || !transiting_trajectory) { _derivative_x[finger_no] = .0; _derivative_y[finger_no] = .0; } else { - _derivative_x[finger_no] = 40. * (delta_x) / dt; - _derivative_y[finger_no] = 40. * (delta_y) / dt; + _derivative_x[finger_no] = 10. * (delta_x) / dt; + _derivative_y[finger_no] = 10. * (delta_y) / dt; } _dt[finger_no] = MIN(1.*dt, 1.); @@ -152,6 +169,17 @@ bool view::inertial_gesture::next_transition_step() transiting_part[i] = false; +#if 1 + if ((ABS(_derivative_x[i]) > __ACCURACY) || (ABS(_derivative_y[i]) > __ACCURACY)) { + _cur_x[i] = get_next_point(_cur_x[i], _derivative_x[i], _dt[i]); + _derivative_x[i] = get_next_derivative(_derivative_x[i], _dt[i]); + transiting_part[i] |= ABS(_derivative_x[i]) > __ACCURACY; + + _cur_y[i] = get_next_point(_cur_y[i], _derivative_y[i], _dt[i]); + _derivative_y[i] = get_next_derivative(_derivative_y[i], _dt[i]); + transiting_part[i] |= ABS(_derivative_y[i]) > __ACCURACY; + } +#else if (ABS(_derivative_x[i]) > __ACCURACY) { _cur_x[i] = get_next_point(_cur_x[i], _derivative_x[i], _dt[i]); _derivative_x[i] = get_next_derivative(_derivative_x[i], _dt[i]); @@ -163,6 +191,7 @@ bool view::inertial_gesture::next_transition_step() _derivative_y[i] = get_next_derivative(_derivative_y[i], _dt[i]); transiting_part[i] |= ABS(_derivative_y[i]) > __ACCURACY; } +#endif unsigned int timestamp = _last[i]._timestamp + get_transition_time(i); @@ -239,8 +268,22 @@ void view::inertial_gesture::on_idle(void *data) void view::inertial_gesture::reset() { transiting = false; + transiting_trajectory = false; for (int i = 0; i < MAX_FINGERS; i ++) { transiting_part[i] = false; transiting_start[i] = 0; } } + +void view::inertial_gesture::update_inertial_start_point(int finger_no) +{ + const int margin = 3; + if (((_last[finger_no]._x > _prev[finger_no]._x + margin) && (_last[finger_no]._x < _inertial_start[finger_no]._x - margin)) || + ((_last[finger_no]._x < _prev[finger_no]._x - margin) && (_last[finger_no]._x > _inertial_start[finger_no]._x + margin)) || + ((_last[finger_no]._y > _prev[finger_no]._y + margin) && (_last[finger_no]._y < _inertial_start[finger_no]._y - margin)) || + ((_last[finger_no]._y < _prev[finger_no]._y - margin) && (_last[finger_no]._y > _inertial_start[finger_no]._y + margin))) { + _inertial_start[finger_no] = _last[finger_no]; + MAPS_LOGD("reset inertial start (%d,%d)", _inertial_start[finger_no]._x, _inertial_start[finger_no]._y); + } +} + diff --git a/src/view/inertial_gesture.h b/src/view/inertial_gesture.h index 289cba7..3b2f19e 100644 --- a/src/view/inertial_gesture.h +++ b/src/view/inertial_gesture.h @@ -27,12 +27,14 @@ namespace view touch_point _down[MAX_FINGERS]; touch_point _last[MAX_FINGERS]; touch_point _prev[MAX_FINGERS]; + touch_point _inertial_start[MAX_FINGERS]; double _cur_x[MAX_FINGERS]; double _cur_y[MAX_FINGERS]; double _derivative_x[MAX_FINGERS]; double _derivative_y[MAX_FINGERS]; bool transiting; bool transiting_part[MAX_FINGERS]; + bool transiting_trajectory; unsigned transiting_start[MAX_FINGERS]; double _dt[MAX_FINGERS]; private: @@ -62,6 +64,7 @@ namespace view static unsigned int get_cur_time(); unsigned int get_transition_time(int finger_no) const; void reset(); + void update_inertial_start_point(int finger_no); }; };