fix android gestures pinch and pan, supports only two fingers
This commit is contained in:
@@ -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");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user