diff --git a/assets/gui.frag.spv b/assets/gui.frag.spv index fc0c95d..670e1a2 100644 Binary files a/assets/gui.frag.spv and b/assets/gui.frag.spv differ diff --git a/assets/gui.vert.spv b/assets/gui.vert.spv index 72d0979..9928c20 100644 Binary files a/assets/gui.vert.spv and b/assets/gui.vert.spv differ diff --git a/build.sh b/build.sh index 2878705..ad641c1 100755 --- a/build.sh +++ b/build.sh @@ -4,7 +4,7 @@ set -eu # SHADERS shader_compiler="glslc" -shader_flags="-std=460 -O --target-env=vulkan1.2" +shader_flags="-std=460 -O --target-env=vulkan1.2 -g" shader_out="-oassets/" mkdir -p build diff --git a/src/editor/buffer.d b/src/editor/buffer.d index 8f73444..bb61d47 100644 --- a/src/editor/buffer.d +++ b/src/editor/buffer.d @@ -405,6 +405,7 @@ LineLength(FlatBuffer* fb, u64 line) void GetLines(FlatBuffer* fb, LineBuffers* linebufs, u64 length) { + fb.rows = length; GetLines(fb, linebufs, fb.offset, length); } @@ -875,13 +876,16 @@ UpdateOffset(FlatBuffer* fb) i64 screen_pos = CurrentLine(fb) - offset; i64 start = 0; i64 end = rows-2; + Logf("p %s start %s end %s", screen_pos, start, end); if(offset > 0 && screen_pos < start) { offset += screen_pos; + Logf("scroll up %s", offset); } else if(screen_pos > end) { offset += screen_pos - end; + Logf("scroll down %s", offset); } } diff --git a/src/editor/ui.d b/src/editor/ui.d index 41b366c..fece7a3 100644 --- a/src/editor/ui.d +++ b/src/editor/ui.d @@ -363,6 +363,21 @@ DrawChar(FontAtlas* atlas, u8 ch, f32* x_pos, f32 y, Vec4 col = Vec4(1.0)) } } +bool +PrintInputs() +{ + bool result; + UICtx* ctx = GetCtx(); + + for(auto n = ctx.inputs.list.first; n != null; n = n.next) + { + Logf("key %s %s %s", n.value.key, n.value.x, n.value.y); + result = true; + } + + return result; +} + void Panel(UIPanel* panel) { @@ -381,14 +396,20 @@ Panel(UIPanel* panel) parent.axis == A2D.Y ? 10 : 0 ); - Vec2 p0 = panel.rect.vec0-adj; - Vec2 p1 = panel.rect.vec1+adj; + Vec2 p0 = panel.rect.vec0+adj; + Vec2 p1 = panel.rect.vec1-adj; if(!Nil(prev)) with(panel) { - if(Dragged(item, p0, p1) && item.dragged.v[pax] != 0.0) + Vec2 d0 = rect.vec0-adj; + Vec2 d1 = Vec2( + pax == A2D.X ? rect.vec0.x+adj.x : rect.vec1.x, + pax == A2D.Y ? rect.vec0.y+adj.y : rect.vec1.y + ); + + if(Dragged(item, d0, d1) && item.dragged.v[pax] != 0.0) { - f32 mov_pct = Remap(item.dragged.v[pax], 0.0, size.v[pax], 0.0, 1.0); + f32 mov_pct = Remap(item.dragged.v[pax], 0.0, panel.parent.size.v[pax], 0.0, 1.0); if(CheckPanelBounds(pct + mov_pct) && CheckPanelBounds(panel.prev.pct - mov_pct)) { pct += mov_pct; @@ -404,8 +425,6 @@ Panel(UIPanel* panel) SetFocusedPanel(panel); } - DrawBorderedRect(panel.rect.vec0, panel.size, 2.0, 2.0, 0.1, DEFAULT_COL, focused ? HL_BORDER_COL : DEFAULT_BORDER_COL); - i64 rows = cast(i64)ceil(panel.size.y/TEXT_SIZE); GetLines(&ed.buf, &ed.linebufs, rows); @@ -418,7 +437,11 @@ Panel(UIPanel* panel) f32 lcw = CalcTextWidth(end_line_text); f32 padding = 4.0; - DrawRect(panel.rect.vec0, panel.rect.vec1+Vec2(lcw+padding*2, panel.size.y), 0.0, 0.0, focused ? LC_HL_COLOR : LC_COLOR); + f32 border = 2.0, radius = 2.0, softness = 0.1; + + DrawRect(panel.rect.vec0, panel.size, radius, border, DEFAULT_COL); + DrawRect(panel.rect.vec0, Vec2(lcw+padding*2, panel.size.y), 0.0, 0.0, focused ? LC_HL_COLOR : LC_COLOR); + DrawBorder(panel.rect.vec0, panel.size, border, radius, softness, focused ? HL_BORDER_COL : DEFAULT_BORDER_COL); f32 x = panel.rect.x0; f32 y = panel.rect.y0 + TEXT_SIZE; @@ -441,7 +464,7 @@ Panel(UIPanel* panel) { auto l = &n.value; - if(pos.y == i) + if(pos.y == ed.buf.offset+i) { DrawCursor(atlas, l.text, pos.x, x+lcw+padding*2.0, y, ch_offset, edit); } @@ -598,6 +621,7 @@ SetFocusedPanel(UIPanel* panel) { if(!CheckNil(g_UI_NIL_PANEL, panel)) { + Logf("set focus"); g_ui_ctx.focused_panel = panel; } }