change scrolling slightly, add new movement options

This commit is contained in:
Matthew 2025-10-03 08:32:31 +10:00
parent 3a433446cb
commit 65d834f08c
4 changed files with 102 additions and 29 deletions

View File

@ -466,6 +466,62 @@ MoveDown(FlatBuffer* fb, u64 col)
} }
} }
void
MoveToEmptyLine(bool up)(FlatBuffer* fb)
{
static if(!up) u64 lf_pos;
bool started;
u64 step = up ? -1 : 1;
u8 ch = 0;
if((fb.buf_pos != 0 && up) || (fb.buf_pos != fb.length && !up))
{
for(u64 i = fb.buf_pos + step; true; i += step)
{
static if(!up)
{
if(i == fb.length-1)
{
fb.buf_pos = fb.length;
break;
}
ch = fb.data[i];
}
static if(up)
{
if(i == 0)
{
fb.buf_pos = 0;
break;
}
ch = fb.data[i-1];
}
if(started && !CheckWhiteSpace(fb.data[i]))
{
started = false;
}
if(!started && ch == '\n')
{
started = true;
static if(!up) lf_pos = i;
continue;
}
if(started && ch == '\n')
{
fb.buf_pos = i;
MoveToSOL(fb);
break;
}
}
}
}
bool bool
Move(FlatBuffer* fb, Input key, Modifier md) Move(FlatBuffer* fb, Input key, Modifier md)
{ {
@ -484,10 +540,11 @@ Move(FlatBuffer* fb, Input key, Modifier md)
{ {
case Up: case Up:
{ {
MoveToEmptyLine!(true)(fb);
} break; } break;
case Down: case Down:
{ {
MoveToEmptyLine!(false)(fb);
} break; } break;
case Left: case Left:
{ {

View File

@ -138,6 +138,7 @@ const TokenStyle[TT.max] TOKEN_STYLES = [
TT.LessThan: TS.Op, TT.LessThan: TS.Op,
TT.GreaterThan: TS.Op, TT.GreaterThan: TS.Op,
TT.Exclamation: TS.Op, TT.Exclamation: TS.Op,
TT.Slash: TS.Op,
TT.LeftParen: TS.Bracket, TT.LeftParen: TS.Bracket,
TT.RightParen: TS.Bracket, TT.RightParen: TS.Bracket,
@ -188,6 +189,7 @@ const TT[128] D_OP_TOKEN = [
'^': TT.Caret, '^': TT.Caret,
'&': TT.Ampersand, '&': TT.Ampersand,
'*': TT.Asterisk, '*': TT.Asterisk,
'/': TT.Slash,
'-': TT.Minus, '-': TT.Minus,
'=': TT.Equals, '=': TT.Equals,
'+': TT.Plus, '+': TT.Plus,
@ -637,7 +639,6 @@ TokenizeD(FlatBuffer* fb)
} }
else else
{ {
Logf("33");
tk.pos += 1; tk.pos += 1;
FixOpAssign(fb, t); FixOpAssign(fb, t);
} }
@ -802,11 +803,11 @@ CheckFuncOrTemplateSig(FlatBuffer* fb, Token* token)
{ {
macro_decl = true; macro_decl = true;
} }
else if(next.type == TT.RightParen || next.next.type == TT.NewLine) else if(next.type == TT.RightParen && next.next.type == TT.NewLine)
{ {
break; break;
} }
else if((next.type == TT.LeftParen || next.type == TT.Comma) && Next(next).type != TT.RightParen) else if((next.type == TT.LeftParen || next.type == TT.Comma) && Next(next).type == TT.Identifier && Next(next).type != TT.RightParen)
{ {
Next(next).type = TT.Type; Next(next).type = TT.Type;
} }
@ -1023,14 +1024,21 @@ ParseId(FlatBuffer* fb)
void void
FixOpAssign(FlatBuffer* fb, Token* t) FixOpAssign(FlatBuffer* fb, Token* t)
{ {
Logf("%s %s", cast(char)fb.data[fb.tk.pos], cast(char)fb.data[fb.tk.pos]); if(t.end+1 < fb.length)
if(fb.tk.pos < fb.length)
{ {
if(fb.data[fb.tk.pos] == '=') u8[] str = fb.data[t.start .. t.end+1];
if(
str == "/=" ||
str == "+=" ||
str == "*=" ||
str == "%=" ||
str == "&=" ||
str == "==" ||
str == "!="
)
{ {
fb.tk.pos += 1; fb.tk.pos += 1;
t.end += 1; t.end += 1;
Logf("match");
} }
} }
} }

View File

@ -285,26 +285,27 @@ SetPanelScroll(UIPanel* panel, i64 rows, f32 text_size)
f32 start = panel.anim.start_value; f32 start = panel.anim.start_value;
f32 end = panel.anim.end_value; f32 end = panel.anim.end_value;
if(start == 0.0 && end == 0.0)
f32 offset = (panel.prev_offset-panel.ed.buf.offset) * text_size;
if(offset > 0.0)
{ {
f32 offset = (panel.prev_offset-panel.ed.buf.offset) * text_size; end = -offset;
if(offset > 0.0) }
{ else
end = -offset; {
} start = offset;
else
{
start = offset;
}
} }
panel.anim.start_value = start; with(panel.anim)
panel.anim.end_value = end; {
start_value = start;
end_value = end;
panel.anim.start_time = 0.1; start_time = 0.1;
panel.anim.remaining_time = 0.1; remaining_time = remaining_time > 0.05 ? 0.04 : 0.1;
panel.prev_offset = panel.ed.buf.offset; panel.prev_offset = panel.ed.buf.offset;
}
} }
f32 f32
@ -358,14 +359,15 @@ EditorView(UIPanel* panel)
offset = Remap(remaining_time, 0.0, start_time, 0.0, 1.0); offset = Remap(remaining_time, 0.0, start_time, 0.0, 1.0);
offset = Remap(EaseOutExp(offset), 0.0, 1.0, start_value, end_value); offset = Remap(EaseOutExp(offset), 0.0, 1.0, start_value, end_value);
if(remaining_time == 0.0)
{
start_value = end_value = start_time = 0.0;
}
line_offset = panel.start_row; line_offset = panel.start_row;
line_rows = panel.end_row-panel.start_row; line_rows = panel.end_row-panel.start_row;
GetLines(&ed.buf, &ed.linebufs, panel.start_row, panel.end_row-panel.start_row); GetLines(&ed.buf, &ed.linebufs, panel.start_row, panel.end_row-panel.start_row);
if(remaining_time == 0.0)
{
start_value = end_value = start_time = 0.0;
panel.start_row = panel.end_row = -1;
}
} }
else else
{ {

View File

@ -1,7 +1,7 @@
import std.stdio; import std.stdio;
@nogc: bool @nogc: bool
Test() Test(float flt, int i)
{ {
int x = 5; int x = 5;
int y = 10; int y = 10;
@ -71,3 +71,9 @@ T MacroFunc(T)(T x)
{ {
return x; return x;
} }
int
ArrayParams(int[5] array, float[] array_2)
{
return array[0];
}