change scrolling slightly, add new movement options
This commit is contained in:
parent
3a433446cb
commit
65d834f08c
@ -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:
|
||||||
{
|
{
|
||||||
|
|||||||
@ -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");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -285,8 +285,7 @@ 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;
|
f32 offset = (panel.prev_offset-panel.ed.buf.offset) * text_size;
|
||||||
if(offset > 0.0)
|
if(offset > 0.0)
|
||||||
{
|
{
|
||||||
@ -296,15 +295,17 @@ SetPanelScroll(UIPanel* panel, i64 rows, f32 text_size)
|
|||||||
{
|
{
|
||||||
start = offset;
|
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
|
||||||
{
|
{
|
||||||
|
|||||||
@ -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];
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user