handle WM_MOUSEWHEEL and WM_POINTERUPDATE for the Windows Ink stylus driver

This commit is contained in:
2017-04-08 22:51:59 +01:00
parent bb7e94d06b
commit 8d35d1f140
6 changed files with 57 additions and 40 deletions

View File

@@ -105,6 +105,7 @@ enum class kEventType : uint8_t
MouseUpR,
MouseEnter,
MouseLeave,
MouseScroll,
KeyDown,
KeyUp,
KeyChar,
@@ -122,6 +123,7 @@ class MouseEvent : public Event
public:
MouseEvent() { m_cat = kEventCategory::MouseEvent; }
glm::vec2 m_pos;
float m_scroll_delta;
};
class KeyEvent : public Event
@@ -1873,6 +1875,7 @@ class NodeCanvas : public Node
bool m_draggingR = false;
glm::vec2 m_dragR_start;
glm::vec2 m_pan_start;
glm::vec2 m_pan;
public:
std::unique_ptr<ui::Canvas> m_canvas;
ui::Brush m_brush;
@@ -1886,9 +1889,9 @@ public:
m_canvas->layer_add("asd");
m_canvas->clear();
m_sampler.create();
SetPositioning(YGPositionTypeAbsolute);
SetPosition(100, 100);
SetSize({ 512, 512 });
// SetPositioning(YGPositionTypeAbsolute);
// SetPosition(100, 100);
// SetSize({ 512, 512 });
}
virtual void draw() override
{
@@ -1904,14 +1907,14 @@ public:
glClearColor(0, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);
float zoom = root()->m_zoom;
auto box = m_clip_uncut * zoom;
auto box = m_clip * zoom;
glm::ivec4 c = (glm::ivec4)glm::vec4(box.x, (int)(vp[3] - box.y - box.w), box.z, box.w);
glViewport(c.x, c.y, c.z, c.w);
glm::vec2 sz = { m_canvas->m_width, m_canvas->m_height };
auto mvp = glm::ortho(0.f, box.z, 0.f, box.w, -1.f, 1.f) *
//glm::translate(glm::vec3((m_size - sz) * 0.5f, 0)) * // center
glm::translate(glm::vec3(0)) * // corner
glm::translate(glm::vec3(m_pan, 0)) * // corner
glm::scale(glm::vec3(sz * zoom, 1)) *
glm::translate(glm::vec3(.5f, .5f, 0.f)); // pivot
@@ -1946,11 +1949,11 @@ public:
}
virtual void handle_resize(glm::vec2 old_size, glm::vec2 new_size) override
{
if (new_size.x > m_canvas->m_width)
{
m_canvas->resize((int)new_size.x, (int)new_size.y);
m_canvas->clear();
}
// if (new_size.x > m_canvas->m_width)
// {
// m_canvas->resize((int)new_size.x, (int)new_size.y);
// m_canvas->clear();
// }
}
virtual kEventResult handle_event(Event* e) override
{
@@ -1975,7 +1978,7 @@ public:
case kEventType::MouseDownR:
m_draggingR = true;
m_dragR_start = me->m_pos;
m_pan_start = GetPosition();
m_pan_start = m_pan;
mouse_capture();
break;
case kEventType::MouseUpR:
@@ -1986,7 +1989,7 @@ public:
if (m_dragging)
m_canvas->stroke_update(cur, 1.f);
if (m_draggingR)
SetPosition(m_pan_start + me->m_pos - m_dragR_start);
m_pan = m_pan_start + (me->m_pos - m_dragR_start) * glm::vec2(1, -1);
break;
default:
break;