#include "pch.h" #include "log.h" #include "node_scroll.h" #include "event.h" Node* NodeScroll::clone_instantiate() const { return new NodeScroll; } kEventResult NodeScroll::handle_event(Event* e) { NodeBorder::handle_event(e); auto me = static_cast(e); auto loc = (me->m_pos - m_pos) * root()->m_zoom; switch (e->m_type) { case kEventType::MouseDownL: m_dragging = true; m_drag_start = me->m_pos; m_offset_start = m_offset; mouse_capture(); break; case kEventType::MouseMove: if (m_dragging) { auto pad = GetPadding(); glm::vec2 padoff = { pad.y + pad.w, pad.x + pad.z }; auto rect = get_children_rect(); m_offset = m_offset_start + (me->m_pos - m_drag_start) * m_mask; m_offset = glm::clamp(m_offset, -rect.zw() + m_clip_uncut.zw() - padoff, { 0, 0 }); m_pos_offset_childred = m_offset; } break; case kEventType::MouseUpL: mouse_release(); m_dragging = false; break; // case kEventType::MouseScroll: // break; case kEventType::MouseCancel: mouse_release(); m_dragging = false; break; default: return kEventResult::Available; break; } return kEventResult::Consumed; }