diff --git a/src/VulkanRenderer b/src/VulkanRenderer index 441e6ad..614ee40 160000 --- a/src/VulkanRenderer +++ b/src/VulkanRenderer @@ -1 +1 @@ -Subproject commit 441e6adc4898bcc081d806bb9b5aeeb2f4f0ab0d +Subproject commit 614ee40d853d65818fd04e41372e0ae492c8d988 diff --git a/src/editor/editor.d b/src/editor/editor.d index f6565e3..bdb504f 100644 --- a/src/editor/editor.d +++ b/src/editor/editor.d @@ -138,9 +138,6 @@ Cycle(EditorCtx* ctx, Inputs* inputs) g_input_mode = ctx.state == ES.InputMode; - // UI Functions After This Point - //BeginBuild(inputs); - BeginUI(ctx, inputs); for(auto p = ctx.base_panel; !Nil(p); p = Recurse(p)) diff --git a/src/editor/ui.d b/src/editor/ui.d index 8d426fb..2cb2f75 100644 --- a/src/editor/ui.d +++ b/src/editor/ui.d @@ -10,6 +10,7 @@ import std.stdio; import std.math.traits : isNaN; import std.math.rounding : ceil; import std.math.exponential : pow; +import std.math.remainder : fmod; import std.format : sformat; import core.stdc.string : memset; import core.stdc.math : fabsf; @@ -427,11 +428,11 @@ EaseOutQuint(f32 x) void SetScrollOffset(UIPanel* panel) { - const f32 scroll_speed = 0.2; + f32 scroll_speed = 0.8 * (g_delta * 30.0); 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 height = f32(panel.vis_lines)*TEXT_SIZE; @@ -439,11 +440,11 @@ SetScrollOffset(UIPanel* panel) 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) + if(panel.scroll_offset != 0.0 && c_start < top_boundary) { 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); } @@ -451,8 +452,10 @@ SetScrollOffset(UIPanel* panel) if(panel.scroll_offset != panel.scroll_target) { 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) { + Logf("end"); panel.scroll_offset = panel.scroll_target; } } @@ -507,6 +510,8 @@ Panel(UIPanel* panel) Vec2 inner = InnerSize(panel); + SetScrollOffset(panel); + 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.vis_lines = panel.end_ln - panel.start_ln; @@ -518,15 +523,19 @@ Panel(UIPanel* panel) f32 code_view_width = inner.x-lc_w; StartLineBuffer(&panel.ed.buf, code_view_width); - - SetScrollOffset(panel); U64Vec2 pos = VecPos(&ed.buf); 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 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; for(auto buf = GetLine(&ed.buf, i); !CheckNil(g_NIL_LINE_BUF, buf) && i < panel.end_ln; i += 1, buf = GetLine(&ed.buf, i))