fix android gestures pinch and pan, supports only two fingers

This commit is contained in:
2017-04-24 11:32:08 +01:00
parent d558bc1e04
commit 5ac666f911
2 changed files with 17 additions and 4 deletions

View File

@@ -404,6 +404,8 @@ static int32_t engine_handle_input(struct android_app* app, AInputEvent* event)
switch (action) { switch (action) {
case AMOTION_EVENT_ACTION_DOWN: case AMOTION_EVENT_ACTION_DOWN:
{ {
float y = AMotionEvent_getY(event, 0);
float x = AMotionEvent_getX(event, 0);
p0.id = AMotionEvent_getPointerId(event, 0); p0.id = AMotionEvent_getPointerId(event, 0);
p0.pos = {x, y}; p0.pos = {x, y};
p0.idx = index; p0.idx = index;
@@ -417,6 +419,8 @@ static int32_t engine_handle_input(struct android_app* app, AInputEvent* event)
LOG("pointer down index %d", index); LOG("pointer down index %d", index);
if (count == 2) if (count == 2)
{ {
float y = AMotionEvent_getY(event, 1);
float x = AMotionEvent_getX(event, 1);
p1.id = AMotionEvent_getPointerId(event, 1); p1.id = AMotionEvent_getPointerId(event, 1);
p1.idx = index; p1.idx = index;
p1.pos = {x, y}; p1.pos = {x, y};
@@ -429,6 +433,8 @@ static int32_t engine_handle_input(struct android_app* app, AInputEvent* event)
} }
case AMOTION_EVENT_ACTION_UP: case AMOTION_EVENT_ACTION_UP:
{ {
float y = AMotionEvent_getY(event, 0);
float x = AMotionEvent_getX(event, 0);
tracked = 0; tracked = 0;
p0.id = -1; p0.id = -1;
p1.id = -1; p1.id = -1;
@@ -445,12 +451,18 @@ static int32_t engine_handle_input(struct android_app* app, AInputEvent* event)
} }
return 1; return 1;
case AMOTION_EVENT_ACTION_HOVER_MOVE: // pen move before touching case AMOTION_EVENT_ACTION_HOVER_MOVE: // pen move before touching
{
float y = AMotionEvent_getY(event, 0);
float x = AMotionEvent_getX(event, 0);
App::I.mouse_move(x, y); App::I.mouse_move(x, y);
LOG("single move"); LOG("single move");
return 1; return 1;
}
case AMOTION_EVENT_ACTION_MOVE: case AMOTION_EVENT_ACTION_MOVE:
if (count == 1) if (count == 1)
{ {
float y = AMotionEvent_getY(event, 0);
float x = AMotionEvent_getX(event, 0);
App::I.mouse_move(x, y); App::I.mouse_move(x, y);
LOG("single move"); LOG("single move");
} }

View File

@@ -1898,7 +1898,8 @@ public:
auto plane_mvp = glm::ortho(0.f, box.z, 0.f, box.w, -1.f, 1.f) * auto plane_mvp = glm::ortho(0.f, box.z, 0.f, box.w, -1.f, 1.f) *
glm::translate(glm::vec3(m_pan + m_size * 0.5f * zoom, 0)) * // pan glm::translate(glm::vec3(m_pan + m_size * 0.5f * zoom, 0)) * // pan
glm::scale(glm::vec3(sz * zoom * m_zoom_canvas, 1)); glm::scale(glm::vec3(zoom * m_zoom_canvas, zoom * m_zoom_canvas, 1)) *
glm::scale(glm::vec3(sz, 1));
m_sampler.bind(0); m_sampler.bind(0);
ui::ShaderManager::use(kShader::TextureAlpha); ui::ShaderManager::use(kShader::TextureAlpha);
@@ -2006,7 +2007,7 @@ public:
break; break;
case kEventType::GestureMove: case kEventType::GestureMove:
m_pan = m_pan_start + ge->m_pos_delta * glm::vec2(1, -1); m_pan = m_pan_start + ge->m_pos_delta * glm::vec2(1, -1);
//m_zoom_canvas = m_zoom_start + ge->m_distance; m_zoom_canvas = m_zoom_start + ge->m_distance_delta * .001f;
break; break;
default: default:
break; break;