fix animated scrolling
This commit is contained in:
parent
a1edff2726
commit
4005991412
@ -225,7 +225,6 @@ CreatePanel(EditorCtx* ctx, SizeType size_type = ST.Percentage)
|
||||
p.pct = 1.0;
|
||||
p.scroll_offset = 0.0;
|
||||
p.scroll_target = 0.0;
|
||||
p.scroll_begin = -1.0;
|
||||
|
||||
(cast(char[])p.id).sformat("##%08s", ctx.panel_id);
|
||||
p.parent = p.first = p.last = p.next = p.prev = g_UI_NIL_PANEL;
|
||||
|
||||
@ -300,7 +300,6 @@ struct UIPanel
|
||||
i64 vis_lines;
|
||||
i64 prev_start_ln;
|
||||
f32 scroll_offset;
|
||||
f32 scroll_begin;
|
||||
f32 scroll_target;
|
||||
}
|
||||
|
||||
@ -428,47 +427,33 @@ EaseOutQuint(f32 x)
|
||||
void
|
||||
SetScrollOffset(UIPanel* panel)
|
||||
{
|
||||
const f32 scroll_speed = 0.2;
|
||||
|
||||
U64Vec2 pos = VecPos(&panel.ed.buf);
|
||||
|
||||
if(pos.y > 0)
|
||||
f32 c_start = TEXT_SIZE * pos.y;
|
||||
f32 c_end = c_start + TEXT_SIZE;
|
||||
f32 height = f32(panel.vis_lines)*TEXT_SIZE;
|
||||
|
||||
f32 boundary_buf = TEXT_SIZE*4.0;
|
||||
f32 top_boundary = panel.scroll_offset+boundary_buf;
|
||||
f32 bot_boundary = panel.scroll_offset+height-boundary_buf;
|
||||
|
||||
if(panel.scroll_offset != 0.0 && c_start <= top_boundary)
|
||||
{
|
||||
Logf("y %s start %s end %s prev %s", pos.y, panel.start_ln, panel.end_ln, panel.prev_start_ln);
|
||||
panel.scroll_target = Max(0.0, c_start-boundary_buf);
|
||||
}
|
||||
else if(c_end >= bot_boundary)
|
||||
{
|
||||
panel.scroll_target = panel.scroll_offset + (c_end-bot_boundary);
|
||||
}
|
||||
|
||||
Logf("pos %s start %s end %s", pos.y, panel.start_ln, panel.end_ln);
|
||||
if((pos.y < panel.start_ln || pos.y > panel.end_ln))
|
||||
if(panel.scroll_offset != panel.scroll_target)
|
||||
{
|
||||
Logf("1");
|
||||
f32 off = f32(panel.start_ln - panel.prev_start_ln)*TEXT_SIZE;
|
||||
panel.scroll_target += off;
|
||||
panel.prev_start_ln = panel.start_ln;
|
||||
|
||||
if(panel.scroll_begin == -1.0)
|
||||
{
|
||||
panel.scroll_begin = panel.scroll_offset;
|
||||
}
|
||||
}
|
||||
|
||||
if(panel.scroll_begin != -1.0)
|
||||
{
|
||||
f32 min, max;
|
||||
if(panel.scroll_offset > panel.scroll_target)
|
||||
{
|
||||
min = panel.scroll_target;
|
||||
max = panel.scroll_offset;
|
||||
}
|
||||
else
|
||||
{
|
||||
min = panel.scroll_offset;
|
||||
max = panel.scroll_target;
|
||||
}
|
||||
|
||||
panel.scroll_offset = EaseOutQuint(Lerp(min, max, panel.scroll_offset)) * g_delta;
|
||||
|
||||
if(panel.scroll_offset - panel.scroll_target < 0.0009)
|
||||
panel.scroll_offset += (scroll_speed * (panel.scroll_target - panel.scroll_offset)) * (g_delta * 60.0);
|
||||
if(fabsf(panel.scroll_offset-panel.scroll_target) < 0.0009)
|
||||
{
|
||||
panel.scroll_offset = panel.scroll_target;
|
||||
panel.scroll_begin = -1.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user