fix sidebar scroll when adding or removing panels

This commit is contained in:
2017-08-12 18:45:49 +01:00
parent 2711d4e9b0
commit 6d3c9380b2
4 changed files with 53 additions and 54 deletions

View File

@@ -8,6 +8,15 @@ Node* NodeScroll::clone_instantiate() const
return new NodeScroll;
}
void NodeScroll::fix_scroll()
{
auto pad = GetPadding();
glm::vec2 padoff = { pad.y + pad.w, pad.x + pad.z };
auto rect = get_children_rect();
m_offset = glm::clamp(m_offset, -rect.zw() + m_clip_uncut.zw() - padoff, { 0, 0 });
m_pos_offset_childred = m_offset;
}
kEventResult NodeScroll::handle_event(Event* e)
{
NodeBorder::handle_event(e);
@@ -25,12 +34,8 @@ kEventResult NodeScroll::handle_event(Event* e)
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;
fix_scroll();
}
break;
case kEventType::MouseUpL:
@@ -38,28 +43,16 @@ kEventResult NodeScroll::handle_event(Event* e)
m_dragging = false;
break;
case kEventType::MouseScroll:
{
auto pad = GetPadding();
glm::vec2 padoff = { pad.y + pad.w, pad.x + pad.z };
auto rect = get_children_rect();
m_offset += me->m_scroll_delta * 50;
m_offset = glm::clamp(m_offset, -rect.zw() + m_clip_uncut.zw() - padoff, { 0, 0 });
m_pos_offset_childred = m_offset;
}
m_offset += me->m_scroll_delta * 50;
fix_scroll();
break;
case kEventType::GestureStart:
m_offset_start = m_offset;
mouse_capture();
break;
case kEventType::GestureMove:
{
auto pad = GetPadding();
glm::vec2 padoff = { pad.y + pad.w, pad.x + pad.z };
auto rect = get_children_rect();
m_offset = m_offset_start + ge->m_pos_delta * m_mask;
m_offset = glm::clamp(m_offset, -rect.zw() + m_clip_uncut.zw() - padoff, { 0, 0 });
m_pos_offset_childred = m_offset;
}
m_offset = m_offset_start + ge->m_pos_delta * m_mask;
fix_scroll();
break;
case kEventType::GestureEnd:
mouse_release();