fix incorrect order on getting the new start line to draw
This commit is contained in:
parent
4005991412
commit
5f594a2de1
@ -1 +1 @@
|
|||||||
Subproject commit 441e6adc4898bcc081d806bb9b5aeeb2f4f0ab0d
|
Subproject commit 614ee40d853d65818fd04e41372e0ae492c8d988
|
||||||
@ -138,9 +138,6 @@ Cycle(EditorCtx* ctx, Inputs* inputs)
|
|||||||
|
|
||||||
g_input_mode = ctx.state == ES.InputMode;
|
g_input_mode = ctx.state == ES.InputMode;
|
||||||
|
|
||||||
// UI Functions After This Point
|
|
||||||
//BeginBuild(inputs);
|
|
||||||
|
|
||||||
BeginUI(ctx, inputs);
|
BeginUI(ctx, inputs);
|
||||||
|
|
||||||
for(auto p = ctx.base_panel; !Nil(p); p = Recurse(p))
|
for(auto p = ctx.base_panel; !Nil(p); p = Recurse(p))
|
||||||
|
|||||||
@ -10,6 +10,7 @@ import std.stdio;
|
|||||||
import std.math.traits : isNaN;
|
import std.math.traits : isNaN;
|
||||||
import std.math.rounding : ceil;
|
import std.math.rounding : ceil;
|
||||||
import std.math.exponential : pow;
|
import std.math.exponential : pow;
|
||||||
|
import std.math.remainder : fmod;
|
||||||
import std.format : sformat;
|
import std.format : sformat;
|
||||||
import core.stdc.string : memset;
|
import core.stdc.string : memset;
|
||||||
import core.stdc.math : fabsf;
|
import core.stdc.math : fabsf;
|
||||||
@ -427,11 +428,11 @@ EaseOutQuint(f32 x)
|
|||||||
void
|
void
|
||||||
SetScrollOffset(UIPanel* panel)
|
SetScrollOffset(UIPanel* panel)
|
||||||
{
|
{
|
||||||
const f32 scroll_speed = 0.2;
|
f32 scroll_speed = 0.8 * (g_delta * 30.0);
|
||||||
|
|
||||||
U64Vec2 pos = VecPos(&panel.ed.buf);
|
U64Vec2 pos = VecPos(&panel.ed.buf);
|
||||||
|
|
||||||
f32 c_start = TEXT_SIZE * pos.y;
|
f32 c_start = TEXT_SIZE * pos.y+1;
|
||||||
f32 c_end = c_start + TEXT_SIZE;
|
f32 c_end = c_start + TEXT_SIZE;
|
||||||
f32 height = f32(panel.vis_lines)*TEXT_SIZE;
|
f32 height = f32(panel.vis_lines)*TEXT_SIZE;
|
||||||
|
|
||||||
@ -439,11 +440,11 @@ SetScrollOffset(UIPanel* panel)
|
|||||||
f32 top_boundary = panel.scroll_offset+boundary_buf;
|
f32 top_boundary = panel.scroll_offset+boundary_buf;
|
||||||
f32 bot_boundary = panel.scroll_offset+height-boundary_buf;
|
f32 bot_boundary = panel.scroll_offset+height-boundary_buf;
|
||||||
|
|
||||||
if(panel.scroll_offset != 0.0 && c_start <= top_boundary)
|
if(panel.scroll_offset != 0.0 && c_start < top_boundary)
|
||||||
{
|
{
|
||||||
panel.scroll_target = Max(0.0, c_start-boundary_buf);
|
panel.scroll_target = Max(0.0, c_start-boundary_buf);
|
||||||
}
|
}
|
||||||
else if(c_end >= bot_boundary)
|
else if(c_end > bot_boundary)
|
||||||
{
|
{
|
||||||
panel.scroll_target = panel.scroll_offset + (c_end-bot_boundary);
|
panel.scroll_target = panel.scroll_offset + (c_end-bot_boundary);
|
||||||
}
|
}
|
||||||
@ -451,8 +452,10 @@ SetScrollOffset(UIPanel* panel)
|
|||||||
if(panel.scroll_offset != panel.scroll_target)
|
if(panel.scroll_offset != panel.scroll_target)
|
||||||
{
|
{
|
||||||
panel.scroll_offset += (scroll_speed * (panel.scroll_target - panel.scroll_offset)) * (g_delta * 60.0);
|
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)
|
if(fabsf(panel.scroll_offset-panel.scroll_target) < 0.0009)
|
||||||
{
|
{
|
||||||
|
Logf("end");
|
||||||
panel.scroll_offset = panel.scroll_target;
|
panel.scroll_offset = panel.scroll_target;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -507,6 +510,8 @@ Panel(UIPanel* panel)
|
|||||||
|
|
||||||
Vec2 inner = InnerSize(panel);
|
Vec2 inner = InnerSize(panel);
|
||||||
|
|
||||||
|
SetScrollOffset(panel);
|
||||||
|
|
||||||
panel.start_ln = cast(u64)(floor(panel.scroll_offset/TEXT_SIZE));
|
panel.start_ln = cast(u64)(floor(panel.scroll_offset/TEXT_SIZE));
|
||||||
panel.end_ln = panel.start_ln + cast(u64)(ceil(inner.y/TEXT_SIZE));
|
panel.end_ln = panel.start_ln + cast(u64)(ceil(inner.y/TEXT_SIZE));
|
||||||
panel.vis_lines = panel.end_ln - panel.start_ln;
|
panel.vis_lines = panel.end_ln - panel.start_ln;
|
||||||
@ -519,14 +524,18 @@ Panel(UIPanel* panel)
|
|||||||
|
|
||||||
StartLineBuffer(&panel.ed.buf, code_view_width);
|
StartLineBuffer(&panel.ed.buf, code_view_width);
|
||||||
|
|
||||||
SetScrollOffset(panel);
|
|
||||||
|
|
||||||
U64Vec2 pos = VecPos(&ed.buf);
|
U64Vec2 pos = VecPos(&ed.buf);
|
||||||
|
|
||||||
DrawPanel(panel, lc_w, focused);
|
DrawPanel(panel, lc_w, focused);
|
||||||
|
|
||||||
|
f32 y_rem = fmod(panel.scroll_offset, TEXT_SIZE);
|
||||||
|
if(y_rem != 0.0)
|
||||||
|
{
|
||||||
|
Logf("rem %f ln %s", y_rem, panel.start_ln);
|
||||||
|
}
|
||||||
|
|
||||||
f32 x = panel.rect.x0;
|
f32 x = panel.rect.x0;
|
||||||
f32 y = panel.rect.y0 + TEXT_SIZE - (panel.scroll_offset % TEXT_SIZE);
|
f32 y = panel.rect.y0 + TEXT_SIZE - fmod(panel.scroll_offset, TEXT_SIZE);
|
||||||
|
|
||||||
u64 i = panel.start_ln;
|
u64 i = panel.start_ln;
|
||||||
for(auto buf = GetLine(&ed.buf, i); !CheckNil(g_NIL_LINE_BUF, buf) && i < panel.end_ln; i += 1, buf = GetLine(&ed.buf, i))
|
for(auto buf = GetLine(&ed.buf, i); !CheckNil(g_NIL_LINE_BUF, buf) && i < panel.end_ln; i += 1, buf = GetLine(&ed.buf, i))
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user