fix sidebar scroll when adding or removing panels
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user