added basic gesture system on Android

This commit is contained in:
2017-04-18 01:10:06 +02:00
parent 45cf8c9168
commit ea1bff1f10
5 changed files with 141 additions and 3 deletions

View File

@@ -1860,6 +1860,7 @@ class NodeCanvas : public Node
glm::vec2 m_pan_start;
glm::vec2 m_pan;
float m_zoom_canvas = 1.f;
float m_zoom_start;
public:
std::unique_ptr<ui::Canvas> m_canvas;
ui::Brush m_brush;
@@ -1944,6 +1945,7 @@ public:
Node::handle_event(e);
MouseEvent* me = static_cast<MouseEvent*>(e);
KeyEvent* ke = static_cast<KeyEvent*>(e);
GestureEvent* ge = static_cast<GestureEvent*>(e);
auto loc = me->m_pos - m_pos;
auto clip_space = glm::vec2(loc.x, m_size.y - loc.y - 1.f) / m_size * 2.f - 1.f;
auto fb_space = glm::inverse(m_canvas->m_mvp) * glm::vec4(clip_space, 0, 1);
@@ -1982,6 +1984,10 @@ public:
case kEventType::MouseScroll:
m_zoom_canvas += me->m_scroll_delta * 0.1f;
break;
case kEventType::MouseCancel:
m_dragging = false;
mouse_release();
break;
case kEventType::KeyDown:
if (ke->m_key == kKey::KeyE)
m_canvas->m_erase = true;
@@ -1993,6 +1999,15 @@ public:
case kEventType::KeyUp:
if (ke->m_key == kKey::KeyE)
m_canvas->m_erase = false;
break;
case kEventType::GestureStart:
m_pan_start = m_pan;
m_zoom_start = m_zoom_canvas;
break;
case kEventType::GestureMove:
m_pan = m_pan_start + ge->m_pos_delta * glm::vec2(1, -1);
//m_zoom_canvas = m_zoom_start + ge->m_distance;
break;
default:
break;
}