split app.cpp into multiple files, add NodeScroll and use it to scroll the side panels, some fixes to the events system

This commit is contained in:
2017-05-14 21:48:25 +01:00
parent 366f233aa0
commit 577a4e4db7
16 changed files with 1028 additions and 838 deletions

50
engine/node_scroll.cpp Normal file
View File

@@ -0,0 +1,50 @@
#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<MouseEvent*>(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;
}