fix cursor position and text wrapping

This commit is contained in:
Matthew 2025-10-07 05:42:44 +11:00
parent 1855da659a
commit 04849a7487
3 changed files with 22 additions and 40 deletions

View File

@ -603,10 +603,8 @@ TokenizeD(FlatBuffer* fb)
Token* t = MakeToken(tk, TT.Slash, tk.pos, tk.pos+1); Token* t = MakeToken(tk, TT.Slash, tk.pos, tk.pos+1);
u8 next = Peek(fb); u8 next = Peek(fb);
Logf("%s %s", cast(char)ch, cast(char)next);
if(next == '/') if(next == '/')
{ {
Logf("11");
tk.pos += 1; tk.pos += 1;
t.type = TT.Comment; t.type = TT.Comment;
@ -622,7 +620,6 @@ TokenizeD(FlatBuffer* fb)
} }
else if(next == '*') else if(next == '*')
{ {
Logf("22");
tk.pos += 1; tk.pos += 1;
t.type = TT.Comment; t.type = TT.Comment;

View File

@ -770,25 +770,21 @@ PrintNodes(UIItem* item)
void void
FixViolations(UIItem* item) FixViolations(UIItem* item)
{ {
// TODO: Fix this static foreach(axis; A2D.X .. A2D.Y)
Axis2D axis = A2D.Y; {
for(UIItem* i = item; !Nil(i); i = Recurse(i)) for(UIItem* i = item; !Nil(i); i = Recurse(i))
{ {
if(!Nil(i.parent)) f32 total = 0.0;
for(UIItem* c = i.first; !Nil(c); c = c.next)
{ {
f32 bounds_start = i.parent.rect.vec0.v[axis] - i.parent.culling.vec0.v[axis]; total += c.size.v[axis];
if(i.rect.vec0.v[axis] < bounds_start) if(total > i.size.v[axis])
{ {
i.culling.vec0.v[axis] = bounds_start - i.rect.vec0.v[axis]; f32 size = c.size.v[axis];
i.rect.vec0.v[axis] -= i.culling.vec0.v[axis]; f32 sub = total - i.size.v[axis];
//Logf("cull start %f", i.culling.vec0.v[axis]); c.size.v[axis] = Max(size - sub, 0.0);
i.culling.vec1.v[axis] = Min(size - sub, size);
} }
f32 bounds_end = i.parent.rect.vec1.v[axis] - i.parent.culling.vec1.v[axis];
if(i.rect.vec1.v[axis] > bounds_end)
{
i.culling.vec1.v[axis] = i.rect.vec1.v[axis] - bounds_end;
i.rect.vec1.v[axis] -= i.culling.vec1.v[axis];
} }
} }
} }
@ -848,12 +844,6 @@ CalcPositions(alias axis)(UIItem* item)
i.rect.vec0.v[axis] = pos; i.rect.vec0.v[axis] = pos;
i.rect.vec1.v[axis] = end_pos; i.rect.vec1.v[axis] = end_pos;
if(item.parent.key.text == r"###cmd_palette_input_cntr")
{
Logf("pos %s end_pos %s", pos, end_pos);
}
assert(!isNaN(i.rect.vec0.v[axis])); assert(!isNaN(i.rect.vec0.v[axis]));
assert(!isNaN(i.rect.vec1.v[axis])); assert(!isNaN(i.rect.vec1.v[axis]));
@ -1261,7 +1251,7 @@ MakeMultiline(u8[] text, f32 width, u8[] parent_id, u64 line_no, TS[] style = []
if(ch_w + w > scaled_width || i == text.length-1) if(ch_w + w > scaled_width || i == text.length-1)
{ {
u64 len = i-start+1; u64 len = i-start;
u8[extra_buf] buf = 0; u8[extra_buf] buf = 0;
(cast(char[])buf).sformat("%s%05s%05s", cast(char[])parent_id, line_no, line); (cast(char[])buf).sformat("%s%05s%05s", cast(char[])parent_id, line_no, line);
@ -1599,7 +1589,6 @@ ClickedCharIndex(UIItem* item)
f32 ch_w = GlyphWidth(ctx.atlas_buf.atlas.glyphs.ptr + ch); f32 ch_w = GlyphWidth(ctx.atlas_buf.atlas.glyphs.ptr + ch);
if(ch_w + w > item.last_click_pos.x) if(ch_w + w > item.last_click_pos.x)
{ {
Logf("char clicked");
//item.clicked_char_idx = i; //item.clicked_char_idx = i;
break; break;
} }
@ -1664,11 +1653,6 @@ BorderClicked(UIItem* item, DNode!(InputEvent)* n)
item.signal |= (signal | UIS.BorderY1); item.signal |= (signal | UIS.BorderY1);
} }
else taken = false; else taken = false;
if(taken)
{
Logf("%s Clicked or Dragged", cast(char[])item.key.hash_text);
}
} }
return taken; return taken;

View File

@ -404,7 +404,7 @@ EditorView(UIPanel* panel)
{ {
} }
TextPart* tp = WrappedTextLine(buf.text, panel.id, text_size, line_no, buf.style, &pos); TextPart* tp = WrappedTextLine(buf.text, panel.id, text_size, line_no, buf.style, &pos, focused);
height += (text_size * tp.count); height += (text_size * tp.count);
if(TextClicked(tp)) if(TextClicked(tp))
{ {
@ -450,7 +450,7 @@ TextClicked(TextPart* text_part)
} }
TextPart* TextPart*
WrappedTextLine(u8[] text, u8[] parent_id, f32 text_size, u64 line_no, TS[] style = [], U64Vec2* hl_pos) WrappedTextLine(u8[] text, u8[] parent_id, f32 text_size, u64 line_no, TS[] style = [], U64Vec2* hl_pos, bool focused)
{ {
Push!("color")(Vec4(1.0)); Push!("color")(Vec4(1.0));
Push!("text_size")(text_size); Push!("text_size")(text_size);
@ -465,9 +465,11 @@ WrappedTextLine(u8[] text, u8[] parent_id, f32 text_size, u64 line_no, TS[] styl
hl = hl_pos.x; hl = hl_pos.x;
} }
f32 parent_width = parent.size.x - (parent.border_thickness * 2);
u64 chars; u64 chars;
TextPart* tp = part; TextPart* tp = part;
Node!(TextBuffer)* lines = MakeMultiline(text, parent.size.x, parent_id, line_no, style); Node!(TextBuffer)* lines = MakeMultiline(text, parent_width, parent_id, line_no, style);
for(Node!(TextBuffer)* line = lines; line != null; line = line.next, tp = tp.next) for(Node!(TextBuffer)* line = lines; line != null; line = line.next, tp = tp.next)
{ {
part.count += 1; part.count += 1;
@ -478,17 +480,16 @@ WrappedTextLine(u8[] text, u8[] parent_id, f32 text_size, u64 line_no, TS[] styl
tp.item.token_styles = line.value.style; tp.item.token_styles = line.value.style;
if(hl >= 0 && hl < tp.item.key.text.length+chars) if(focused && hl >= 0)
{ {
//Logf("hl %s %s %s", hl, tp.item.key.text.length, chars); if(hl <= tp.item.key.text.length)
if(hl < tp.item.key.text.length+chars)
{ {
Push!("highlighted_char")(hl-chars); Push!("highlighted_char")(hl);
hl = -1; hl = -1;
} }
else else
{ {
chars += tp.item.key.text.length; hl -= tp.item.key.text.length;
} }
} }