added basic gesture system on Android
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user