New fancy color cleanup; fancy string cleanup; api colors now use fancy colors; fancy colors are FColors

This commit is contained in:
Allen Webster 2019-10-22 18:25:40 -07:00
parent 9f986493a1
commit 21d482e05f
24 changed files with 1284 additions and 1042 deletions

View File

@ -1542,16 +1542,19 @@ view_set_buffer(Application_Links *app, View_ID view_id, Buffer_ID buffer_id, Se
return(result); return(result);
} }
// TODO(allen): remove this!
api(custom) function b32 api(custom) function b32
view_post_fade(Application_Links *app, View_ID view_id, f32 seconds, Range_i64 range, int_color color) view_post_fade(Application_Links *app, View_ID view_id, f32 seconds, Range_i64 range,
{ FColor color){
Models *models = (Models*)app->cmd_context; Models *models = (Models*)app->cmd_context;
View *view = imp_get_view(models, view_id); View *view = imp_get_view(models, view_id);
b32 result = false; b32 result = false;
if (api_check_view(view)){ if (api_check_view(view)){
i64 size = range_size(range); i64 size = range_size(range);
if (size > 0){ if (size > 0){
view_post_paste_effect(view, seconds, (i32)range.start, (i32)size, color|0xFF000000); Color_Table color_table = models->color_table;
view_post_paste_effect(view, seconds, (i32)range.start, (i32)size,
finalize_color(color_table, color));
result = true; result = true;
} }
} }
@ -2582,15 +2585,11 @@ get_theme_colors(Application_Links *app, Theme_Color *colors, i32 count)
} }
} }
api(custom) function argb_color api(custom) function ARGB_Color
finalize_color(Application_Links *app, int_color color){ finalize_color(Application_Links *app, ID_Color color){
Models *models = (Models*)app->cmd_context; Models *models = (Models*)app->cmd_context;
Color_Table color_table = models->color_table; Color_Table color_table = models->color_table;
u32 color_rgb = color; return(finalize_color(color_table, color));
if ((color & 0xFF000000) == 0){
color_rgb = color_table.vals[color % color_table.count];
}
return(color_rgb);
} }
api(custom) function String_Const_u8 api(custom) function String_Const_u8
@ -2630,10 +2629,11 @@ set_window_title(Application_Links *app, String_Const_u8 title)
return(true); return(true);
} }
api(custom) function Vec2 api(custom) function Vec2_f32
draw_string_oriented(Application_Links *app, Face_ID font_id, String_Const_u8 str, Vec2 point, int_color color, u32 flags, Vec2 delta) draw_string_oriented(Application_Links *app, Face_ID font_id, FColor color,
String_Const_u8 str, Vec2_f32 point, u32 flags, Vec2_f32 delta)
{ {
Vec2 result = point; Vec2_f32 result = point;
Models *models = (Models*)app->cmd_context; Models *models = (Models*)app->cmd_context;
Face *face = font_set_face_from_id(&models->font_set, font_id); Face *face = font_set_face_from_id(&models->font_set, font_id);
if (models->target == 0){ if (models->target == 0){
@ -2658,7 +2658,7 @@ get_string_advance(Application_Links *app, Face_ID font_id, String_Const_u8 str)
} }
api(custom) function void api(custom) function void
draw_rectangle(Application_Links *app, Rect_f32 rect, f32 roundness, int_color color){ draw_rectangle(Application_Links *app, Rect_f32 rect, f32 roundness, FColor color){
Models *models = (Models*)app->cmd_context; Models *models = (Models*)app->cmd_context;
if (models->in_render_mode){ if (models->in_render_mode){
Color_Table color_table = models->color_table; Color_Table color_table = models->color_table;
@ -2670,8 +2670,8 @@ draw_rectangle(Application_Links *app, Rect_f32 rect, f32 roundness, int_color c
} }
api(custom) function void api(custom) function void
draw_rectangle_outline(Application_Links *app, Rect_f32 rect, f32 roundness, f32 thickness, int_color color) draw_rectangle_outline(Application_Links *app, Rect_f32 rect,
{ f32 roundness, f32 thickness, FColor color){
Models *models = (Models*)app->cmd_context; Models *models = (Models*)app->cmd_context;
if (models->in_render_mode){ if (models->in_render_mode){
Color_Table color_table = models->color_table; Color_Table color_table = models->color_table;
@ -2722,9 +2722,10 @@ text_layout_create(Application_Links *app, Buffer_ID buffer_id, Rect_f32 rect, B
buffer_get_last_pos_from_line_number(buffer, visible_line_number_range.max)); buffer_get_last_pos_from_line_number(buffer, visible_line_number_range.max));
i64 item_count = range_size_inclusive(visible_range); i64 item_count = range_size_inclusive(visible_range);
int_color *colors_array = push_array(arena, int_color, item_count); FColor *colors_array = push_array(arena, FColor, item_count);
for (i64 i = 0; i < item_count; i += 1){ for (i64 i = 0; i < item_count; i += 1){
colors_array[i] = Stag_Default; colors_array[i].a_byte = 0;
colors_array[i].id = Stag_Default;
} }
result = text_layout_new(&models->text_layouts, arena, buffer_id, buffer_point, result = text_layout_new(&models->text_layouts, arena, buffer_id, buffer_point,
visible_range, visible_line_number_range, rect, colors_array); visible_range, visible_line_number_range, rect, colors_array);
@ -2862,7 +2863,8 @@ text_layout_character_on_screen(Application_Links *app, Text_Layout_ID layout_id
} }
api(custom) function void api(custom) function void
paint_text_color(Application_Links *app, Text_Layout_ID layout_id, Interval_i64 range, int_color color){ paint_text_color(Application_Links *app, Text_Layout_ID layout_id, Interval_i64 range,
FColor color){
Models *models = (Models*)app->cmd_context; Models *models = (Models*)app->cmd_context;
Rect_f32 result = {}; Rect_f32 result = {};
Text_Layout *layout = text_layout_get(&models->text_layouts, layout_id); Text_Layout *layout = text_layout_get(&models->text_layouts, layout_id);
@ -2871,7 +2873,7 @@ paint_text_color(Application_Links *app, Text_Layout_ID layout_id, Interval_i64
range.max = clamp_top(range.max, layout->visible_range.max); range.max = clamp_top(range.max, layout->visible_range.max);
range.min -= layout->visible_range.min; range.min -= layout->visible_range.min;
range.max -= layout->visible_range.min; range.max -= layout->visible_range.min;
int_color *color_ptr = layout->item_colors + range.min; FColor *color_ptr = layout->item_colors + range.min;
for (i64 i = range.min; i < range.max; i += 1, color_ptr += 1){ for (i64 i = range.min; i < range.max; i += 1, color_ptr += 1){
*color_ptr = color; *color_ptr = color;
} }

View File

@ -162,11 +162,13 @@ draw_rectangle(Render_Target *target, Rect_f32 rect, f32 roundness, u32 color){
} }
internal void internal void
draw_font_glyph(Render_Target *target, Face *face, u32 codepoint, f32 x, f32 y, u32 color, u32 flags){ draw_font_glyph(Render_Target *target, Face *face, u32 codepoint, Vec2_f32 p,
ARGB_Color color, u32 flags){
draw__set_face_id(target, face->id); draw__set_face_id(target, face->id);
u16 glyph_index = 0; u16 glyph_index = 0;
if (!codepoint_index_map_read(&face->codepoint_to_index_map, codepoint, &glyph_index)){ if (!codepoint_index_map_read(&face->codepoint_to_index_map, codepoint,
&glyph_index)){
glyph_index = 0; glyph_index = 0;
} }
Glyph_Bounds bounds = face->bounds[glyph_index]; Glyph_Bounds bounds = face->bounds[glyph_index];
@ -176,22 +178,29 @@ draw_font_glyph(Render_Target *target, Face *face, u32 codepoint, f32 x, f32 y,
Render_Vertex vertices[6] = {}; Render_Vertex vertices[6] = {};
if (!HasFlag(flags, GlyphFlag_Rotate90)){ if (!HasFlag(flags, GlyphFlag_Rotate90)){
Rect_f32 xy = Rf32(x + bounds.xy_off.x0, y + bounds.xy_off.y0, Rect_f32 xy = Rf32(p + bounds.xy_off.p0, p + bounds.xy_off.p1);
x + bounds.xy_off.x1, y + bounds.xy_off.y1);
vertices[0].xy = V2(xy.x0, xy.y1); vertices[0].uvw = V3(uv.x0, uv.y1, bounds.w); vertices[0].xy = V2f32(xy.x0, xy.y1);
vertices[1].xy = V2(xy.x1, xy.y1); vertices[1].uvw = V3(uv.x1, uv.y1, bounds.w); vertices[0].uvw = V3f32(uv.x0, uv.y1, bounds.w);
vertices[2].xy = V2(xy.x0, xy.y0); vertices[2].uvw = V3(uv.x0, uv.y0, bounds.w); vertices[1].xy = V2f32(xy.x1, xy.y1);
vertices[5].xy = V2(xy.x1, xy.y0); vertices[5].uvw = V3(uv.x1, uv.y0, bounds.w); vertices[1].uvw = V3f32(uv.x1, uv.y1, bounds.w);
vertices[2].xy = V2f32(xy.x0, xy.y0);
vertices[2].uvw = V3f32(uv.x0, uv.y0, bounds.w);
vertices[5].xy = V2f32(xy.x1, xy.y0);
vertices[5].uvw = V3f32(uv.x1, uv.y0, bounds.w);
} }
else{ else{
Rect_f32 xy = Rf32(x - bounds.xy_off.y1, y + bounds.xy_off.x0, Rect_f32 xy = Rf32(p.x - bounds.xy_off.y1, p.y + bounds.xy_off.x0,
x - bounds.xy_off.y0, y + bounds.xy_off.x1); p.x - bounds.xy_off.y0, p.y + bounds.xy_off.x1);
vertices[0].xy = V2(xy.x0, xy.y1); vertices[0].uvw = V3(uv.x1, uv.y1, bounds.w); vertices[0].xy = V2f32(xy.x0, xy.y1);
vertices[1].xy = V2(xy.x1, xy.y1); vertices[1].uvw = V3(uv.x1, uv.y0, bounds.w); vertices[0].uvw = V3f32(uv.x1, uv.y1, bounds.w);
vertices[2].xy = V2(xy.x0, xy.y0); vertices[2].uvw = V3(uv.x0, uv.y1, bounds.w); vertices[1].xy = V2f32(xy.x1, xy.y1);
vertices[5].xy = V2(xy.x1, xy.y0); vertices[5].uvw = V3(uv.x0, uv.y0, bounds.w); vertices[1].uvw = V3f32(uv.x1, uv.y0, bounds.w);
vertices[2].xy = V2f32(xy.x0, xy.y0);
vertices[2].uvw = V3f32(uv.x0, uv.y1, bounds.w);
vertices[5].xy = V2f32(xy.x1, xy.y0);
vertices[5].uvw = V3f32(uv.x0, uv.y0, bounds.w);
} }
vertices[3] = vertices[1]; vertices[3] = vertices[1];
@ -215,7 +224,8 @@ floor32(Vec2 point){
} }
internal f32 internal f32
draw_string(Render_Target *target, Face *face, String_Const_u8 string, Vec2 point, u32 color, u32 flags, Vec2 delta){ draw_string(Render_Target *target, Face *face, String_Const_u8 string, Vec2_f32 point,
ARGB_Color color, u32 flags, Vec2_f32 delta){
f32 total_delta = 0.f; f32 total_delta = 0.f;
if (face != 0){ if (face != 0){
point = floor32(point); point = floor32(point);
@ -238,7 +248,7 @@ draw_string(Render_Target *target, Face *face, String_Const_u8 string, Vec2 poin
if (behavior.do_codepoint_advance){ if (behavior.do_codepoint_advance){
u32 codepoint = step.value; u32 codepoint = step.value;
if (color != 0){ if (color != 0){
draw_font_glyph(target, face, codepoint, point.x, point.y, color, flags); draw_font_glyph(target, face, codepoint, point, color, flags);
} }
f32 d = font_get_glyph_advance(face, codepoint); f32 d = font_get_glyph_advance(face, codepoint);
point += d*delta; point += d*delta;
@ -264,7 +274,7 @@ draw_string(Render_Target *target, Face *face, String_Const_u8 string, Vec2 poin
Vec2 pp = point; Vec2 pp = point;
for (u32 j = 0; j < 3; ++j){ for (u32 j = 0; j < 3; ++j){
draw_font_glyph(target, face, cs[j], pp.x, pp.y, color, flags); draw_font_glyph(target, face, cs[j], pp, color, flags);
pp += delta*byte_sub_advances[j]; pp += delta*byte_sub_advances[j];
} }
} }

View File

@ -38,7 +38,7 @@ internal Text_Layout_ID
text_layout_new(Text_Layout_Container *container, Arena *arena, text_layout_new(Text_Layout_Container *container, Arena *arena,
Buffer_ID buffer_id, Buffer_Point point, Buffer_ID buffer_id, Buffer_Point point,
Interval_i64 visible_range, Interval_i64 visible_line_number_range, Interval_i64 visible_range, Interval_i64 visible_line_number_range,
Rect_f32 rect, int_color *item_colors){ Rect_f32 rect, FColor *item_colors){
Text_Layout *new_layout_data = text_layout_new__alloc_layout(container); Text_Layout *new_layout_data = text_layout_new__alloc_layout(container);
new_layout_data->arena = arena; new_layout_data->arena = arena;
new_layout_data->buffer_id = buffer_id; new_layout_data->buffer_id = buffer_id;
@ -90,8 +90,8 @@ text_layout_render(Thread_Context *tctx, Models *models, Text_Layout *layout){
Face *face = file_get_face(models, file); Face *face = file_get_face(models, file);
f32 width = rect_width(layout->rect); f32 width = rect_width(layout->rect);
u32 special_color = color_table.vals[Stag_Special_Character]; ARGB_Color special_color = color_table.vals[Stag_Special_Character];
u32 ghost_color = color_table.vals[Stag_Ghost_Character]; ARGB_Color ghost_color = color_table.vals[Stag_Ghost_Character];
Vec2_f32 shift_p = layout->rect.p0 - layout->point.pixel_shift; Vec2_f32 shift_p = layout->rect.p0 - layout->point.pixel_shift;
i64 first_index = layout->visible_range.first; i64 first_index = layout->visible_range.first;
@ -104,28 +104,23 @@ text_layout_render(Thread_Context *tctx, Models *models, Text_Layout *layout){
block = block->next){ block = block->next){
Buffer_Layout_Item *item = block->items; Buffer_Layout_Item *item = block->items;
i64 count = block->count; i64 count = block->count;
int_color *item_colors = layout->item_colors; FColor *item_colors = layout->item_colors;
for (i32 i = 0; i < count; i += 1, item += 1){ for (i32 i = 0; i < count; i += 1, item += 1){
if (item->codepoint != 0){ if (item->codepoint != 0){
int_color symbol_color = item_colors[item->index - first_index]; ARGB_Color color = 0;
u32 color = 0; if (HasFlag(item->flags, BRFlag_Special_Character)){
if (symbol_color == Stag_Default){ color = special_color;
if (HasFlag(item->flags, BRFlag_Special_Character)){ }
color = special_color; else if (HasFlag(item->flags, BRFlag_Ghost_Character)){
} color = ghost_color;
else if (HasFlag(item->flags, BRFlag_Ghost_Character)){
color = ghost_color;
}
else{
color = finalize_color(color_table, symbol_color);
}
} }
else{ else{
color = finalize_color(color_table, symbol_color); FColor fcolor = item_colors[item->index - first_index];
color = finalize_color(color_table, fcolor);
} }
Vec2_f32 p = item->rect.p0 + shift_p; Vec2_f32 p = item->rect.p0 + shift_p;
draw_font_glyph(target, face, item->codepoint, p.x, p.y, color, GlyphFlag_None); draw_font_glyph(target, face, item->codepoint,
p, color, GlyphFlag_None);
} }
} }
} }

View File

@ -21,7 +21,7 @@ union Text_Layout{
Interval_i64 visible_range; Interval_i64 visible_range;
Interval_i64 visible_line_number_range; Interval_i64 visible_line_number_range;
Rect_f32 rect; Rect_f32 rect;
int_color *item_colors; FColor *item_colors;
}; };
}; };

View File

@ -388,7 +388,7 @@ view_set_cursor_and_scroll(Thread_Context *tctx, Models *models, View *view, i64
} }
internal void internal void
view_post_paste_effect(View *view, f32 seconds, i64 start, i64 size, u32 color){ view_post_paste_effect(View *view, f32 seconds, i64 start, i64 size, ARGB_Color color){
Editing_File *file = view->file; Editing_File *file = view->file;
file->state.paste_effect.start = start; file->state.paste_effect.start = start;
file->state.paste_effect.end = start + size; file->state.paste_effect.end = start + size;
@ -727,13 +727,18 @@ release_font_and_update(Models *models, Face *face, Face *replacement_face){
//////////////////////////////// ////////////////////////////////
internal argb_color function ARGB_Color
finalize_color(Color_Table color_table, int_color color){ finalize_color(Color_Table color_table, ID_Color id){
argb_color color_argb = color; return(color_table.vals[id % color_table.count]);
if ((color & 0xFF000000) == 0){ }
color_argb = color_table.vals[color % color_table.count];
function ARGB_Color
finalize_color(Color_Table color_table, FColor fcolor){
ARGB_Color result = fcolor.argb;
if (fcolor.a_byte == 0){
result = finalize_color(color_table, fcolor.id);
} }
return(color_argb); return(result);
} }
//////////////////////////////// ////////////////////////////////

View File

@ -1630,10 +1630,9 @@ CUSTOM_COMMAND_SIG(multi_paste){
view_set_mark(app, view, seek_pos(range.max + 1)); view_set_mark(app, view, seek_pos(range.max + 1));
view_set_cursor_and_preferred_x(app, view, seek_pos(range.max + insert_string.size)); view_set_cursor_and_preferred_x(app, view, seek_pos(range.max + insert_string.size));
Theme_Color paste = {}; view_post_fade(app, view, 0.667f,
paste.tag = Stag_Paste; Ii64(range.max + 1, range.max + insert_string.size),
get_theme_colors(app, &paste, 1); fcolor_id(Stag_Paste));
view_post_fade(app, view, 0.667f, Ii64(range.max + 1, range.max + insert_string.size), paste.color);
} }
else{ else{
paste(app); paste(app);
@ -1689,10 +1688,7 @@ multi_paste_range(Application_Links *app, View_ID view, Range_i64 range, i32 pas
view_set_cursor_and_preferred_x(app, view, seek_pos(finish_range.max)); view_set_cursor_and_preferred_x(app, view, seek_pos(finish_range.max));
// TODO(allen): Send this to all views. // TODO(allen): Send this to all views.
Theme_Color paste; view_post_fade(app, view, 0.667f, finish_range, fcolor_id(Stag_Paste));
paste.tag = Stag_Paste;
get_theme_colors(app, &paste, 1);
view_post_fade(app, view, 0.667f, finish_range, paste.color);
} }
} }
return(finish_range); return(finish_range);

View File

@ -1520,18 +1520,18 @@ lerp(i32 a, f32 t, i32 b){
return((i32)(lerp((f32)a, t, (f32)b))); return((i32)(lerp((f32)a, t, (f32)b)));
} }
internal Vec2 internal Vec2_f32
lerp(Vec2 a, f32 t, Vec2 b){ lerp(Vec2_f32 a, f32 t, Vec2_f32 b){
return(a + (b-a)*t); return(a + (b-a)*t);
} }
internal Vec3 internal Vec3_f32
lerp(Vec3 a, f32 t, Vec3 b){ lerp(Vec3_f32 a, f32 t, Vec3_f32 b){
return(a + (b-a)*t); return(a + (b-a)*t);
} }
internal Vec4 internal Vec4_f32
lerp(Vec4 a, f32 t, Vec4 b){ lerp(Vec4_f32 a, f32 t, Vec4_f32 b){
return(a + (b-a)*t); return(a + (b-a)*t);
} }
@ -1590,34 +1590,9 @@ operator!=(Rect_f32 a, Rect_f32 b){
//////////////////////////////// ////////////////////////////////
// TODO(allen): Convert colors to Vec4 internal Vec4_f32
internal u32 unpack_color(ARGB_Color color){
color_blend(u32 a, f32 t, u32 b){ Vec4_f32 result;
union{
u8 byte[4];
u32 comp;
} A, B, R;
A.comp = a;
B.comp = b;
R.byte[0] = (u8)lerp(A.byte[0], t, B.byte[0]);
R.byte[1] = (u8)lerp(A.byte[1], t, B.byte[1]);
R.byte[2] = (u8)lerp(A.byte[2], t, B.byte[2]);
R.byte[3] = (u8)lerp(A.byte[3], t, B.byte[3]);
return(R.comp);
}
internal Vec3
unpack_color3(u32 color){
Vec3 result;
result.r = ((color >> 16) & 0xFF)/255.f;
result.g = ((color >> 8) & 0xFF)/255.f;
result.b = ((color >> 0) & 0xFF)/255.f;
return(result);
}
internal Vec4
unpack_color4(u32 color){
Vec4 result;
result.a = ((color >> 24) & 0xFF)/255.f; result.a = ((color >> 24) & 0xFF)/255.f;
result.r = ((color >> 16) & 0xFF)/255.f; result.r = ((color >> 16) & 0xFF)/255.f;
result.g = ((color >> 8) & 0xFF)/255.f; result.g = ((color >> 8) & 0xFF)/255.f;
@ -1625,9 +1600,9 @@ unpack_color4(u32 color){
return(result); return(result);
} }
internal u32 internal ARGB_Color
pack_color4(Vec4 color){ pack_color(Vec4_f32 color){
u32 result = ARGB_Color result =
((u8)(color.a*255) << 24) | ((u8)(color.a*255) << 24) |
((u8)(color.r*255) << 16) | ((u8)(color.r*255) << 16) |
((u8)(color.g*255) << 8) | ((u8)(color.g*255) << 8) |
@ -1635,6 +1610,14 @@ pack_color4(Vec4 color){
return(result); return(result);
} }
internal ARGB_Color
color_blend(ARGB_Color a, f32 t, ARGB_Color b){
Vec4_f32 av = unpack_color(a);
Vec4_f32 bv = unpack_color(b);
Vec4_f32 v = lerp(av, t, bv);
return(pack_color(v));
}
internal Vec4 internal Vec4
rgba_to_hsla(Vec4 rgba){ rgba_to_hsla(Vec4 rgba){
Vec4 hsla = {}; Vec4 hsla = {};

View File

@ -774,6 +774,8 @@ union Rect_f32_Pair{
}; };
}; };
typedef u32 ARGB_Color;
//////////////////////////////// ////////////////////////////////
struct i8_Array{ struct i8_Array{

View File

@ -62,10 +62,8 @@ CUSTOM_DOC("At the cursor, insert the text at the top of the clipboard.")
view_set_cursor_and_preferred_x(app, view, seek_pos(pos + (i32)string.size)); view_set_cursor_and_preferred_x(app, view, seek_pos(pos + (i32)string.size));
// TODO(allen): Send this to all views. // TODO(allen): Send this to all views.
Theme_Color paste = {}; view_post_fade(app, view, 0.667f, Ii64_size(pos, string.size),
paste.tag = Stag_Paste; fcolor_id(Stag_Paste));
get_theme_colors(app, &paste, 1);
view_post_fade(app, view, 0.667f, Ii64(pos, pos + string.size), paste.color);
} }
} }
} }
@ -101,10 +99,8 @@ CUSTOM_DOC("If the previous command was paste or paste_next, replaces the paste
view_set_cursor_and_preferred_x(app, view, seek_pos(pos + string.size)); view_set_cursor_and_preferred_x(app, view, seek_pos(pos + string.size));
// TODO(allen): Send this to all views. // TODO(allen): Send this to all views.
Theme_Color paste = {}; view_post_fade(app, view, 0.667f, Ii64_size(pos, string.size),
paste.tag = Stag_Paste; fcolor_id(Stag_Paste));
get_theme_colors(app, &paste, 1);
view_post_fade(app, view, 0.667f, Ii64(pos, pos + string.size), paste.color);
} }
else{ else{
paste(app); paste(app);

View File

@ -289,7 +289,10 @@ default_render_buffer(Application_Links *app, View_ID view_id, b32 is_active_vie
// NOTE(allen): Scope highlight // NOTE(allen): Scope highlight
if (global_config.use_scope_highlight){ if (global_config.use_scope_highlight){
int_color colors[] = { Stag_Back_Cycle_1, Stag_Back_Cycle_2, Stag_Back_Cycle_3, Stag_Back_Cycle_4, }; FColor colors[] = {
fcolor_id(Stag_Back_Cycle_1), fcolor_id(Stag_Back_Cycle_2),
fcolor_id(Stag_Back_Cycle_3), fcolor_id(Stag_Back_Cycle_4),
};
draw_scope_highlight(app, buffer, text_layout_id, cursor_pos, colors, ArrayCount(colors)); draw_scope_highlight(app, buffer, text_layout_id, cursor_pos, colors, ArrayCount(colors));
} }
@ -298,28 +301,35 @@ default_render_buffer(Application_Links *app, View_ID view_id, b32 is_active_vie
String_Const_u8 name = string_u8_litexpr("*compilation*"); String_Const_u8 name = string_u8_litexpr("*compilation*");
Buffer_ID compilation_buffer = get_buffer_by_name(app, name, Access_Always); Buffer_ID compilation_buffer = get_buffer_by_name(app, name, Access_Always);
if (global_config.use_error_highlight){ if (global_config.use_error_highlight){
draw_jump_highlights(app, buffer, text_layout_id, compilation_buffer, Stag_Highlight_Junk); draw_jump_highlights(app, buffer, text_layout_id, compilation_buffer,
fcolor_id(Stag_Highlight_Junk));
} }
// NOTE(allen): Search highlight // NOTE(allen): Search highlight
if (global_config.use_jump_highlight){ if (global_config.use_jump_highlight){
Buffer_ID jump_buffer = get_locked_jump_buffer(app); Buffer_ID jump_buffer = get_locked_jump_buffer(app);
if (jump_buffer != compilation_buffer){ if (jump_buffer != compilation_buffer){
draw_jump_highlights(app, buffer, text_layout_id, jump_buffer, Stag_Highlight_White); draw_jump_highlights(app, buffer, text_layout_id, jump_buffer,
fcolor_id(Stag_Highlight_White));
} }
} }
} }
// NOTE(allen): Color parens // NOTE(allen): Color parens
if (global_config.use_paren_helper){ if (global_config.use_paren_helper){
int_color colors[] = { Stag_Text_Cycle_1, Stag_Text_Cycle_2, Stag_Text_Cycle_3, Stag_Text_Cycle_4, }; FColor colors[] = {
draw_paren_highlight(app, buffer, text_layout_id, cursor_pos, colors, ArrayCount(colors)); fcolor_id(Stag_Text_Cycle_1), fcolor_id(Stag_Text_Cycle_2),
fcolor_id(Stag_Text_Cycle_3), fcolor_id(Stag_Text_Cycle_4),
};
draw_paren_highlight(app, buffer, text_layout_id, cursor_pos,
colors, ArrayCount(colors));
} }
// NOTE(allen): Line highlight // NOTE(allen): Line highlight
if (global_config.highlight_line_at_cursor && is_active_view){ if (global_config.highlight_line_at_cursor && is_active_view){
i64 line_number = get_line_number_from_pos(app, buffer, cursor_pos); i64 line_number = get_line_number_from_pos(app, buffer, cursor_pos);
draw_line_highlight(app, text_layout_id, line_number, Stag_Highlight_Cursor_Line); draw_line_highlight(app, text_layout_id, line_number,
fcolor_id(Stag_Highlight_Cursor_Line));
} }
// NOTE(allen): Cursor shape // NOTE(allen): Cursor shape

View File

@ -32,7 +32,6 @@
#include "4coder_string_match.h" #include "4coder_string_match.h"
#include "4coder_helper.h" #include "4coder_helper.h"
#include "4coder_delta_rule.h" #include "4coder_delta_rule.h"
#include "4coder_fancy.h"
#include "4coder_draw.h" #include "4coder_draw.h"
#include "4coder_insertion.h" #include "4coder_insertion.h"
#include "4coder_lister_base.h" #include "4coder_lister_base.h"

View File

@ -4,34 +4,35 @@
// TOP // TOP
function int_color function FColor
get_margin_color(i32 level){ get_margin_color(i32 level){
int_color margin = 0; FColor margin = fcolor_zero();
switch (level){ switch (level){
default: default:
case UIHighlight_None: case UIHighlight_None:
{ {
margin = Stag_List_Item; margin = fcolor_id(Stag_List_Item);
}break; }break;
case UIHighlight_Hover: case UIHighlight_Hover:
{ {
margin = Stag_List_Item_Hover; margin = fcolor_id(Stag_List_Item_Hover);
}break; }break;
case UIHighlight_Active: case UIHighlight_Active:
{ {
margin = Stag_List_Item_Active; margin = fcolor_id(Stag_List_Item_Active);
}break; }break;
} }
return(margin); return(margin);
} }
internal Vec2 internal Vec2_f32
draw_string(Application_Links *app, Face_ID font_id, String_Const_u8 string, Vec2 p, int_color color){ draw_string(Application_Links *app, Face_ID font_id, String_Const_u8 string,
return(draw_string_oriented(app, font_id, string, p, color, 0, V2(1.f, 0.f))); Vec2_f32 p, FColor color){
return(draw_string_oriented(app, font_id, color, string, p, 0, V2(1.f, 0.f)));
} }
internal void internal void
draw_margin(Application_Links *app, Rect_f32 outer, Rect_f32 inner, int_color color){ draw_margin(Application_Links *app, Rect_f32 outer, Rect_f32 inner, FColor color){
draw_rectangle(app, Rf32(outer.x0, outer.y0, outer.x1, inner.y0), 0.f, color); draw_rectangle(app, Rf32(outer.x0, outer.y0, outer.x1, inner.y0), 0.f, color);
draw_rectangle(app, Rf32(outer.x0, inner.y1, outer.x1, outer.y1), 0.f, color); draw_rectangle(app, Rf32(outer.x0, inner.y1, outer.x1, outer.y1), 0.f, color);
draw_rectangle(app, Rf32(outer.x0, inner.y0, inner.x0, inner.y1), 0.f, color); draw_rectangle(app, Rf32(outer.x0, inner.y0, inner.x0, inner.y1), 0.f, color);
@ -39,13 +40,15 @@ draw_margin(Application_Links *app, Rect_f32 outer, Rect_f32 inner, int_color co
} }
internal void internal void
draw_character_block(Application_Links *app, Text_Layout_ID layout, i64 pos, f32 roundness, int_color color){ draw_character_block(Application_Links *app, Text_Layout_ID layout, i64 pos,
f32 roundness, FColor color){
Rect_f32 rect = text_layout_character_on_screen(app, layout, pos); Rect_f32 rect = text_layout_character_on_screen(app, layout, pos);
draw_rectangle(app, rect, roundness, color); draw_rectangle(app, rect, roundness, color);
} }
internal void internal void
draw_character_block(Application_Links *app, Text_Layout_ID layout, Range_i64 range, f32 roundness, int_color color){ draw_character_block(Application_Links *app, Text_Layout_ID layout, Range_i64 range,
f32 roundness, FColor color){
if (range.first < range.one_past_last){ if (range.first < range.one_past_last){
i64 i = range.first; i64 i = range.first;
Rect_f32 first_rect = text_layout_character_on_screen(app, layout, i); Rect_f32 first_rect = text_layout_character_on_screen(app, layout, i);
@ -80,27 +83,32 @@ draw_character_block(Application_Links *app, Text_Layout_ID layout, Range_i64 ra
} }
internal void internal void
draw_character_wire_frame(Application_Links *app, Text_Layout_ID layout, i64 pos, f32 roundness, f32 thickness, int_color color){ draw_character_wire_frame(Application_Links *app, Text_Layout_ID layout, i64 pos,
f32 roundness, f32 thickness, FColor color){
Rect_f32 rect = text_layout_character_on_screen(app, layout, pos); Rect_f32 rect = text_layout_character_on_screen(app, layout, pos);
draw_rectangle_outline(app, rect, roundness, thickness, color); draw_rectangle_outline(app, rect, roundness, thickness, color);
} }
internal void internal void
draw_character_wire_frame(Application_Links *app, Text_Layout_ID layout, Range_i64 range, f32 roundness, f32 thickness, int_color color){ draw_character_wire_frame(Application_Links *app, Text_Layout_ID layout,
Range_i64 range, f32 roundness, f32 thickness,
FColor color){
for (i64 i = range.first; i < range.one_past_last; i += 1){ for (i64 i = range.first; i < range.one_past_last; i += 1){
draw_character_wire_frame(app, layout, i, roundness, thickness, color); draw_character_wire_frame(app, layout, i, roundness, thickness, color);
} }
} }
internal void internal void
draw_character_i_bar(Application_Links *app, Text_Layout_ID layout, i64 pos, int_color color){ draw_character_i_bar(Application_Links *app, Text_Layout_ID layout, i64 pos,
FColor color){
Rect_f32 rect = text_layout_character_on_screen(app, layout, pos); Rect_f32 rect = text_layout_character_on_screen(app, layout, pos);
rect.x1 = rect.x0 + 1.f; rect.x1 = rect.x0 + 1.f;
draw_rectangle(app, rect, 0.f, color); draw_rectangle(app, rect, 0.f, color);
} }
internal void internal void
draw_line_highlight(Application_Links *app, Text_Layout_ID layout, Range_i64 line_range, int_color color){ draw_line_highlight(Application_Links *app, Text_Layout_ID layout,
Range_i64 line_range, FColor color){
Range_f32 y1 = text_layout_line_on_screen(app, layout, line_range.min); Range_f32 y1 = text_layout_line_on_screen(app, layout, line_range.min);
Range_f32 y2 = text_layout_line_on_screen(app, layout, line_range.max); Range_f32 y2 = text_layout_line_on_screen(app, layout, line_range.max);
Range_f32 y = range_union(y1, y2); Range_f32 y = range_union(y1, y2);
@ -111,12 +119,14 @@ draw_line_highlight(Application_Links *app, Text_Layout_ID layout, Range_i64 lin
} }
internal void internal void
draw_line_highlight(Application_Links *app, Text_Layout_ID layout, i64 line, int_color color){ draw_line_highlight(Application_Links *app, Text_Layout_ID layout, i64 line,
FColor color){
draw_line_highlight(app, layout, Ii64(line), color); draw_line_highlight(app, layout, Ii64(line), color);
} }
internal void internal void
paint_text_color_pos(Application_Links *app, Text_Layout_ID layout, i64 pos, int_color color){ paint_text_color_pos(Application_Links *app, Text_Layout_ID layout, i64 pos,
FColor color){
paint_text_color(app, layout, Ii64(pos, pos + 1), color); paint_text_color(app, layout, Ii64(pos, pos + 1), color);
} }
@ -165,8 +175,9 @@ function Rect_f32
draw_background_and_margin(Application_Links *app, View_ID view, b32 is_active_view){ draw_background_and_margin(Application_Links *app, View_ID view, b32 is_active_view){
Rect_f32 view_rect = view_get_screen_rect(app, view); Rect_f32 view_rect = view_get_screen_rect(app, view);
Rect_f32 inner = rect_inner(view_rect, 3.f); Rect_f32 inner = rect_inner(view_rect, 3.f);
int_color margin_color = get_margin_color(is_active_view?UIHighlight_Active:UIHighlight_None); FColor margin_color = get_margin_color(is_active_view?
draw_rectangle(app, inner, 0.f, Stag_Back); UIHighlight_Active:UIHighlight_None);
draw_rectangle(app, inner, 0.f, fcolor_id(Stag_Back));
draw_margin(app, view_rect, inner, margin_color); draw_margin(app, view_rect, inner, margin_color);
return(inner); return(inner);
} }
@ -182,15 +193,15 @@ function void
draw_file_bar(Application_Links *app, View_ID view_id, Buffer_ID buffer, Face_ID face_id, Rect_f32 bar){ draw_file_bar(Application_Links *app, View_ID view_id, Buffer_ID buffer, Face_ID face_id, Rect_f32 bar){
Scratch_Block scratch(app); Scratch_Block scratch(app);
draw_rectangle(app, bar, 0.f, Stag_Bar); draw_rectangle(app, bar, 0.f, fcolor_id(Stag_Bar));
Fancy_Color base_color = fancy_id(Stag_Base); FColor base_color = fcolor_id(Stag_Base);
Fancy_Color pop2_color = fancy_id(Stag_Pop2); FColor pop2_color = fcolor_id(Stag_Pop2);
i64 cursor_position = view_get_cursor_pos(app, view_id); i64 cursor_position = view_get_cursor_pos(app, view_id);
Buffer_Cursor cursor = view_compute_cursor(app, view_id, seek_pos(cursor_position)); Buffer_Cursor cursor = view_compute_cursor(app, view_id, seek_pos(cursor_position));
Fancy_String_List list = {}; Fancy_Line list = {};
String_Const_u8 unique_name = push_buffer_unique_name(app, scratch, buffer); String_Const_u8 unique_name = push_buffer_unique_name(app, scratch, buffer);
push_fancy_string(scratch, &list, base_color, unique_name); push_fancy_string(scratch, &list, base_color, unique_name);
push_fancy_stringf(scratch, &list, base_color, " - Row: %3.lld Col: %3.lld -", cursor.line, cursor.col); push_fancy_stringf(scratch, &list, base_color, " - Row: %3.lld Col: %3.lld -", cursor.line, cursor.col);
@ -232,28 +243,28 @@ draw_file_bar(Application_Links *app, View_ID view_id, Buffer_ID buffer, Face_ID
} }
Vec2 p = bar.p0 + V2(2.f, 2.f); Vec2 p = bar.p0 + V2(2.f, 2.f);
draw_fancy_string(app, face_id, list.first, p, Stag_Default, 0); draw_fancy_line(app, face_id, fcolor_zero(), &list, p);
} }
function void function void
draw_query_bar(Application_Links *app, Query_Bar *query_bar, Face_ID face_id, Rect_f32 bar){ draw_query_bar(Application_Links *app, Query_Bar *query_bar, Face_ID face_id, Rect_f32 bar){
Scratch_Block scratch(app); Scratch_Block scratch(app);
Fancy_String_List list = {}; Fancy_Line list = {};
push_fancy_string(scratch, &list, fancy_id(Stag_Pop1) , query_bar->prompt); push_fancy_string(scratch, &list, fcolor_id(Stag_Pop1) , query_bar->prompt);
push_fancy_string(scratch, &list, fancy_id(Stag_Default), query_bar->string); push_fancy_string(scratch, &list, fcolor_id(Stag_Default), query_bar->string);
Vec2_f32 p = bar.p0 + V2(2.f, 2.f); Vec2_f32 p = bar.p0 + V2(2.f, 2.f);
draw_fancy_string(app, face_id, list.first, p, Stag_Default, 0); draw_fancy_line(app, face_id, fcolor_zero(), &list, p);
} }
function void function void
draw_line_number_margin(Application_Links *app, View_ID view_id, Buffer_ID buffer, Face_ID face_id, draw_line_number_margin(Application_Links *app, View_ID view_id, Buffer_ID buffer, Face_ID face_id,
Text_Layout_ID text_layout_id, Rect_f32 margin){ Text_Layout_ID text_layout_id, Rect_f32 margin){
Rect_f32 prev_clip = draw_set_clip(app, margin); Rect_f32 prev_clip = draw_set_clip(app, margin);
draw_rectangle(app, margin, 0.f, Stag_Line_Numbers_Back); draw_rectangle(app, margin, 0.f, fcolor_id(Stag_Line_Numbers_Back));
Interval_i64 visible_range = text_layout_get_visible_range(app, text_layout_id); Interval_i64 visible_range = text_layout_get_visible_range(app, text_layout_id);
Fancy_Color line_color = fancy_id(Stag_Line_Numbers_Text); FColor line_color = fcolor_id(Stag_Line_Numbers_Text);
i64 line_count = buffer_get_line_count(app, buffer); i64 line_count = buffer_get_line_count(app, buffer);
i64 line_count_digit_count = digit_count_from_integer(line_count, 10); i64 line_count_digit_count = digit_count_from_integer(line_count, 10);
@ -269,8 +280,11 @@ draw_line_number_margin(Application_Links *app, View_ID view_id, Buffer_ID buffe
Range_f32 line_y = text_layout_line_on_screen(app, text_layout_id, line_number); Range_f32 line_y = text_layout_line_on_screen(app, text_layout_id, line_number);
Vec2_f32 p = V2f32(margin.x0, line_y.min); Vec2_f32 p = V2f32(margin.x0, line_y.min);
Temp_Memory_Block temp(scratch); Temp_Memory_Block temp(scratch);
Fancy_String *line_string = push_fancy_stringf(scratch, line_color, "%*lld", line_count_digit_count, line_number); Fancy_String *string = push_fancy_stringf(scratch, 0, line_color,
draw_fancy_string(app, face_id, line_string, p, Stag_Margin_Active, 0); "%*lld",
line_count_digit_count,
line_number);
draw_fancy_string(app, face_id, fcolor_zero(), string, p);
line_number += 1; line_number += 1;
} }
@ -292,8 +306,8 @@ draw_fps_hud(Application_Links *app, Frame_Info frame_info,
history_animation_dt[wrapped_index] = frame_info.animation_dt; history_animation_dt[wrapped_index] = frame_info.animation_dt;
history_frame_index[wrapped_index] = frame_info.index; history_frame_index[wrapped_index] = frame_info.index;
draw_rectangle(app, rect, 0.f, 0xFF000000); draw_rectangle(app, rect, 0.f, f_black);
draw_rectangle_outline(app, rect, 0.f, 1.f, 0xFFFFFFFF); draw_rectangle_outline(app, rect, 0.f, 1.f, f_white);
Vec2_f32 p = rect.p0; Vec2_f32 p = rect.p0;
@ -312,55 +326,55 @@ draw_fps_hud(Application_Links *app, Frame_Info frame_info,
dts[1] = history_animation_dt[j]; dts[1] = history_animation_dt[j];
i32 frame_index = history_frame_index[j]; i32 frame_index = history_frame_index[j];
Fancy_String_List list = {}; Fancy_Line list = {};
push_fancy_stringf(scratch, &list, pink , "FPS: "); push_fancy_stringf(scratch, &list, f_pink , "FPS: ");
push_fancy_stringf(scratch, &list, green, "["); push_fancy_stringf(scratch, &list, f_green, "[");
push_fancy_stringf(scratch, &list, white, "%5d", frame_index); push_fancy_stringf(scratch, &list, f_white, "%5d", frame_index);
push_fancy_stringf(scratch, &list, green, "]: "); push_fancy_stringf(scratch, &list, f_green, "]: ");
for (i32 k = 0; k < 2; k += 1){ for (i32 k = 0; k < 2; k += 1){
f32 dt = dts[k]; f32 dt = dts[k];
if (dt == 0.f){ if (dt == 0.f){
push_fancy_stringf(scratch, &list, white, "----------"); push_fancy_stringf(scratch, &list, f_white, "----------");
} }
else{ else{
push_fancy_stringf(scratch, &list, white, "%10.6f", dt); push_fancy_stringf(scratch, &list, f_white, "%10.6f", dt);
} }
push_fancy_stringf(scratch, &list, green, " | "); push_fancy_stringf(scratch, &list, f_green, " | ");
} }
draw_fancy_string(app, face_id, list.first, p, Stag_Default, 0, 0, V2(1.f, 0.f)); draw_fancy_line(app, face_id, fcolor_zero(), &list, p);
} }
} }
} }
function int_color function FColor
get_token_color_cpp(Token token){ get_token_color_cpp(Token token){
int_color result = Stag_Default; ID_Color color = Stag_Default;
switch (token.kind){ switch (token.kind){
case TokenBaseKind_Preprocessor: case TokenBaseKind_Preprocessor:
{ {
result = Stag_Preproc; color = Stag_Preproc;
}break; }break;
case TokenBaseKind_Keyword: case TokenBaseKind_Keyword:
{ {
result = Stag_Keyword; color = Stag_Keyword;
}break; }break;
case TokenBaseKind_Comment: case TokenBaseKind_Comment:
{ {
result = Stag_Comment; color = Stag_Comment;
}break; }break;
case TokenBaseKind_LiteralString: case TokenBaseKind_LiteralString:
{ {
result = Stag_Str_Constant; color = Stag_Str_Constant;
}break; }break;
case TokenBaseKind_LiteralInteger: case TokenBaseKind_LiteralInteger:
{ {
result = Stag_Int_Constant; color = Stag_Int_Constant;
}break; }break;
case TokenBaseKind_LiteralFloat: case TokenBaseKind_LiteralFloat:
{ {
result = Stag_Float_Constant; color = Stag_Float_Constant;
}break; }break;
default: default:
{ {
@ -368,7 +382,7 @@ get_token_color_cpp(Token token){
case TokenCppKind_LiteralTrue: case TokenCppKind_LiteralTrue:
case TokenCppKind_LiteralFalse: case TokenCppKind_LiteralFalse:
{ {
result = Stag_Bool_Constant; color = Stag_Bool_Constant;
}break; }break;
case TokenCppKind_LiteralCharacter: case TokenCppKind_LiteralCharacter:
case TokenCppKind_LiteralCharacterWide: case TokenCppKind_LiteralCharacterWide:
@ -376,16 +390,16 @@ get_token_color_cpp(Token token){
case TokenCppKind_LiteralCharacterUTF16: case TokenCppKind_LiteralCharacterUTF16:
case TokenCppKind_LiteralCharacterUTF32: case TokenCppKind_LiteralCharacterUTF32:
{ {
result = Stag_Char_Constant; color = Stag_Char_Constant;
}break; }break;
case TokenCppKind_PPIncludeFile: case TokenCppKind_PPIncludeFile:
{ {
result = Stag_Include; color = Stag_Include;
}break; }break;
} }
}break; }break;
} }
return(result); return(fcolor_id(color));
} }
function void function void
@ -398,8 +412,9 @@ draw_buffer_add_cpp_token_colors(Application_Links *app, Text_Layout_ID text_lay
if (token->pos >= visible_range.one_past_last){ if (token->pos >= visible_range.one_past_last){
break; break;
} }
int_color color = get_token_color_cpp(*token); FColor color = get_token_color_cpp(*token);
paint_text_color(app, text_layout_id, Ii64_size(token->pos, token->size), color); paint_text_color(app, text_layout_id, Ii64_size(token->pos, token->size),
color);
if (!token_it_inc_non_whitespace(&it)){ if (!token_it_inc_non_whitespace(&it)){
break; break;
} }
@ -472,7 +487,7 @@ get_enclosure_ranges(Application_Links *app, Arena *arena, Buffer_ID buffer, i64
function void function void
draw_enclosures(Application_Links *app, Text_Layout_ID text_layout_id, Buffer_ID buffer, draw_enclosures(Application_Links *app, Text_Layout_ID text_layout_id, Buffer_ID buffer,
i64 pos, u32 flags, Range_Highlight_Kind kind, i64 pos, u32 flags, Range_Highlight_Kind kind,
int_color *back_colors, int_color *fore_colors, i32 color_count){ FColor *back_colors, FColor *fore_colors, i32 color_count){
Scratch_Block scratch(app); Scratch_Block scratch(app);
Range_i64_Array ranges = get_enclosure_ranges(app, scratch, buffer, pos, flags); Range_i64_Array ranges = get_enclosure_ranges(app, scratch, buffer, pos, flags);
@ -530,7 +545,7 @@ draw_enclosures(Application_Links *app, Text_Layout_ID text_layout_id, Buffer_ID
function void function void
draw_scope_highlight(Application_Links *app, Buffer_ID buffer, Text_Layout_ID text_layout_id, draw_scope_highlight(Application_Links *app, Buffer_ID buffer, Text_Layout_ID text_layout_id,
i64 pos, int_color *colors, i32 color_count){ i64 pos, FColor *colors, i32 color_count){
draw_enclosures(app, text_layout_id, buffer, draw_enclosures(app, text_layout_id, buffer,
pos, FindNest_Scope, RangeHighlightKind_LineHighlight, pos, FindNest_Scope, RangeHighlightKind_LineHighlight,
colors, 0, color_count); colors, 0, color_count);
@ -538,7 +553,7 @@ draw_scope_highlight(Application_Links *app, Buffer_ID buffer, Text_Layout_ID te
function void function void
draw_paren_highlight(Application_Links *app, Buffer_ID buffer, Text_Layout_ID text_layout_id, draw_paren_highlight(Application_Links *app, Buffer_ID buffer, Text_Layout_ID text_layout_id,
i64 pos, int_color *colors, i32 color_count){ i64 pos, FColor *colors, i32 color_count){
Token_Array token_array = get_token_array_from_buffer(app, buffer); Token_Array token_array = get_token_array_from_buffer(app, buffer);
if (token_array.tokens != 0){ if (token_array.tokens != 0){
Token_Iterator_Array it = token_iterator_pos(0, &token_array, pos); Token_Iterator_Array it = token_iterator_pos(0, &token_array, pos);
@ -563,7 +578,7 @@ draw_paren_highlight(Application_Links *app, Buffer_ID buffer, Text_Layout_ID te
function void function void
draw_jump_highlights(Application_Links *app, Buffer_ID buffer, Text_Layout_ID text_layout_id, draw_jump_highlights(Application_Links *app, Buffer_ID buffer, Text_Layout_ID text_layout_id,
Buffer_ID jump_buffer, int_color line_color){ Buffer_ID jump_buffer, FColor line_color){
Scratch_Block scratch(app); Scratch_Block scratch(app);
if (jump_buffer != 0){ if (jump_buffer != 0){
Managed_Scope scopes[2]; Managed_Scope scopes[2];
@ -599,8 +614,10 @@ draw_highlight_range(Application_Links *app, View_ID view_id,
Marker marker_range[2]; Marker marker_range[2];
if (managed_object_load_data(app, *highlight, 0, 2, marker_range)){ if (managed_object_load_data(app, *highlight, 0, 2, marker_range)){
Range_i64 range = Ii64(marker_range[0].pos, marker_range[1].pos); Range_i64 range = Ii64(marker_range[0].pos, marker_range[1].pos);
draw_character_block(app, text_layout_id, range, roundness, Stag_Highlight); draw_character_block(app, text_layout_id, range, roundness,
paint_text_color(app, text_layout_id, range, Stag_At_Highlight); fcolor_id(Stag_Highlight));
paint_text_color(app, text_layout_id, range,
fcolor_id(Stag_At_Highlight));
} }
} }
} }
@ -616,13 +633,21 @@ draw_original_4coder_style_cursor_mark_highlight(Application_Links *app, View_ID
i64 cursor_pos = view_get_cursor_pos(app, view_id); i64 cursor_pos = view_get_cursor_pos(app, view_id);
i64 mark_pos = view_get_mark_pos(app, view_id); i64 mark_pos = view_get_mark_pos(app, view_id);
if (is_active_view){ if (is_active_view){
draw_character_block(app, text_layout_id, cursor_pos, roundness, Stag_Cursor); draw_character_block(app, text_layout_id, cursor_pos, roundness,
paint_text_color_pos(app, text_layout_id, cursor_pos, Stag_At_Cursor); fcolor_id(Stag_Cursor));
draw_character_wire_frame(app, text_layout_id, mark_pos, roundness, outline_thickness, Stag_Mark); paint_text_color_pos(app, text_layout_id, cursor_pos,
fcolor_id(Stag_At_Cursor));
draw_character_wire_frame(app, text_layout_id, mark_pos,
roundness, outline_thickness,
fcolor_id(Stag_Mark));
} }
else{ else{
draw_character_wire_frame(app, text_layout_id, mark_pos, roundness, outline_thickness, Stag_Mark); draw_character_wire_frame(app, text_layout_id, mark_pos,
draw_character_wire_frame(app, text_layout_id, cursor_pos, roundness, outline_thickness, Stag_Cursor); roundness, outline_thickness,
fcolor_id(Stag_Mark));
draw_character_wire_frame(app, text_layout_id, cursor_pos,
roundness, outline_thickness,
fcolor_id(Stag_Cursor));
} }
} }
} }
@ -637,10 +662,12 @@ draw_notepad_style_cursor_highlight(Application_Links *app, View_ID view_id,
i64 mark_pos = view_get_mark_pos(app, view_id); i64 mark_pos = view_get_mark_pos(app, view_id);
if (cursor_pos != mark_pos){ if (cursor_pos != mark_pos){
Range_i64 range = Ii64(cursor_pos, mark_pos); Range_i64 range = Ii64(cursor_pos, mark_pos);
draw_character_block(app, text_layout_id, range, roundness, Stag_Highlight); draw_character_block(app, text_layout_id, range, roundness,
paint_text_color(app, text_layout_id, range, Stag_At_Highlight); fcolor_id(Stag_Highlight));
paint_text_color(app, text_layout_id, range,
fcolor_id(Stag_At_Highlight));
} }
draw_character_i_bar(app, text_layout_id, cursor_pos, Stag_Cursor); draw_character_i_bar(app, text_layout_id, cursor_pos, fcolor_id(Stag_Cursor));
} }
} }

View File

@ -9,7 +9,7 @@
struct Comment_Highlight_Pair{ struct Comment_Highlight_Pair{
String_Const_u8 needle; String_Const_u8 needle;
int_color color; FColor color;
}; };
typedef i32 Range_Highlight_Kind; typedef i32 Range_Highlight_Kind;

View File

@ -4,258 +4,520 @@
// TOP // TOP
static Fancy_Color function FColor
fancy_blend(id_color a, f32 t, id_color b){ fcolor_argb(ARGB_Color color){
Fancy_Color result = {}; FColor result = {};
result.index_a = (u16)a; result.argb = color;
result.index_b = (u16)b; if (result.a_byte == 0){
result.table_a = 1; result.argb = 0;
result.table_b = 1;
result.c_b = (u8)(clamp(0, 255.0f*t, 255.0f));
result.c_a = 255 - result.c_b;
return(result);
}
static Fancy_Color
fancy_id(id_color a){
Fancy_Color result = {};
result.index_a = (u16)a;
result.index_b = 0;
result.table_a = 1;
result.table_b = 0;
result.c_a = 255;
result.c_b = 0;
return(result);
}
static Fancy_Color
fancy_rgba(argb_color color){
Fancy_Color result = {};
result.rgba = color;
result.code = 0;
return(result);
}
static Fancy_Color
fancy_rgba(f32 r, f32 g, f32 b, f32 a){
Fancy_Color result = fancy_rgba(pack_color4(V4(r, g, b, a)));
return(result);
}
static Fancy_Color
fancy_resolve_to_rgba(Application_Links *app, Fancy_Color source){
if (source.code != 0){
Vec4 a = unpack_color4(finalize_color(app, source.index_a));
Vec4 b = unpack_color4(finalize_color(app, source.index_b));
f32 ca = (f32)source.c_a/255.0f;
f32 cb = (f32)source.c_b/255.0f;
Vec4 value = ca*a + cb*b;
source.rgba = pack_color4(value);
source.code = 0;
} }
return(source); return(result);
}
function FColor
fcolor_argb(Vec4_f32 color){
return(fcolor_argb(pack_color(color)));
}
function FColor
fcolor_argb(f32 r, f32 g, f32 b, f32 a){
return(fcolor_argb(pack_color(V4f32(r, g, b, a))));
} }
static Fancy_Color function FColor
fancy_pass_through(void){ fcolor_id(ID_Color id){
Fancy_Color result = {}; FColor result = {};
result.id = id;
return(result); return(result);
} }
static int_color function ARGB_Color
int_color_from(Application_Links *app, Fancy_Color source){ argb_color_blend(ARGB_Color a, f32 at, ARGB_Color b, f32 bt){
int_color result = {}; Vec4_f32 av = unpack_color(a);
if ((source.c_a == 255) && (source.c_b == 0)){ Vec4_f32 bv = unpack_color(b);
result = source.index_a; Vec4_f32 value = at*av + bt*bv;
return(pack_color(value));
}
function ARGB_Color
argb_color_blend(ARGB_Color a, f32 t, ARGB_Color b){
return(argb_color_blend(a, 1.f - t, b, t));
}
function ARGB_Color
fcolor_resolve_to_argb(Application_Links *app, FColor color){
ARGB_Color result = 0;
if (color.a_byte == 0){
if (color.id != 0){
result = finalize_color(app, color.id);
}
} }
else{ else{
source = fancy_resolve_to_rgba(app, source); result = color.argb;
result = source.rgba;
} }
return(result); return(result);
} }
static b32 function FColor
is_valid(Fancy_Color source){ fcolor_change_alpha(Application_Links *app, FColor color, f32 alpha){
b32 result = !((source.code == 0) && (source.rgba == 0)); Vec4_f32 v = unpack_color(fcolor_resolve_to_argb(app, color));
v.a = alpha;
return(fcolor_argb(pack_color(v)));
}
function FColor
fcolor_blend(Application_Links *app, FColor a, f32 at, FColor b, f32 bt){
ARGB_Color a_argb = fcolor_resolve_to_argb(app, a);
ARGB_Color b_argb = fcolor_resolve_to_argb(app, b);
return(fcolor_argb(argb_color_blend(a_argb, at, b_argb, bt)));
}
function FColor
fcolor_blend(Application_Links *app, FColor a, f32 t, FColor b){
return(fcolor_blend(app, a, 1.f - t, b, t));
}
function FColor
fcolor_zero(void){
FColor result = {};
return(result); return(result);
} }
static void function b32
fancy_string_list_push(Fancy_String_List *list, Fancy_String *string){ fcolor_is_valid(FColor color){
list->last = (list->last ? list->last->next : list->first) = string; return(color.argb != 0);
} }
static Fancy_String * ////////////////////////////////
push_fancy_string(Arena *arena, Fancy_String_List *list, Fancy_Color fore, Fancy_Color back, String_Const_u8 value){
function void
push_fancy_string(Fancy_Line *line, Fancy_String *string){
sll_queue_push(line->first, line->last, string);
}
function void
push_fancy_line(Fancy_Block *block, Fancy_Line *line){
sll_queue_push(block->first, block->last, line);
block->line_count += 1;
}
////////////////////////////////
function Fancy_String*
push_fancy_string(Arena *arena, Fancy_Line *line, Face_ID face, FColor fore,
f32 pre_margin, f32 post_margin, String_Const_u8 value){
Fancy_String *result = push_array_zero(arena, Fancy_String, 1); Fancy_String *result = push_array_zero(arena, Fancy_String, 1);
result->value = push_string_copy(arena, value); result->value = value;
result->face = face;
result->fore = fore; result->fore = fore;
result->back = back; result->pre_margin = pre_margin;
if (list != 0){ result->post_margin = post_margin;
fancy_string_list_push(list, result); if (line != 0){
push_fancy_string(line, result);
} }
return(result); return(result);
} }
static Fancy_String * function Fancy_String*
push_fancy_string(Arena *arena, Fancy_Color fore, Fancy_Color back, String_Const_u8 value){ push_fancy_string(Arena *arena, Fancy_Line *line, Face_ID face, FColor fore,
return(push_fancy_string(arena, 0, fore, back, value)); String_Const_u8 value){
return(push_fancy_string(arena, line, face, fore, 0, 0, value));
}
function Fancy_String*
push_fancy_string(Arena *arena, Fancy_Line *line, Face_ID face,
f32 pre_margin, f32 post_margin, String_Const_u8 value){
return(push_fancy_string(arena, line, face, fcolor_zero(),
pre_margin, post_margin, value));
}
function Fancy_String*
push_fancy_string(Arena *arena, Fancy_Line *line, FColor fore,
f32 pre_margin, f32 post_margin, String_Const_u8 value){
return(push_fancy_string(arena, line, 0, fore, pre_margin, post_margin, value));
}
function Fancy_String*
push_fancy_string(Arena *arena, Fancy_Line *line, Face_ID face, String_Const_u8 value){
return(push_fancy_string(arena, line, face, fcolor_zero(), 0, 0, value));
}
function Fancy_String*
push_fancy_string(Arena *arena, Fancy_Line *line, FColor color, String_Const_u8 value){
return(push_fancy_string(arena, line, 0, color, 0, 0, value));
}
function Fancy_String*
push_fancy_string(Arena *arena, Fancy_Line *line, f32 pre_margn, f32 post_margin,
String_Const_u8 value){
return(push_fancy_string(arena, line, 0, fcolor_zero(), pre_margn, post_margin,
value));
}
function Fancy_String*
push_fancy_string(Arena *arena, Fancy_Line *line, String_Const_u8 value){
return(push_fancy_string(arena, line, 0, fcolor_zero(), 0, 0, value));
} }
static Fancy_String * ////////////////////////////////
push_fancy_string(Arena *arena, Fancy_String_List *list, Fancy_Color fore, String_Const_u8 value){
return(push_fancy_string(arena, list, fore, fancy_pass_through(), value)); function Fancy_String*
push_fancy_stringfv(Arena *arena, Fancy_Line *line, Face_ID face, FColor fore,
f32 pre_margin, f32 post_margin,
char *format, va_list args){
return(push_fancy_string(arena, line, face, fore, pre_margin, post_margin,
push_u8_stringfv(arena, format, args)));
}
function Fancy_String*
push_fancy_stringfv(Arena *arena, Fancy_Line *line, Face_ID face, FColor fore,
char *format, va_list args){
return(push_fancy_stringfv(arena, line, face, fore, 0, 0, format, args));
}
function Fancy_String*
push_fancy_stringfv(Arena *arena, Fancy_Line *line, Face_ID face,
f32 pre_margin, f32 post_margin,
char *format, va_list args){
return(push_fancy_stringfv(arena, line, face, fcolor_zero(),
pre_margin, post_margin, format, args));
}
function Fancy_String*
push_fancy_stringfv(Arena *arena, Fancy_Line *line, FColor fore,
f32 pre_margin, f32 post_margin,
char *format, va_list args){
return(push_fancy_stringfv(arena, line, 0, fore, pre_margin, post_margin,
format, args));
}
function Fancy_String*
push_fancy_stringfv(Arena *arena, Fancy_Line *line, Face_ID face,
char *format, va_list args){
return(push_fancy_stringfv(arena, line, face, fcolor_zero(), 0, 0,
format, args));
}
function Fancy_String*
push_fancy_stringfv(Arena *arena, Fancy_Line *line, FColor color,
char *format, va_list args){
return(push_fancy_stringfv(arena, line, 0, color, 0, 0, format, args));
}
function Fancy_String*
push_fancy_stringfv(Arena *arena, Fancy_Line *line, f32 pre_margn, f32 post_margin,
char *format, va_list args){
return(push_fancy_stringfv(arena, line, 0, fcolor_zero(), pre_margn, post_margin,
format, args));
}
function Fancy_String*
push_fancy_stringfv(Arena *arena, Fancy_Line *line,
char *format, va_list args){
return(push_fancy_stringfv(arena, line, 0, fcolor_zero(), 0, 0, format, args));
} }
static Fancy_String * #define StringFBegin() va_list args; va_start(args, format)
push_fancy_string(Arena *arena, Fancy_Color fore, String_Const_u8 value){ #define StringFPass(N) Fancy_String *result = N
return(push_fancy_string(arena, 0, fore, fancy_pass_through(), value)); #define StringFEnd() va_end(args); return(result)
function Fancy_String*
push_fancy_stringf(Arena *arena, Fancy_Line *line, Face_ID face, FColor fore,
f32 pre_margin, f32 post_margin,
char *format, ...){
StringFBegin();
StringFPass(push_fancy_string(arena, line, face, fore, pre_margin, post_margin,
push_u8_stringfv(arena, format, args)));
StringFEnd();
}
function Fancy_String*
push_fancy_stringf(Arena *arena, Fancy_Line *line, Face_ID face, FColor fore,
char *format, ...){
StringFBegin();
StringFPass(push_fancy_stringfv(arena, line, face, fore, 0, 0, format, args));
StringFEnd();
}
function Fancy_String*
push_fancy_stringf(Arena *arena, Fancy_Line *line, Face_ID face,
f32 pre_margin, f32 post_margin,
char *format, ...){
StringFBegin();
StringFPass(push_fancy_stringfv(arena, line, face, fcolor_zero(),
pre_margin, post_margin, format, args));
StringFEnd();
}
function Fancy_String*
push_fancy_stringf(Arena *arena, Fancy_Line *line, FColor fore,
f32 pre_margin, f32 post_margin,
char *format, ...){
StringFBegin();
StringFPass(push_fancy_stringfv(arena, line, 0, fore, pre_margin, post_margin,
format, args));
StringFEnd();
}
function Fancy_String*
push_fancy_stringf(Arena *arena, Fancy_Line *line, Face_ID face,
char *format, ...){
StringFBegin();
StringFPass(push_fancy_stringfv(arena, line, face, fcolor_zero(), 0, 0,
format, args));
StringFEnd();
}
function Fancy_String*
push_fancy_stringf(Arena *arena, Fancy_Line *line, FColor color,
char *format, ...){
StringFBegin();
StringFPass(push_fancy_stringfv(arena, line, 0, color, 0, 0, format, args));
StringFEnd();
}
function Fancy_String*
push_fancy_stringf(Arena *arena, Fancy_Line *line, f32 pre_margn, f32 post_margin,
char *format, ...){
StringFBegin();
StringFPass(push_fancy_stringfv(arena, line, 0, fcolor_zero(),
pre_margn, post_margin, format, args));
StringFEnd();
}
function Fancy_String*
push_fancy_stringf(Arena *arena, Fancy_Line *line,
char *format, ...){
StringFBegin();
StringFPass(push_fancy_stringfv(arena, line, 0, fcolor_zero(), 0, 0, format, args));
StringFEnd();
} }
static Fancy_String * ////////////////////////////////
push_fancy_string(Arena *arena, Fancy_String_List *list, String_Const_u8 value){
return(push_fancy_string(arena, list, fancy_pass_through(), fancy_pass_through(), value));
}
static Fancy_String * function Fancy_Line*
push_fancy_string(Arena *arena, String_Const_u8 value){ push_fancy_line(Arena *arena, Fancy_Block *block, Face_ID face, FColor fore,
return(push_fancy_string(arena, 0, fancy_pass_through(), fancy_pass_through(), value)); String_Const_u8 text){
} Fancy_Line *line = push_array_zero(arena, Fancy_Line, 1);
line->face = face;
static Fancy_String* line->fore = fore;
push_fancy_stringfv(Arena *arena, Fancy_String_List *list, Fancy_Color fore, Fancy_Color back, char *format, va_list args){ if (text.size != 0){
String_Const_u8 str = push_u8_stringfv(arena, format, args); push_fancy_string(arena, line, text);
Fancy_String *result = 0;
if (str.size > 0){
result = push_fancy_string(arena, list, fore, back, str);
} }
return(result); if (block != 0){
push_fancy_line(block, line);
}
return(line);
}
function Fancy_Line*
push_fancy_line(Arena *arena, Fancy_Block *block, Face_ID face, FColor fcolor){
return(push_fancy_line(arena, block, face, fcolor, SCu8()));
}
function Fancy_Line*
push_fancy_line(Arena *arena, Fancy_Block *block, Face_ID face, String_Const_u8 val){
return(push_fancy_line(arena, block, face, fcolor_zero(), val));
}
function Fancy_Line*
push_fancy_line(Arena *arena, Fancy_Block *block, FColor color, String_Const_u8 val){
return(push_fancy_line(arena, block, 0, color, val));
}
function Fancy_Line*
push_fancy_line(Arena *arena, Fancy_Block *block, Face_ID face){
return(push_fancy_line(arena, block, face, fcolor_zero(), SCu8()));
}
function Fancy_Line*
push_fancy_line(Arena *arena, Fancy_Block *block, FColor color){
return(push_fancy_line(arena, block, 0, color, SCu8()));
}
function Fancy_Line*
push_fancy_line(Arena *arena, Fancy_Block *block, String_Const_u8 val){
return(push_fancy_line(arena, block, 0, fcolor_zero(), val));
}
function Fancy_Line*
push_fancy_line(Arena *arena, Fancy_Block *block){
return(push_fancy_line(arena, block, 0, fcolor_zero(), SCu8()));
} }
static Fancy_String* ////////////////////////////////
push_fancy_stringf(Arena *arena, Fancy_String_List *list, Fancy_Color fore, Fancy_Color back, char *format, ...){
va_list args;
va_start(args, format);
Fancy_String *result = push_fancy_stringfv(arena, list, fore, back, format, args);
va_end(args);
return(result);
}
static Fancy_String* function f32
push_fancy_stringf(Arena *arena, Fancy_String_List *list, Fancy_Color fore, char *format, ...){ get_fancy_string_width__inner(Application_Links *app, Face_ID face,
va_list args; Fancy_String *string){
va_start(args, format); f32 result = 0.f;
Fancy_String *result = push_fancy_stringfv(arena, list, fore, fancy_pass_through(), format, args);
va_end(args);
return(result);
}
static Fancy_String*
push_fancy_stringf(Arena *arena, Fancy_String_List *list, char *format, ...){
va_list args;
va_start(args, format);
Fancy_String *result = push_fancy_stringfv(arena, list, fancy_pass_through(), fancy_pass_through(), format, args);
va_end(args);
return(result);
}
static Fancy_String*
push_fancy_stringf(Arena *arena, Fancy_Color fore, Fancy_Color back, char *format, ...){
va_list args;
va_start(args, format);
Fancy_String *result = push_fancy_stringfv(arena, 0, fore, back, format, args);
va_end(args);
return(result);
}
static Fancy_String*
push_fancy_stringf(Arena *arena, Fancy_Color fore, char *format, ...){
va_list args;
va_start(args, format);
Fancy_String *result = push_fancy_stringfv(arena, 0, fore, fancy_pass_through(), format, args);
va_end(args);
return(result);
}
static Fancy_String*
push_fancy_stringf(Arena *arena, char *format, ...){
va_list args;
va_start(args, format);
Fancy_String *result = push_fancy_stringfv(arena, 0, fancy_pass_through(), fancy_pass_through(), format, args);
va_end(args);
return(result);
}
static Fancy_String_List
fancy_string_list_single(Fancy_String *fancy_string){
Fancy_String_List list = {};
list.first = fancy_string;
list.last = fancy_string;
return(list);
}
static Vec2_f32
draw_fancy_string(Application_Links *app, Face_ID font_id, Fancy_String *string,
Vec2_f32 P, int_color fore, int_color back, u32 flags, Vec2_f32 dP){
for (;string != 0; for (;string != 0;
string = string->next){ string = string->next){
Face_ID use_font_id = (string->font_id) ? string->font_id : font_id; Face_ID use_face = face;
int_color use_fore = is_valid(string->fore) ? int_color_from(app, string->fore) : fore; if (string->face != 0){
use_face = string->face;
f32 adv = get_string_advance(app, use_font_id, string->value); }
if (use_face != 0){
// TODO(casey): need to fill the background here, but I don't know the line result += get_string_advance(app, use_face, string->value);
// height, and I can't actually render filled shapes, so, like, I can't Face_Metrics metrics = get_face_metrics(app, use_face);
// properly do dP :( f32 normal_advance = metrics.normal_advance;
result += (string->pre_margin + string->post_margin)*normal_advance;
Face_Metrics metrics = get_face_metrics(app, font_id); }
P += (string->pre_margin*metrics.normal_advance)*dP;
draw_string_oriented(app, use_font_id, string->value, P, use_fore, flags, dP);
P += (adv + string->post_margin*metrics.normal_advance)*dP;
} }
return(P); return(result);
} }
static Vec2_f32 function f32
draw_fancy_string(Application_Links *app, Face_ID font_id, Fancy_String *string, get_fancy_string_height__inner(Application_Links *app, Face_ID face,
Vec2_f32 P, int_color fore, int_color back){ Fancy_String *string){
return(draw_fancy_string(app, font_id, string, P, fore, back, 0, V2(1.f, 0.f))); f32 result = 0.f;
} if (face != 0){
Face_Metrics metrics = get_face_metrics(app, face);
static f32 result = metrics.line_height;
get_fancy_string_advance(Application_Links *app, Face_ID font_id, Fancy_String *string){ }
f32 advance = 0.f;
for (;string != 0; for (;string != 0;
string = string->next){ string = string->next){
Face_ID use_font_id = (string->font_id) ? string->font_id : font_id; if (string->face != 0){
f32 adv = get_string_advance(app, use_font_id, string->value); Face_ID use_face = string->face;
Face_Metrics metrics = get_face_metrics(app, font_id); Face_Metrics metrics = get_face_metrics(app, use_face);
advance += (string->pre_margin + string->post_margin)*metrics.normal_advance + adv; result = max(result, metrics.line_height);
}
} }
return(advance); return(result);
} }
static void function Vec2_f32
draw_rectangle_fancy(Application_Links *app, Rect_f32 rect, Fancy_Color fancy_color){ draw_fancy_string__inner(Application_Links *app, Face_ID face, FColor fore,
int_color color = int_color_from(app, fancy_color); Fancy_String *string, Vec2_f32 p, u32 flags, Vec2_f32 delta){
draw_rectangle(app, rect, 0.f, color); for (;string != 0;
string = string->next){
Face_ID use_face = face;
if (string->face != 0){
use_face = string->face;
}
FColor use_fore = fore;
if (fcolor_is_valid(string->fore)){
use_fore = string->fore;
}
if (use_face != 0){
Face_Metrics metrics = get_face_metrics(app, use_face);
if (fcolor_is_valid(use_fore)){
Vec2_f32 margin_delta = delta*metrics.normal_advance;
p += margin_delta*string->pre_margin;
p = draw_string_oriented(app, use_face, use_fore,
string->value, p, flags, delta);
p += margin_delta*string->post_margin;
}
else{
f32 adv =
(string->pre_margin + string->post_margin)*metrics.normal_advance;
adv += get_string_advance(app, use_face, string->value);
p += adv*delta;
}
}
}
return(p);
}
function f32
get_fancy_string_width(Application_Links *app, Face_ID face,
Fancy_String *string){
Fancy_String *next = string->next;
string->next = 0;
f32 result = get_fancy_string_width__inner(app, face, string);
string->next = next;
return(result);
}
function f32
get_fancy_string_height(Application_Links *app, Face_ID face,
Fancy_String *string){
Fancy_String *next = string->next;
string->next = 0;
f32 result = get_fancy_string_height__inner(app, face, string);
string->next = next;
return(result);
}
function Vec2_f32
draw_fancy_string(Application_Links *app, Face_ID face, FColor fore,
Fancy_String *string, Vec2_f32 p, u32 flags, Vec2_f32 delta){
Fancy_String *next = string->next;
string->next = 0;
Vec2_f32 result = draw_fancy_string__inner(app, face, fore,
string, p, flags, delta);
string->next = next;
return(result);
}
function f32
get_fancy_line_width(Application_Links *app, Face_ID face, Fancy_Line *line){
if (line->face != 0){
face = line->face;
}
return(get_fancy_string_width__inner(app, face, line->first));
}
function f32
get_fancy_line_height(Application_Links *app, Face_ID face, Fancy_Line *line){
if (line->face != 0){
face = line->face;
}
return(get_fancy_string_height__inner(app, face, line->first));
}
function Vec2_f32
draw_fancy_line(Application_Links *app, Face_ID face, FColor fore,
Fancy_Line *line, Vec2_f32 p, u32 flags, Vec2_f32 delta){
if (line->face != 0){
face = line->face;
}
if (fcolor_is_valid(line->fore)){
fore = line->fore;
}
return(draw_fancy_string__inner(app, face, fore,
line->first, p, flags, delta));
}
function f32
get_fancy_block_width(Application_Links *app, Face_ID face, Fancy_Block *block){
f32 width = 0.f;
for (Fancy_Line *node = block->first;
node != 0;
node = node->next){
f32 w = get_fancy_line_width(app, face, node);
width = max(width, w);
}
return(width);
}
function f32
get_fancy_block_height(Application_Links *app, Face_ID face, Fancy_Block *block){
f32 height = 0.f;
for (Fancy_Line *node = block->first;
node != 0;
node = node->next){
height += get_fancy_line_height(app, face, node);
}
return(height);
}
function Vec2_f32
get_fancy_block_dim(Application_Links *app, Face_ID face, Fancy_Block *block){
Vec2_f32 result = {};
result.x = get_fancy_block_width(app, face, block);
result.y = get_fancy_block_height(app, face, block);
return(result);
}
function void
draw_fancy_block(Application_Links *app, Face_ID face, FColor fore,
Fancy_Block *block, Vec2_f32 p, u32 flags, Vec2_f32 delta){
Face_Metrics metrics = get_face_metrics(app, face);
for (Fancy_Line *node = block->first;
node != 0;
node = node->next){
draw_fancy_line(app, face, fore, node, p, flags, delta);
p.y += get_fancy_line_height(app, face, node);
}
}
function Vec2_f32
draw_fancy_string(Application_Links *app, Face_ID face, FColor fore,
Fancy_String *string, Vec2_f32 p){
return(draw_fancy_string(app, face, fore, string, p, 0, V2f32(1.f, 0.f)));
}
function Vec2_f32
draw_fancy_line(Application_Links *app, Face_ID face, FColor fore,
Fancy_Line *line, Vec2_f32 p){
return(draw_fancy_line(app, face, fore, line, p, 0, V2f32(1.f, 0.f)));
}
function void
draw_fancy_block(Application_Links *app, Face_ID face, FColor fore,
Fancy_Block *block, Vec2_f32 p){
draw_fancy_block(app, face, fore, block, p, 0, V2f32(1.f, 0.f));
} }
//////////////////////////////// ////////////////////////////////
// TODO(allen): beta: color palette // TODO(allen): beta: color palette
global Fancy_Color white = fancy_rgba(1.0f, 1.0f, 1.0f, 1.0f); global FColor f_white = fcolor_argb(1.0f, 1.0f, 1.0f, 1.0f);
global Fancy_Color light_gray = fancy_rgba(0.7f, 0.7f, 0.7f, 1.0f); global FColor f_light_gray = fcolor_argb(0.7f, 0.7f, 0.7f, 1.0f);
global Fancy_Color gray = fancy_rgba(0.5f, 0.5f, 0.5f, 1.0f); global FColor f_gray = fcolor_argb(0.5f, 0.5f, 0.5f, 1.0f);
global Fancy_Color dark_gray = fancy_rgba(0.3f, 0.3f, 0.3f, 1.0f); global FColor f_dark_gray = fcolor_argb(0.3f, 0.3f, 0.3f, 1.0f);
global Fancy_Color black = fancy_rgba(0.0f, 0.0f, 0.0f, 1.0f); global FColor f_black = fcolor_argb(0.0f, 0.0f, 0.0f, 1.0f);
global Fancy_Color pink = fancy_rgba(1.0f, 0.0f, 1.0f, 1.0f); global FColor f_pink = fcolor_argb(1.0f, 0.0f, 1.0f, 1.0f);
global Fancy_Color green = fancy_rgba(0.0f, 1.0f, 0.0f, 1.0f); global FColor f_green = fcolor_argb(0.0f, 1.0f, 0.0f, 1.0f);
// BOTTOM // BOTTOM

View File

@ -1,50 +0,0 @@
/*
* Fancy string - immediate mode renderer for colored strings
*/
// TOP
#if !defined(FCODER_FANCY_H)
#define FCODER_FANCY_H
struct Fancy_Color{
union{
struct{
id_color index_a;
id_color index_b;
};
u32 rgba;
};
union{
struct{
u8 table_a;
u8 table_b;
u8 c_a;
u8 c_b;
};
u32 code;
};
};
struct Fancy_String{
Fancy_String *next;
String_Const_u8 value;
Face_ID font_id;
Fancy_Color fore;
Fancy_Color back;
f32 pre_margin;
f32 post_margin;
};
struct Fancy_String_List{
Fancy_String *first;
Fancy_String *last;
};
#endif
// BOTTOM

View File

@ -186,15 +186,14 @@ lister_render(Application_Links *app, Frame_Info frame_info, View_ID view){
} }
{ {
Fancy_String_List text_field = {}; Fancy_Line text_field = {};
push_fancy_string(scratch, &text_field, fancy_id(Stag_Pop1), push_fancy_string(scratch, &text_field, fcolor_id(Stag_Pop1),
lister->query.string); lister->query.string);
push_fancy_stringf(scratch, &text_field, fancy_id(Stag_Pop1), " "); push_fancy_stringf(scratch, &text_field, " ");
push_fancy_string(scratch, &text_field, fancy_id(Stag_Default), push_fancy_string(scratch, &text_field, fcolor_id(Stag_Default),
lister->text_field.string); lister->text_field.string);
draw_fancy_string(app, face_id, text_field.first, draw_fancy_line(app, face_id, fcolor_zero(), &text_field,
V2f32(text_field_rect.x0 + 3.f, text_field_rect.y0), V2f32(text_field_rect.x0 + 3.f, text_field_rect.y0));
Stag_Default, Stag_Back, 0, V2f32(1.f, 0.f));
} }
Range_f32 x = rect_range_x(list_rect); Range_f32 x = rect_range_x(list_rect);
@ -272,15 +271,15 @@ lister_render(Application_Links *app, Frame_Info frame_info, View_ID view){
} }
draw_rectangle(app, item_rect, 6.f, get_margin_color(highlight)); draw_rectangle(app, item_rect, 6.f, get_margin_color(highlight));
draw_rectangle(app, item_inner, 6.f, Stag_Back); draw_rectangle(app, item_inner, 6.f, fcolor_id(Stag_Back));
Fancy_String_List line = {}; Fancy_Line line = {};
push_fancy_string(scratch, &line, fancy_id(Stag_Default), node->string); push_fancy_string(scratch, &line, fcolor_id(Stag_Default), node->string);
push_fancy_stringf(scratch, &line, fancy_id(Stag_Default), " "); push_fancy_stringf(scratch, &line, " ");
push_fancy_string(scratch, &line, fancy_id(Stag_Pop2), node->status); push_fancy_string(scratch, &line, fcolor_id(Stag_Pop2), node->status);
Vec2_f32 p = V2f32(item_inner.x0 + 3.f, item_inner.y0 + (block_height - line_height)*0.5f); Vec2_f32 p = item_inner.p0 + V2f32(3.f, (block_height - line_height)*0.5f);
draw_fancy_string(app, face_id, line.first, p, Stag_Default, 0, 0, V2(1.f, 0.f)); draw_fancy_line(app, face_id, fcolor_zero(), &line, p);
} }
draw_set_clip(app, prev_clip); draw_set_clip(app, prev_clip);

View File

@ -646,19 +646,20 @@ log_parse_fill(Application_Links *app, Buffer_ID buffer){
} }
internal void internal void
log_graph_render__tag(Arena *arena, Fancy_String_List *line, Log_Parse *log, Log_Tag *tag){ log_graph_render__tag(Arena *arena, Fancy_Line *line,
Log_Parse *log, Log_Tag *tag){
String_Const_u8 tag_name = log_parse__get_string(log, tag->name); String_Const_u8 tag_name = log_parse__get_string(log, tag->name);
push_fancy_stringf(arena, line, white, "["); push_fancy_stringf(arena, line, f_white, "[");
push_fancy_string(arena, line, green, tag_name); push_fancy_string(arena, line, f_green, tag_name);
push_fancy_stringf(arena, line, white, "="); push_fancy_stringf(arena, line, f_white, "=");
if (tag->value.kind == LogTagKind_Integer){ if (tag->value.kind == LogTagKind_Integer){
push_fancy_stringf(arena, line, pink, "0x%llx", tag->value.value_s); push_fancy_stringf(arena, line, f_pink, "0x%llx", tag->value.value_s);
} }
else if (tag->value.kind == LogTagKind_String){ else if (tag->value.kind == LogTagKind_String){
String_Const_u8 value = log_parse__get_string(log, tag->value.value); String_Const_u8 value = log_parse__get_string(log, tag->value.value);
push_fancy_string(arena, line, pink, value); push_fancy_string(arena, line, f_pink, value);
} }
push_fancy_stringf(arena, line, white, "]"); push_fancy_stringf(arena, line, f_white, "]");
} }
internal void internal void
@ -671,8 +672,9 @@ log_graph_render(Application_Links *app, Frame_Info frame_info, View_ID view){
Rect_f32 view_rect = view_get_screen_rect(app, view); Rect_f32 view_rect = view_get_screen_rect(app, view);
Rect_f32 inner = rect_inner(view_rect, 3); Rect_f32 inner = rect_inner(view_rect, 3);
draw_rectangle(app, view_rect, 0.f, draw_rectangle(app, view_rect, 0.f,
get_margin_color(is_active_view?UIHighlight_Active:UIHighlight_None)); get_margin_color(is_active_view?
draw_rectangle(app, inner, 0.f, Stag_Back); UIHighlight_Active:UIHighlight_None));
draw_rectangle(app, inner, 0.f, fcolor_id(Stag_Back));
Rect_f32 prev_clip = draw_set_clip(app, inner); Rect_f32 prev_clip = draw_set_clip(app, inner);
//////////////////////////////// ////////////////////////////////
@ -710,23 +712,23 @@ log_graph_render(Application_Links *app, Frame_Info frame_info, View_ID view){
Rect_f32 box_inner = rect_inner(box, 3.f); Rect_f32 box_inner = rect_inner(box, 3.f);
Fancy_Color margin_color = dark_gray; FColor margin_color = f_dark_gray;
if (!in_details_region && hover_event == 0 && rect_contains_point(box, m_p)){ if (!in_details_region && hover_event == 0 && rect_contains_point(box, m_p)){
margin_color = gray; margin_color = f_gray;
hover_event = box_node->event; hover_event = box_node->event;
} }
if (box_node->event == log_graph.selected_event){ if (box_node->event == log_graph.selected_event){
margin_color = light_gray; margin_color = f_light_gray;
} }
draw_rectangle_fancy(app, box , margin_color); draw_rectangle(app, box , 0.f, margin_color);
draw_rectangle_fancy(app, box_inner, black ); draw_rectangle(app, box_inner, 0.f, f_black );
Log_Event *event = box_node->event; Log_Event *event = box_node->event;
String_Const_u8 event_name = log_parse__get_string(&log_parse, event->event_name); String_Const_u8 event_name = log_parse__get_string(&log_parse, event->event_name);
Fancy_String_List line = {}; Fancy_Line line = {};
push_fancy_string(scratch, &line, white, event_name); push_fancy_string(scratch, &line, f_white, event_name);
for (Log_Filter *filter = log_preview_set.first; for (Log_Filter *filter = log_preview_set.first;
filter != 0; filter != 0;
@ -745,7 +747,7 @@ log_graph_render(Application_Links *app, Frame_Info frame_info, View_ID view){
Vec2_f32 p = V2f32(box_inner.x0 + 3.f, Vec2_f32 p = V2f32(box_inner.x0 + 3.f,
(f32_round32((box_inner.y0 + box_inner.y1 - line_height)*0.5f))); (f32_round32((box_inner.y0 + box_inner.y1 - line_height)*0.5f)));
draw_fancy_string(app, log_graph.face_id, line.first, p, 0, 0, 0, V2f32(1.f, 0.f)); draw_fancy_line(app, log_graph.face_id, fcolor_zero(), &line, p);
} }
{ {
@ -757,8 +759,8 @@ log_graph_render(Application_Links *app, Frame_Info frame_info, View_ID view){
Log_Graph_List_Tab current_tab = log_graph.tab; Log_Graph_List_Tab current_tab = log_graph.tab;
Log_Filter_Set *viewing_filter_set = log_filter_set_from_tab(current_tab); Log_Filter_Set *viewing_filter_set = log_filter_set_from_tab(current_tab);
draw_rectangle_fancy(app, box , dark_gray); draw_rectangle(app, box , 0.f, f_dark_gray);
draw_rectangle_fancy(app, box_inner, black ); draw_rectangle(app, box_inner, 0.f, f_black );
{ {
f32 y_cursor = box_inner.y0 + 3.f; f32 y_cursor = box_inner.y0 + 3.f;
@ -767,8 +769,8 @@ log_graph_render(Application_Links *app, Frame_Info frame_info, View_ID view){
{ {
f32 x_cursor = box_inner.x0 + 3.f; f32 x_cursor = box_inner.x0 + 3.f;
for (i32 i = LogTab_ERROR + 1; i < LogTab_COUNT; i += 1){ for (i32 i = LogTab_ERROR + 1; i < LogTab_COUNT; i += 1){
Fancy_Color color = (i == current_tab)?white:gray; FColor color = (i == current_tab)?f_white:f_gray;
Fancy_String_List line = {}; Fancy_Line line = {};
switch (i){ switch (i){
case LogTab_Filters: case LogTab_Filters:
{ {
@ -781,13 +783,15 @@ log_graph_render(Application_Links *app, Frame_Info frame_info, View_ID view){
} }
Vec2_f32 p = V2f32(x_cursor, y_cursor); Vec2_f32 p = V2f32(x_cursor, y_cursor);
f32 advance = get_fancy_string_advance(app, log_graph.face_id, line.first); f32 width = get_fancy_line_width(app, log_graph.face_id,
draw_fancy_string(app, log_graph.face_id, line.first, p, &line);
Stag_Default, Stag_Back, 0, V2f32(1.f, 0.f)); draw_fancy_line(app, log_graph.face_id, fcolor_zero(),
x_cursor += advance + metrics.normal_advance; &line, p);
x_cursor += width + metrics.normal_advance;
if (log_graph.has_unused_click){ if (log_graph.has_unused_click){
Rect_f32 click_rect = Rf32(p.x, p.y, p.x + advance, p.y + line_height); Rect_f32 click_rect = Rf32_xy_wh(p.x, p.y,
width, line_height);
if (rect_contains_point(click_rect, log_graph.unused_click)){ if (rect_contains_point(click_rect, log_graph.unused_click)){
log_graph.has_unused_click = false; log_graph.has_unused_click = false;
log_graph.tab = i; log_graph.tab = i;
@ -805,36 +809,38 @@ log_graph_render(Application_Links *app, Frame_Info frame_info, View_ID view){
y_cursor += line_height; y_cursor += line_height;
if (y_cursor + line_height > box_inner.y1) goto finish_list_display; if (y_cursor + line_height > box_inner.y1) goto finish_list_display;
Fancy_String_List line = {}; Fancy_Line line = {};
if (filter->kind == LogFilter_TagValue){ if (filter->kind == LogFilter_TagValue){
push_fancy_stringf(scratch, &line, white, "val ["); push_fancy_stringf(scratch, &line, f_white, "val [");
String_Const_u8 tag_name = log_parse__get_string(&log_parse, filter->tag_name_code); String_Const_u8 tag_name = log_parse__get_string(&log_parse, filter->tag_name_code);
push_fancy_stringf(scratch, &line, green, "%.*s", string_expand(tag_name)); push_fancy_stringf(scratch, &line, f_green, "%.*s", string_expand(tag_name));
push_fancy_stringf(scratch, &line, white, "="); push_fancy_stringf(scratch, &line, f_white, "=");
if (filter->tag_value.kind == LogTagKind_Integer){ if (filter->tag_value.kind == LogTagKind_Integer){
push_fancy_stringf(scratch, &line, pink, "0x%llx", filter->tag_value.value_s); push_fancy_stringf(scratch, &line, f_pink, "0x%llx", filter->tag_value.value_s);
} }
else if (filter->tag_value.kind == LogTagKind_String){ else if (filter->tag_value.kind == LogTagKind_String){
String_Const_u8 value = log_parse__get_string(&log_parse, filter->tag_value.value); String_Const_u8 value = log_parse__get_string(&log_parse, filter->tag_value.value);
push_fancy_stringf(scratch, &line, pink, "%.*s", string_expand(value)); push_fancy_stringf(scratch, &line, f_pink, "%.*s", string_expand(value));
} }
push_fancy_stringf(scratch, &line, white, "]"); push_fancy_stringf(scratch, &line, f_white, "]");
} }
else{ else{
push_fancy_stringf(scratch, &line, white, "name ["); push_fancy_stringf(scratch, &line, f_white, "name [");
String_Const_u8 tag_name = log_parse__get_string(&log_parse, filter->tag_name_code); String_Const_u8 tag_name = log_parse__get_string(&log_parse, filter->tag_name_code);
push_fancy_stringf(scratch, &line, green, "%.*s", string_expand(tag_name)); push_fancy_stringf(scratch, &line, f_green, "%.*s", string_expand(tag_name));
push_fancy_stringf(scratch, &line, white, "]"); push_fancy_stringf(scratch, &line, f_white, "]");
} }
Vec2_f32 p = V2f32(box_inner.x0 + 3.f, y_cursor); Vec2_f32 p = V2f32(box_inner.x0 + 3.f, y_cursor);
f32 advance = get_fancy_string_advance(app, log_graph.face_id, line.first); f32 width = get_fancy_line_width(app, log_graph.face_id,
draw_fancy_string(app, log_graph.face_id, line.first, p, Stag_Default, Stag_Back, &line);
0, V2f32(1.f, 0.f)); draw_fancy_line(app, log_graph.face_id, fcolor_zero(),
&line, p);
if (log_graph.has_unused_click){ if (log_graph.has_unused_click){
Rect_f32 click_rect = Rf32(p.x, p.y, p.x + advance, p.y + line_height); Rect_f32 click_rect = Rf32_xy_wh(p.x, p.y,
width, line_height);
if (rect_contains_point(click_rect, log_graph.unused_click)){ if (rect_contains_point(click_rect, log_graph.unused_click)){
log_graph.has_unused_click = false; log_graph.has_unused_click = false;
log_filter_set__free_filter(viewing_filter_set, filter); log_filter_set__free_filter(viewing_filter_set, filter);
@ -852,17 +858,16 @@ log_graph_render(Application_Links *app, Frame_Info frame_info, View_ID view){
if (y_cursor + line_height > box_inner.y1) goto finish_event_display; if (y_cursor + line_height > box_inner.y1) goto finish_event_display;
{ {
Fancy_String_List line = {}; Fancy_Line line = {};
String_Const_u8 file_name = log_parse__get_string(&log_parse, view_event->src_file_name); String_Const_u8 file_name = log_parse__get_string(&log_parse, view_event->src_file_name);
push_fancy_stringf(scratch, &line, green, "[%d] ", view_event->event_number); push_fancy_stringf(scratch, &line, f_green, "[%d] ", view_event->event_number);
push_fancy_stringf(scratch, &line, white, "%.*s:", string_expand(file_name)); push_fancy_stringf(scratch, &line, f_white, "%.*s:", string_expand(file_name));
push_fancy_stringf(scratch, &line, pink, "%llu", view_event->line_number); push_fancy_stringf(scratch, &line, f_pink, "%llu", view_event->line_number);
Vec2_f32 right_p = V2f32(box_inner.x1 - 3.f, y_cursor); Vec2_f32 right_p = V2f32(box_inner.x1 - 3.f, y_cursor);
f32 advance = get_fancy_string_advance(app, log_graph.face_id, line.first); f32 width = get_fancy_line_width(app, log_graph.face_id, &line);
Vec2 p = V2f32(right_p.x - advance, right_p.y); Vec2 p = V2f32(right_p.x - width, right_p.y);
draw_fancy_string(app, log_graph.face_id, line.first, p, Stag_Default, Stag_Back, draw_fancy_line(app, log_graph.face_id, fcolor_zero(), &line, p);
0, V2(1.f, 0.f));
} }
for (Log_Tag *tag = view_event->first_tag; for (Log_Tag *tag = view_event->first_tag;
@ -872,14 +877,14 @@ log_graph_render(Application_Links *app, Frame_Info frame_info, View_ID view){
if (y_cursor + line_height > box_inner.y1) goto finish_event_display; if (y_cursor + line_height > box_inner.y1) goto finish_event_display;
{ {
Fancy_String_List line = {}; Fancy_Line line = {};
log_graph_render__tag(scratch, &line, &log_parse, tag); log_graph_render__tag(scratch, &line, &log_parse, tag);
Vec2_f32 right_p = V2f32(box_inner.x1 - 3.f, y_cursor); Vec2_f32 right_p = V2f32(box_inner.x1 - 3.f, y_cursor);
f32 advance = get_fancy_string_advance(app, log_graph.face_id, line.first); f32 width = get_fancy_line_width(app, log_graph.face_id, &line);
Vec2 p = V2f32(right_p.x - advance, right_p.y); Vec2 p = V2f32(right_p.x - width, right_p.y);
draw_fancy_string(app, log_graph.face_id, line.first, p, draw_fancy_line(app, log_graph.face_id, fcolor_zero(),
Stag_Default, Stag_Back, 0, V2(1.f, 0.f)); &line, p);
if (log_graph.has_unused_click){ if (log_graph.has_unused_click){
Rect_f32 click_rect = Rf32(p.x, p.y, right_p.x, p.y + line_height); Rect_f32 click_rect = Rf32(p.x, p.y, right_p.x, p.y + line_height);

View File

@ -179,28 +179,25 @@ profile_draw_tab(Application_Links *app, Tab_State *state, Profile_Inspection *i
state->p.x += state->x_half_padding; state->p.x += state->x_half_padding;
Fancy_String_List list = {}; Fancy_String *fstring = push_fancy_string(scratch, 0, string);
push_fancy_string(scratch, &list, fancy_pass_through(), string);
b32 hover = false; b32 hover = false;
f32 width = get_fancy_string_advance(app, state->face_id, list.first); f32 width = get_fancy_string_width(app, state->face_id, fstring);
Rect_f32 box = Rf32(If32_size(state->p.x, width), state->tabs_y); Rect_f32 box = Rf32(If32_size(state->p.x, width), state->tabs_y);
if (rect_contains_point(box, state->m_p)){ if (rect_contains_point(box, state->m_p)){
hover = true; hover = true;
insp->tab_id_hovered = tab_id; insp->tab_id_hovered = tab_id;
} }
int_color text = Stag_Default; FColor text = fcolor_id(Stag_Default);
int_color back = 0;
if (insp->tab_id == tab_id){ if (insp->tab_id == tab_id){
text = Stag_Pop2; text = fcolor_id(Stag_Pop2);
} }
else if (hover){ else if (hover){
text = Stag_Pop1; text = fcolor_id(Stag_Pop1);
} }
Vec2_f32 np = draw_fancy_string(app, state->face_id, list.first, state->p, Vec2_f32 np = draw_fancy_string(app, state->face_id, text, fstring, state->p);
text, back);
state->p = np; state->p = np;
state->p.x += state->x_half_padding; state->p.x += state->x_half_padding;
} }
@ -261,8 +258,9 @@ profile_draw_node(Application_Links *app, View_ID view, Face_ID face_id,
f32 x_padding = normal_advance*1.5f; f32 x_padding = normal_advance*1.5f;
f32 x_half_padding = x_padding*0.5f; f32 x_half_padding = x_padding*0.5f;
int_color colors[] = { FColor colors[] = {
Stag_Back_Cycle_1, Stag_Back_Cycle_2, Stag_Back_Cycle_3, Stag_Back_Cycle_4, fcolor_id(Stag_Back_Cycle_1), fcolor_id(Stag_Back_Cycle_2),
fcolor_id(Stag_Back_Cycle_3), fcolor_id(Stag_Back_Cycle_4),
}; };
Scratch_Block scratch(app); Scratch_Block scratch(app);
@ -274,22 +272,22 @@ profile_draw_node(Application_Links *app, View_ID view, Face_ID face_id,
String_Const_u8 thread_name = profile_node_thread_name(node); String_Const_u8 thread_name = profile_node_thread_name(node);
if (thread_name.size > 0){ if (thread_name.size > 0){
Fancy_String_List list = {}; Fancy_String *fstr =
push_fancy_string(scratch, &list, fancy_id(Stag_Pop1), thread_name); push_fancy_string(scratch, 0, fcolor_id(Stag_Pop1), thread_name);
Vec2_f32 p = V2f32(x_pos, y.min + 1.f); Vec2_f32 p = V2f32(x_pos, y.min + 1.f);
draw_fancy_string(app, face_id, list.first, p, 0, 0); draw_fancy_string(app, face_id, fcolor_zero(), fstr, p);
f32 w = get_fancy_string_advance(app, face_id, list.first); f32 w = get_fancy_string_width(app, face_id, fstr);
nav_bar_w = max(nav_bar_w, w); nav_bar_w = max(nav_bar_w, w);
} }
y.min += line_height + 2.f; y.min += line_height + 2.f;
String_Const_u8 name = profile_node_name(node); String_Const_u8 name = profile_node_name(node);
if (name.size > 0){ if (name.size > 0){
Fancy_String_List list = {}; Fancy_String *fstr =
push_fancy_string(scratch, &list, fancy_id(Stag_Default), name); push_fancy_string(scratch, 0, fcolor_id(Stag_Default), name);
Vec2_f32 p = V2f32(x_pos, y.min + 1.f); Vec2_f32 p = V2f32(x_pos, y.min + 1.f);
draw_fancy_string(app, face_id, list.first, p, 0, 0); draw_fancy_string(app, face_id, fcolor_zero(), fstr, p);
f32 w = get_fancy_string_advance(app, face_id, list.first); f32 w = get_fancy_string_width(app, face_id, fstr);
nav_bar_w = max(nav_bar_w, w); nav_bar_w = max(nav_bar_w, w);
} }
y.min += line_height + 2.f; y.min += line_height + 2.f;
@ -298,24 +296,22 @@ profile_draw_node(Application_Links *app, View_ID view, Face_ID face_id,
x_pos += nav_bar_w + x_half_padding; x_pos += nav_bar_w + x_half_padding;
if (node->parent != 0){ if (node->parent != 0){
Fancy_String_List list = {}; Fancy_String *fstr = push_fancy_string(scratch, 0, fcolor_zero(),
push_fancy_string(scratch, &list, fancy_pass_through(), string_u8_litexpr("to parent"));
string_u8_litexpr("to parent")); f32 w = get_fancy_string_width(app, face_id, fstr) + x_padding;
f32 w = get_fancy_string_advance(app, face_id, list.first) + x_padding;
Range_f32 btn_x = If32_size(x_pos, w); Range_f32 btn_x = If32_size(x_pos, w);
Rect_f32 box = Rf32(btn_x, nav_bar_y); Rect_f32 box = Rf32(btn_x, nav_bar_y);
int_color color = Stag_Default; FColor color = fcolor_id(Stag_Default);
if (rect_contains_point(box, m_p)){ if (rect_contains_point(box, m_p)){
draw_rectangle(app, box, 0.f, Stag_Margin); draw_rectangle(app, box, 0.f, fcolor_id(Stag_Margin));
color = Stag_Pop1; color = fcolor_id(Stag_Pop1);
insp->hover_node = node->parent; insp->hover_node = node->parent;
} }
Vec2_f32 p = V2f32(box.x0 + x_half_padding, Vec2_f32 p = V2f32(box.x0 + x_half_padding,
(box.y0 + box.y1 - line_height)*0.5f); (box.y0 + box.y1 - line_height)*0.5f);
draw_fancy_string(app, face_id, list.first, p, color, 0); draw_fancy_string(app, face_id, color, fstr, p);
x_pos = btn_x.max; x_pos = btn_x.max;
} }
@ -326,8 +322,7 @@ profile_draw_node(Application_Links *app, View_ID view, Face_ID face_id,
Rect_f32 time_slice_box = side_by_side.min; Rect_f32 time_slice_box = side_by_side.min;
time_slice_box = rect_inner(time_slice_box, 3.f); time_slice_box = rect_inner(time_slice_box, 3.f);
draw_rectangle_outline(app, time_slice_box, 0.f, 3.f, draw_rectangle_outline(app, time_slice_box, 0.f, 3.f, f_white);
0xFFFFFFFF);
time_slice_box = rect_inner(time_slice_box, 3.f); time_slice_box = rect_inner(time_slice_box, 3.f);
if (node->closed){ if (node->closed){
@ -371,12 +366,11 @@ profile_draw_node(Application_Links *app, View_ID view, Face_ID face_id,
// NOTE(allen): duration // NOTE(allen): duration
{ {
f32 duration = ((f32)range_size(node->time))/1000000.f; f32 duration = ((f32)range_size(node->time))/1000000.f;
Fancy_String_List list = {}; Fancy_Line list = {};
push_fancy_stringf(scratch, &list, fancy_id(Stag_Default), push_fancy_stringf(scratch, &list, fcolor_id(Stag_Default),
"time: %11.9f", duration); "time: %11.9f", duration);
draw_fancy_string(app, face_id, list.first, draw_fancy_line(app, face_id, fcolor_zero(),
V2f32(x_pos, y_pos + 1.f), &list, V2f32(x_pos, y_pos + 1.f));
0, 0);
y_pos += line_height + 2.f; y_pos += line_height + 2.f;
} }
} }
@ -404,14 +398,13 @@ profile_render(Application_Links *app, Frame_Info frame_info, View_ID view){
Profile_Inspection *inspect = &global_profile_inspection; Profile_Inspection *inspect = &global_profile_inspection;
if (inspect->thread_count == 0){ if (inspect->thread_count == 0){
Fancy_String_List text = {}; Fancy_String *fstr = push_fancy_string(scratch, 0, fcolor_id(Stag_Pop2),
push_fancy_string(scratch, &text, fancy_id(Stag_Pop2), string_u8_litexpr("no profile data"));
string_u8_litexpr("no profile data")); f32 width = get_fancy_string_width(app, face_id, fstr);
f32 width = get_fancy_string_advance(app, face_id, text.first);
Vec2_f32 view_center = (region.p0 + region.p1)*0.5f; Vec2_f32 view_center = (region.p0 + region.p1)*0.5f;
Vec2_f32 half_dim = V2f32(width, line_height)*0.5f; Vec2_f32 half_dim = V2f32(width, line_height)*0.5f;
Vec2_f32 p = view_center - half_dim; Vec2_f32 p = view_center - half_dim;
draw_fancy_string(app, face_id, text.first, p, Stag_Default, 0); draw_fancy_string(app, face_id, fcolor_zero(), fstr, p);
} }
else{ else{
Rect_f32_Pair tabs_body = rect_split_top_bottom(region, line_height + 2.f); Rect_f32_Pair tabs_body = rect_split_top_bottom(region, line_height + 2.f);
@ -436,7 +429,7 @@ profile_render(Application_Links *app, Frame_Info frame_info, View_ID view){
tab_state.x_half_padding = x_half_padding; tab_state.x_half_padding = x_half_padding;
tab_state.m_p = m_p; tab_state.m_p = m_p;
draw_rectangle(app, tabs_body.min, 0.f, Stag_Margin_Hover); draw_rectangle(app, tabs_body.min, 0.f, fcolor_id(Stag_Margin_Hover));
if (inspect->tab_id == ProfileInspectTab_None){ if (inspect->tab_id == ProfileInspectTab_None){
inspect->tab_id = ProfileInspectTab_Threads; inspect->tab_id = ProfileInspectTab_Threads;
@ -497,26 +490,26 @@ profile_render(Application_Links *app, Frame_Info frame_info, View_ID view){
for (i32 i = 0; i < count; i += 1, thread += 1){ for (i32 i = 0; i < count; i += 1, thread += 1){
Range_f32 y = If32_size(y_pos, block_height); Range_f32 y = If32_size(y_pos, block_height);
Fancy_String_List list = {}; Fancy_Line list = {};
push_fancy_stringf(scratch, &list, fancy_id(Stag_Pop1), push_fancy_stringf(scratch, &list, fcolor_id(Stag_Pop1),
"%-20.*s (%6d) ", "%-20.*s (%6d) ",
string_expand(thread->name), string_expand(thread->name),
thread->thread_id); thread->thread_id);
f32 active_time = ((f32)thread->active_time)/1000000.f; f32 active_time = ((f32)thread->active_time)/1000000.f;
push_fancy_stringf(scratch, &list, fancy_id(Stag_Pop2), push_fancy_stringf(scratch, &list, fcolor_id(Stag_Pop2),
"active time %11.9f", "active time %11.9f",
active_time); active_time);
Vec2_f32 p = V2f32(x.min + x_half_padding, Vec2_f32 p = V2f32(x.min + x_half_padding,
(y.min + y.max - line_height)*0.5f); (y.min + y.max - line_height)*0.5f);
draw_fancy_string(app, face_id, list.first, p, 0, 0); draw_fancy_line(app, face_id, fcolor_zero(), &list, p);
Rect_f32 box = Rf32(x, y); Rect_f32 box = Rf32(x, y);
int_color margin = Stag_Margin; FColor margin = fcolor_id(Stag_Margin);
if (rect_contains_point(box, m_p)){ if (rect_contains_point(box, m_p)){
inspect->hover_thread = thread; inspect->hover_thread = thread;
margin = Stag_Margin_Hover; margin = fcolor_id(Stag_Margin_Hover);
} }
draw_rectangle_outline(app, box, 6.f, 3.f, margin); draw_rectangle_outline(app, box, 6.f, 3.f, margin);
@ -535,46 +528,45 @@ profile_render(Application_Links *app, Frame_Info frame_info, View_ID view){
b32 name_too_long = false; b32 name_too_long = false;
i32 name_width = 45; i32 name_width = 45;
Fancy_String_List list = {}; Fancy_Line list = {};
if (node->name.size > name_width){ if (node->name.size > name_width){
push_fancy_stringf(scratch, &list, fancy_id(Stag_Pop1), push_fancy_stringf(scratch, &list, fcolor_id(Stag_Pop1),
"%.*s... ", "%.*s... ",
name_width - 3, node->name.str); name_width - 3, node->name.str);
name_too_long = true; name_too_long = true;
} }
else{ else{
push_fancy_stringf(scratch, &list, fancy_id(Stag_Pop1), push_fancy_stringf(scratch, &list, fcolor_id(Stag_Pop1),
"%-*.*s ", "%-*.*s ",
name_width, name_width, string_expand(node->name));
string_expand(node->name));
} }
if (node->corrupted_time){ if (node->corrupted_time){
push_fancy_string(scratch, &list, fancy_id(Stag_Pop2), push_fancy_string(scratch, &list, fcolor_id(Stag_Pop2),
string_u8_litexpr("timing error ")); string_u8_litexpr("timing error "));
} }
else{ else{
push_fancy_stringf(scratch, &list, fancy_id(Stag_Pop2), push_fancy_stringf(scratch, &list, fcolor_id(Stag_Pop2),
"%11.9fs ", "%11.9fs ",
((f32)node->total_time)/1000000.f); ((f32)node->total_time)/1000000.f);
} }
push_fancy_stringf(scratch, &list, fancy_id(Stag_Keyword), push_fancy_stringf(scratch, &list, fcolor_id(Stag_Keyword),
"hit # %5d", node->hit_count); "hit # %5d", node->hit_count);
Vec2_f32 p = V2f32(x.min + x_half_padding, Vec2_f32 p = V2f32(x.min + x_half_padding,
(y.min + y.max - line_height)*0.5f); (y.min + y.max - line_height)*0.5f);
draw_fancy_string(app, face_id, list.first, p, 0, 0); draw_fancy_line(app, face_id, fcolor_zero(), &list, p);
Rect_f32 box = Rf32(x, y); Rect_f32 box = Rf32(x, y);
int_color margin = Stag_Margin; FColor margin = fcolor_id(Stag_Margin);
if (rect_contains_point(box, m_p)){ if (rect_contains_point(box, m_p)){
if (name_too_long){ if (name_too_long){
inspect->full_name_hovered = node->name; inspect->full_name_hovered = node->name;
} }
inspect->location_jump_hovered = node->location; inspect->location_jump_hovered = node->location;
inspect->hover_slot = node; inspect->hover_slot = node;
margin = Stag_Margin_Hover; margin = fcolor_id(Stag_Margin_Hover);
} }
draw_rectangle_outline(app, box, 6.f, 3.f, margin); draw_rectangle_outline(app, box, 6.f, 3.f, margin);
@ -592,19 +584,19 @@ profile_render(Application_Links *app, Frame_Info frame_info, View_ID view){
node = node->next){ node = node->next){
Range_f32 y = If32_size(y_pos, block_height); Range_f32 y = If32_size(y_pos, block_height);
Fancy_String_List list = {}; Fancy_Line list = {};
push_fancy_string(scratch, &list, fancy_id(Stag_Pop2), push_fancy_string(scratch, &list, fcolor_id(Stag_Pop2),
node->message); node->message);
Vec2_f32 p = V2f32(x.min + x_half_padding, Vec2_f32 p = V2f32(x.min + x_half_padding,
(y.min + y.max - line_height)*0.5f); (y.min + y.max - line_height)*0.5f);
draw_fancy_string(app, face_id, list.first, p, 0, 0); draw_fancy_line(app, face_id, fcolor_zero(), &list, p);
Rect_f32 box = Rf32(x, y); Rect_f32 box = Rf32(x, y);
int_color margin = Stag_Margin; FColor margin = fcolor_id(Stag_Margin);
if (rect_contains_point(box, m_p)){ if (rect_contains_point(box, m_p)){
inspect->location_jump_hovered = node->location; inspect->location_jump_hovered = node->location;
margin = Stag_Margin_Hover; margin = fcolor_id(Stag_Margin_Hover);
} }
draw_rectangle_outline(app, box, 6.f, 3.f, margin); draw_rectangle_outline(app, box, 6.f, 3.f, margin);
@ -637,44 +629,31 @@ profile_render(Application_Links *app, Frame_Info frame_info, View_ID view){
// NOTE(allen): no tool tip for tabs // NOTE(allen): no tool tip for tabs
} }
else{ else{
i32 line_count = 0; Fancy_Block block = {};
Fancy_String_List list[2] = {}; FColor text_color = fcolor_change_alpha(app, f_white, 0.5f);
Fancy_Color color = fancy_rgba(1.f, 1.f, 1.f, 0.5f); FColor back_color = fcolor_change_alpha(app, f_black, 0.5f);
f32 width = 0.f;
if (inspect->full_name_hovered.size > 0){ if (inspect->full_name_hovered.size > 0){
line_count += 1; Fancy_Line *line = push_fancy_line(scratch, &block);
push_fancy_stringf(scratch, &list[0], color, "%.*s", push_fancy_stringf(scratch, line, text_color, "%.*s",
string_expand(inspect->full_name_hovered)); string_expand(inspect->full_name_hovered));
f32 l_width = get_fancy_string_advance(app, face_id, list[0].first);
width = max(width, l_width);
} }
if (inspect->location_jump_hovered.size > 0){ if (inspect->location_jump_hovered.size > 0){
line_count += 1; Fancy_Line *line = push_fancy_line(scratch, &block);
push_fancy_stringf(scratch, &list[1], color, "[shift] '%.*s'", push_fancy_stringf(scratch, line, text_color, "[shift] '%.*s'",
string_expand(inspect->location_jump_hovered)); string_expand(inspect->location_jump_hovered));
f32 l_width = get_fancy_string_advance(app, face_id, list[1].first);
width = max(width, l_width);
} }
if (line_count > 0){ if (block.line_count > 0){
Vec2_f32 dims = V2f32(width + x_padding, line_count*line_height + 2.f); Vec2_f32 dims = get_fancy_block_dim(app, face_id, &block);
dims += V2f32(x_padding, 2.f);
Rect_f32 box = get_tool_tip_box(region, m_p, dims); Rect_f32 box = get_tool_tip_box(region, m_p, dims);
draw_set_clip(app, box); draw_set_clip(app, box);
draw_rectangle(app, box, 6.f, 0x80000000); draw_rectangle(app, box, 6.f, back_color);
f32 y = box.y0 + 1.f; draw_fancy_block(app, face_id, fcolor_zero(), &block,
if (inspect->full_name_hovered.size > 0){ V2f32(box.x0 + x_half_padding, box.y0 + 1.f));
draw_fancy_string(app, face_id, list[0].first,
V2f32(box.x0 + x_half_padding, y),
0, 0);
y += line_height;
}
if (inspect->location_jump_hovered.size > 0){
draw_fancy_string(app, face_id, list[1].first,
V2f32(box.x0 + x_half_padding, y),
0, 0);
}
} }
} }
} }

View File

@ -18,21 +18,73 @@ typedef Custom_Layer_Init_Type *_Init_APIs_Type(struct API_VTable_custom *custom
//////////////////////////////// ////////////////////////////////
typedef u32 argb_color; typedef u16 ID_Color;
union FColor{
struct{
u8 padding__[3];
u8 a_byte;
};
ARGB_Color argb;
struct{
ID_Color id;
u16 padding_;
};
};
typedef u32 int_color; struct Theme_Color{
ID_Color tag;
ARGB_Color color;
};
typedef u16 id_color; //struct Theme{
//ARGB_Color colors[Stag_COUNT];
//};
typedef u32 Child_Process_ID; struct Color_Table{
ARGB_Color *vals;
u32 count;
};
struct Color_Picker{
String_Const_u8 title;
ARGB_Color *dest;
b32 *finished;
};
////////////////////////////////
typedef u32 Face_ID;
struct Fancy_String{
Fancy_String *next;
String_Const_u8 value;
Face_ID face;
FColor fore;
f32 pre_margin;
f32 post_margin;
};
struct Fancy_Line{
Fancy_Line *next;
Face_ID face;
FColor fore;
Fancy_String *first;
Fancy_String *last;
};
struct Fancy_Block{
Fancy_Line *first;
Fancy_Line *last;
i32 line_count;
};
////////////////////////////////
typedef i32 Buffer_ID; typedef i32 Buffer_ID;
typedef i32 View_ID; typedef i32 View_ID;
typedef i32 Panel_ID; typedef i32 Panel_ID;
typedef u32 Text_Layout_ID; typedef u32 Text_Layout_ID;
typedef u32 Child_Process_ID;
typedef i32 UI_Highlight_Level; typedef i32 UI_Highlight_Level;
enum{ enum{
@ -375,17 +427,6 @@ struct Query_Bar_Group{
~Query_Bar_Group(); ~Query_Bar_Group();
}; };
struct Theme_Color{
id_color tag;
argb_color color;
};
//struct Theme{
//int_color colors[Stag_COUNT];
//};
typedef u32 Face_ID;
struct Font_Load_Location{ struct Font_Load_Location{
String_Const_u8 file_name; String_Const_u8 file_name;
b32 in_4coder_font_folder; b32 in_4coder_font_folder;
@ -533,11 +574,6 @@ Vec2_f32 name(Vec2_f32 pending, b32 is_new_target, f32 dt, void *data)
typedef Rect_f32 Buffer_Region_Function(Application_Links *app, View_ID view_id, Rect_f32 region); typedef Rect_f32 Buffer_Region_Function(Application_Links *app, View_ID view_id, Rect_f32 region);
struct Color_Table{
argb_color *vals;
u32 count;
};
typedef void New_Clipboard_Contents_Function(Application_Links *app, String_Const_u8 contents); typedef void New_Clipboard_Contents_Function(Application_Links *app, String_Const_u8 contents);
#define NEW_CLIPBOARD_CONTENTS_SIG(name) \ #define NEW_CLIPBOARD_CONTENTS_SIG(name) \
void name(Application_Links *app, String_Const_u8 contents) void name(Application_Links *app, String_Const_u8 contents)
@ -600,12 +636,6 @@ struct View_Context{
Command_Map_ID map_id; Command_Map_ID map_id;
}; };
struct Color_Picker{
String_Const_u8 title;
argb_color *dest;
b32 *finished;
};
typedef u32 String_Match_Flag; typedef u32 String_Match_Flag;
enum{ enum{
StringMatch_CaseSensitive = 1, StringMatch_CaseSensitive = 1,

View File

@ -346,12 +346,12 @@ static Command_Metadata fcoder_metacmd_table[211] = {
{ PROC_LINKS(kill_buffer, 0), false, "kill_buffer", 11, "Kills the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1579 }, { PROC_LINKS(kill_buffer, 0), false, "kill_buffer", 11, "Kills the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1579 },
{ PROC_LINKS(save, 0), false, "save", 4, "Saves the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1587 }, { PROC_LINKS(save, 0), false, "save", 4, "Saves the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1587 },
{ PROC_LINKS(reopen, 0), false, "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1597 }, { PROC_LINKS(reopen, 0), false, "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1597 },
{ PROC_LINKS(undo, 0), false, "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1826 }, { PROC_LINKS(undo, 0), false, "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1822 },
{ PROC_LINKS(redo, 0), false, "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1839 }, { PROC_LINKS(redo, 0), false, "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1835 },
{ PROC_LINKS(undo_all_buffers, 0), false, "undo_all_buffers", 16, "Advances backward through the undo history in the buffer containing the most recent regular edit.", 97, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1853 }, { PROC_LINKS(undo_all_buffers, 0), false, "undo_all_buffers", 16, "Advances backward through the undo history in the buffer containing the most recent regular edit.", 97, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1849 },
{ PROC_LINKS(redo_all_buffers, 0), false, "redo_all_buffers", 16, "Advances forward through the undo history in the buffer containing the most recent regular edit.", 96, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1924 }, { PROC_LINKS(redo_all_buffers, 0), false, "redo_all_buffers", 16, "Advances forward through the undo history in the buffer containing the most recent regular edit.", 96, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1920 },
{ PROC_LINKS(open_in_other, 0), false, "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 2025 }, { PROC_LINKS(open_in_other, 0), false, "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 2021 },
{ PROC_LINKS(default_file_externally_modified, 0), false, "default_file_externally_modified", 32, "Notes the external modification of attached files by printing a message.", 72, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 2032 }, { PROC_LINKS(default_file_externally_modified, 0), false, "default_file_externally_modified", 32, "Notes the external modification of attached files by printing a message.", 72, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 2028 },
{ PROC_LINKS(set_eol_mode_to_crlf, 0), false, "set_eol_mode_to_crlf", 20, "Puts the buffer in crlf line ending mode.", 41, "w:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 82 }, { PROC_LINKS(set_eol_mode_to_crlf, 0), false, "set_eol_mode_to_crlf", 20, "Puts the buffer in crlf line ending mode.", 41, "w:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 82 },
{ PROC_LINKS(set_eol_mode_to_lf, 0), false, "set_eol_mode_to_lf", 18, "Puts the buffer in lf line ending mode.", 39, "w:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 93 }, { PROC_LINKS(set_eol_mode_to_lf, 0), false, "set_eol_mode_to_lf", 18, "Puts the buffer in lf line ending mode.", 39, "w:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 93 },
{ PROC_LINKS(set_eol_mode_to_binary, 0), false, "set_eol_mode_to_binary", 22, "Puts the buffer in bin line ending mode.", 40, "w:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 104 }, { PROC_LINKS(set_eol_mode_to_binary, 0), false, "set_eol_mode_to_binary", 22, "Puts the buffer in bin line ending mode.", 40, "w:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 104 },
@ -388,13 +388,13 @@ static Command_Metadata fcoder_metacmd_table[211] = {
{ PROC_LINKS(if_read_only_goto_position, 0), false, "if_read_only_goto_position", 26, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "w:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 562 }, { PROC_LINKS(if_read_only_goto_position, 0), false, "if_read_only_goto_position", 26, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "w:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 562 },
{ PROC_LINKS(if_read_only_goto_position_same_panel, 0), false, "if_read_only_goto_position_same_panel", 37, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "w:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 579 }, { PROC_LINKS(if_read_only_goto_position_same_panel, 0), false, "if_read_only_goto_position_same_panel", 37, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "w:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 579 },
{ PROC_LINKS(view_jump_list_with_lister, 0), false, "view_jump_list_with_lister", 26, "When executed on a buffer with jumps, creates a persistent lister for all the jumps", 83, "w:\\4ed\\code\\custom\\4coder_jump_lister.cpp", 41, 104 }, { PROC_LINKS(view_jump_list_with_lister, 0), false, "view_jump_list_with_lister", 26, "When executed on a buffer with jumps, creates a persistent lister for all the jumps", 83, "w:\\4ed\\code\\custom\\4coder_jump_lister.cpp", 41, 104 },
{ PROC_LINKS(show_the_log_graph, 0), true, "show_the_log_graph", 18, "Parses *log* and displays the 'log graph' UI", 44, "w:\\4ed\\code\\custom\\4coder_log_parser.cpp", 40, 990 }, { PROC_LINKS(show_the_log_graph, 0), true, "show_the_log_graph", 18, "Parses *log* and displays the 'log graph' UI", 44, "w:\\4ed\\code\\custom\\4coder_log_parser.cpp", 40, 995 },
{ PROC_LINKS(copy, 0), false, "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 19 }, { PROC_LINKS(copy, 0), false, "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 19 },
{ PROC_LINKS(cut, 0), false, "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 28 }, { PROC_LINKS(cut, 0), false, "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 28 },
{ PROC_LINKS(paste, 0), false, "paste", 5, "At the cursor, insert the text at the top of the clipboard.", 59, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 39 }, { PROC_LINKS(paste, 0), false, "paste", 5, "At the cursor, insert the text at the top of the clipboard.", 59, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 39 },
{ PROC_LINKS(paste_next, 0), false, "paste_next", 10, "If the previous command was paste or paste_next, replaces the paste range with the next text down on the clipboard, otherwise operates as the paste command.", 156, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 73 }, { PROC_LINKS(paste_next, 0), false, "paste_next", 10, "If the previous command was paste or paste_next, replaces the paste range with the next text down on the clipboard, otherwise operates as the paste command.", 156, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 71 },
{ PROC_LINKS(paste_and_indent, 0), false, "paste_and_indent", 16, "Paste from the top of clipboard and run auto-indent on the newly pasted text.", 77, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 115 }, { PROC_LINKS(paste_and_indent, 0), false, "paste_and_indent", 16, "Paste from the top of clipboard and run auto-indent on the newly pasted text.", 77, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 111 },
{ PROC_LINKS(paste_next_and_indent, 0), false, "paste_next_and_indent", 21, "Paste the next item on the clipboard and run auto-indent on the newly pasted text.", 82, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 122 }, { PROC_LINKS(paste_next_and_indent, 0), false, "paste_next_and_indent", 21, "Paste the next item on the clipboard and run auto-indent on the newly pasted text.", 82, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 118 },
{ PROC_LINKS(execute_previous_cli, 0), false, "execute_previous_cli", 20, "If the command execute_any_cli has already been used, this will execute a CLI reusing the most recent buffer name and command.", 126, "w:\\4ed\\code\\custom\\4coder_cli_command.cpp", 41, 7 }, { PROC_LINKS(execute_previous_cli, 0), false, "execute_previous_cli", 20, "If the command execute_any_cli has already been used, this will execute a CLI reusing the most recent buffer name and command.", 126, "w:\\4ed\\code\\custom\\4coder_cli_command.cpp", 41, 7 },
{ PROC_LINKS(execute_any_cli, 0), false, "execute_any_cli", 15, "Queries for an output buffer name and system command, runs the system command as a CLI and prints the output to the specified buffer.", 133, "w:\\4ed\\code\\custom\\4coder_cli_command.cpp", 41, 22 }, { PROC_LINKS(execute_any_cli, 0), false, "execute_any_cli", 15, "Queries for an output buffer name and system command, runs the system command as a CLI and prints the output to the specified buffer.", 133, "w:\\4ed\\code\\custom\\4coder_cli_command.cpp", 41, 22 },
{ PROC_LINKS(build_search, 0), false, "build_search", 12, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*.", 153, "w:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 128 }, { PROC_LINKS(build_search, 0), false, "build_search", 12, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*.", 153, "w:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 128 },
@ -441,7 +441,7 @@ static Command_Metadata fcoder_metacmd_table[211] = {
{ PROC_LINKS(miblo_decrement_time_stamp, 0), false, "miblo_decrement_time_stamp", 26, "Decrement a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 237 }, { PROC_LINKS(miblo_decrement_time_stamp, 0), false, "miblo_decrement_time_stamp", 26, "Decrement a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 237 },
{ PROC_LINKS(miblo_increment_time_stamp_minute, 0), false, "miblo_increment_time_stamp_minute", 33, "Increment a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 243 }, { PROC_LINKS(miblo_increment_time_stamp_minute, 0), false, "miblo_increment_time_stamp_minute", 33, "Increment a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 243 },
{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), false, "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 249 }, { PROC_LINKS(miblo_decrement_time_stamp_minute, 0), false, "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 249 },
{ PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "w:\\4ed\\code\\custom\\4coder_profile_inspect.cpp", 45, 713 }, { PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "w:\\4ed\\code\\custom\\4coder_profile_inspect.cpp", 45, 692 },
{ PROC_LINKS(default_startup, 0), false, "default_startup", 15, "Default command for responding to a startup event", 49, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 7 }, { PROC_LINKS(default_startup, 0), false, "default_startup", 15, "Default command for responding to a startup event", 49, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 7 },
{ PROC_LINKS(default_try_exit, 0), false, "default_try_exit", 16, "Default command for responding to a try-exit event", 50, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 21 }, { PROC_LINKS(default_try_exit, 0), false, "default_try_exit", 16, "Default command for responding to a try-exit event", 50, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 21 },
}; };

View File

@ -85,10 +85,10 @@
#define custom_view_set_buffer_scroll_sig() b32 custom_view_set_buffer_scroll(Application_Links* app, View_ID view_id, Buffer_Scroll scroll, Set_Buffer_Scroll_Rule rule) #define custom_view_set_buffer_scroll_sig() b32 custom_view_set_buffer_scroll(Application_Links* app, View_ID view_id, Buffer_Scroll scroll, Set_Buffer_Scroll_Rule rule)
#define custom_view_set_mark_sig() b32 custom_view_set_mark(Application_Links* app, View_ID view_id, Buffer_Seek seek) #define custom_view_set_mark_sig() b32 custom_view_set_mark(Application_Links* app, View_ID view_id, Buffer_Seek seek)
#define custom_view_set_buffer_sig() b32 custom_view_set_buffer(Application_Links* app, View_ID view_id, Buffer_ID buffer_id, Set_Buffer_Flag flags) #define custom_view_set_buffer_sig() b32 custom_view_set_buffer(Application_Links* app, View_ID view_id, Buffer_ID buffer_id, Set_Buffer_Flag flags)
#define custom_view_post_fade_sig() b32 custom_view_post_fade(Application_Links* app, View_ID view_id, f32 seconds, Range_i64 range, int_color color) #define custom_view_post_fade_sig() b32 custom_view_post_fade(Application_Links* app, View_ID view_id, f32 seconds, Range_i64 range, FColor color)
#define custom_view_push_context_sig() b32 custom_view_push_context(Application_Links* app, View_ID view_id, View_Context* ctx) #define custom_view_push_context_sig() b32 custom_view_push_context(Application_Links* app, View_ID view_id, View_Context* ctx)
#define custom_view_pop_context_sig() b32 custom_view_pop_context(Application_Links* app, View_ID view_id) #define custom_view_pop_context_sig() b32 custom_view_pop_context(Application_Links* app, View_ID view_id)
#define custom_view_alter_context_sig() b32 custom_view_alter_context(Application_Links* app, View_ID view, View_Context* ctx) #define custom_view_alter_context_sig() b32 custom_view_alter_context(Application_Links* app, View_ID view_id, View_Context* ctx)
#define custom_view_current_context_sig() View_Context custom_view_current_context(Application_Links* app, View_ID view_id) #define custom_view_current_context_sig() View_Context custom_view_current_context(Application_Links* app, View_ID view_id)
#define custom_view_current_context_hook_memory_sig() Data custom_view_current_context_hook_memory(Application_Links* app, View_ID view_id, Hook_ID hook_id) #define custom_view_current_context_hook_memory_sig() Data custom_view_current_context_hook_memory(Application_Links* app, View_ID view_id, Hook_ID hook_id)
#define custom_create_user_managed_scope_sig() Managed_Scope custom_create_user_managed_scope(Application_Links* app) #define custom_create_user_managed_scope_sig() Managed_Scope custom_create_user_managed_scope(Application_Links* app)
@ -146,15 +146,15 @@
#define custom_try_release_face_sig() b32 custom_try_release_face(Application_Links* app, Face_ID id, Face_ID replacement_id) #define custom_try_release_face_sig() b32 custom_try_release_face(Application_Links* app, Face_ID id, Face_ID replacement_id)
#define custom_set_theme_colors_sig() void custom_set_theme_colors(Application_Links* app, Theme_Color* colors, i32 count) #define custom_set_theme_colors_sig() void custom_set_theme_colors(Application_Links* app, Theme_Color* colors, i32 count)
#define custom_get_theme_colors_sig() void custom_get_theme_colors(Application_Links* app, Theme_Color* colors, i32 count) #define custom_get_theme_colors_sig() void custom_get_theme_colors(Application_Links* app, Theme_Color* colors, i32 count)
#define custom_finalize_color_sig() argb_color custom_finalize_color(Application_Links* app, int_color color) #define custom_finalize_color_sig() ARGB_Color custom_finalize_color(Application_Links* app, ID_Color color)
#define custom_push_hot_directory_sig() String_Const_u8 custom_push_hot_directory(Application_Links* app, Arena* arena) #define custom_push_hot_directory_sig() String_Const_u8 custom_push_hot_directory(Application_Links* app, Arena* arena)
#define custom_set_hot_directory_sig() b32 custom_set_hot_directory(Application_Links* app, String_Const_u8 string) #define custom_set_hot_directory_sig() b32 custom_set_hot_directory(Application_Links* app, String_Const_u8 string)
#define custom_send_exit_signal_sig() void custom_send_exit_signal(Application_Links* app) #define custom_send_exit_signal_sig() void custom_send_exit_signal(Application_Links* app)
#define custom_set_window_title_sig() b32 custom_set_window_title(Application_Links* app, String_Const_u8 title) #define custom_set_window_title_sig() b32 custom_set_window_title(Application_Links* app, String_Const_u8 title)
#define custom_draw_string_oriented_sig() Vec2 custom_draw_string_oriented(Application_Links* app, Face_ID font_id, String_Const_u8 str, Vec2 point, int_color color, u32 flags, Vec2 delta) #define custom_draw_string_oriented_sig() Vec2_f32 custom_draw_string_oriented(Application_Links* app, Face_ID font_id, FColor color, String_Const_u8 str, Vec2_f32 point, u32 flags, Vec2_f32 delta)
#define custom_get_string_advance_sig() f32 custom_get_string_advance(Application_Links* app, Face_ID font_id, String_Const_u8 str) #define custom_get_string_advance_sig() f32 custom_get_string_advance(Application_Links* app, Face_ID font_id, String_Const_u8 str)
#define custom_draw_rectangle_sig() void custom_draw_rectangle(Application_Links* app, Rect_f32 rect, f32 roundness, int_color color) #define custom_draw_rectangle_sig() void custom_draw_rectangle(Application_Links* app, Rect_f32 rect, f32 roundness, FColor color)
#define custom_draw_rectangle_outline_sig() void custom_draw_rectangle_outline(Application_Links* app, Rect_f32 rect, f32 roundness, f32 thickness, int_color color) #define custom_draw_rectangle_outline_sig() void custom_draw_rectangle_outline(Application_Links* app, Rect_f32 rect, f32 roundness, f32 thickness, FColor color)
#define custom_draw_set_clip_sig() Rect_f32 custom_draw_set_clip(Application_Links* app, Rect_f32 new_clip) #define custom_draw_set_clip_sig() Rect_f32 custom_draw_set_clip(Application_Links* app, Rect_f32 new_clip)
#define custom_text_layout_create_sig() Text_Layout_ID custom_text_layout_create(Application_Links* app, Buffer_ID buffer_id, Rect_f32 rect, Buffer_Point buffer_point) #define custom_text_layout_create_sig() Text_Layout_ID custom_text_layout_create(Application_Links* app, Buffer_ID buffer_id, Rect_f32 rect, Buffer_Point buffer_point)
#define custom_text_layout_region_sig() Rect_f32 custom_text_layout_region(Application_Links* app, Text_Layout_ID text_layout_id) #define custom_text_layout_region_sig() Rect_f32 custom_text_layout_region(Application_Links* app, Text_Layout_ID text_layout_id)
@ -162,7 +162,7 @@
#define custom_text_layout_get_visible_range_sig() Interval_i64 custom_text_layout_get_visible_range(Application_Links* app, Text_Layout_ID text_layout_id) #define custom_text_layout_get_visible_range_sig() Interval_i64 custom_text_layout_get_visible_range(Application_Links* app, Text_Layout_ID text_layout_id)
#define custom_text_layout_line_on_screen_sig() Range_f32 custom_text_layout_line_on_screen(Application_Links* app, Text_Layout_ID layout_id, i64 line_number) #define custom_text_layout_line_on_screen_sig() Range_f32 custom_text_layout_line_on_screen(Application_Links* app, Text_Layout_ID layout_id, i64 line_number)
#define custom_text_layout_character_on_screen_sig() Rect_f32 custom_text_layout_character_on_screen(Application_Links* app, Text_Layout_ID layout_id, i64 pos) #define custom_text_layout_character_on_screen_sig() Rect_f32 custom_text_layout_character_on_screen(Application_Links* app, Text_Layout_ID layout_id, i64 pos)
#define custom_paint_text_color_sig() void custom_paint_text_color(Application_Links* app, Text_Layout_ID layout_id, Interval_i64 range, int_color color) #define custom_paint_text_color_sig() void custom_paint_text_color(Application_Links* app, Text_Layout_ID layout_id, Interval_i64 range, FColor color)
#define custom_text_layout_free_sig() b32 custom_text_layout_free(Application_Links* app, Text_Layout_ID text_layout_id) #define custom_text_layout_free_sig() b32 custom_text_layout_free(Application_Links* app, Text_Layout_ID text_layout_id)
#define custom_draw_text_layout_sig() void custom_draw_text_layout(Application_Links* app, Text_Layout_ID layout_id) #define custom_draw_text_layout_sig() void custom_draw_text_layout(Application_Links* app, Text_Layout_ID layout_id)
#define custom_open_color_picker_sig() void custom_open_color_picker(Application_Links* app, Color_Picker* picker) #define custom_open_color_picker_sig() void custom_open_color_picker(Application_Links* app, Color_Picker* picker)
@ -255,10 +255,10 @@ typedef b32 custom_view_set_cursor_type(Application_Links* app, View_ID view_id,
typedef b32 custom_view_set_buffer_scroll_type(Application_Links* app, View_ID view_id, Buffer_Scroll scroll, Set_Buffer_Scroll_Rule rule); typedef b32 custom_view_set_buffer_scroll_type(Application_Links* app, View_ID view_id, Buffer_Scroll scroll, Set_Buffer_Scroll_Rule rule);
typedef b32 custom_view_set_mark_type(Application_Links* app, View_ID view_id, Buffer_Seek seek); typedef b32 custom_view_set_mark_type(Application_Links* app, View_ID view_id, Buffer_Seek seek);
typedef b32 custom_view_set_buffer_type(Application_Links* app, View_ID view_id, Buffer_ID buffer_id, Set_Buffer_Flag flags); typedef b32 custom_view_set_buffer_type(Application_Links* app, View_ID view_id, Buffer_ID buffer_id, Set_Buffer_Flag flags);
typedef b32 custom_view_post_fade_type(Application_Links* app, View_ID view_id, f32 seconds, Range_i64 range, int_color color); typedef b32 custom_view_post_fade_type(Application_Links* app, View_ID view_id, f32 seconds, Range_i64 range, FColor color);
typedef b32 custom_view_push_context_type(Application_Links* app, View_ID view_id, View_Context* ctx); typedef b32 custom_view_push_context_type(Application_Links* app, View_ID view_id, View_Context* ctx);
typedef b32 custom_view_pop_context_type(Application_Links* app, View_ID view_id); typedef b32 custom_view_pop_context_type(Application_Links* app, View_ID view_id);
typedef b32 custom_view_alter_context_type(Application_Links* app, View_ID view, View_Context* ctx); typedef b32 custom_view_alter_context_type(Application_Links* app, View_ID view_id, View_Context* ctx);
typedef View_Context custom_view_current_context_type(Application_Links* app, View_ID view_id); typedef View_Context custom_view_current_context_type(Application_Links* app, View_ID view_id);
typedef Data custom_view_current_context_hook_memory_type(Application_Links* app, View_ID view_id, Hook_ID hook_id); typedef Data custom_view_current_context_hook_memory_type(Application_Links* app, View_ID view_id, Hook_ID hook_id);
typedef Managed_Scope custom_create_user_managed_scope_type(Application_Links* app); typedef Managed_Scope custom_create_user_managed_scope_type(Application_Links* app);
@ -316,15 +316,15 @@ typedef b32 custom_try_modify_face_type(Application_Links* app, Face_ID id, Face
typedef b32 custom_try_release_face_type(Application_Links* app, Face_ID id, Face_ID replacement_id); typedef b32 custom_try_release_face_type(Application_Links* app, Face_ID id, Face_ID replacement_id);
typedef void custom_set_theme_colors_type(Application_Links* app, Theme_Color* colors, i32 count); typedef void custom_set_theme_colors_type(Application_Links* app, Theme_Color* colors, i32 count);
typedef void custom_get_theme_colors_type(Application_Links* app, Theme_Color* colors, i32 count); typedef void custom_get_theme_colors_type(Application_Links* app, Theme_Color* colors, i32 count);
typedef argb_color custom_finalize_color_type(Application_Links* app, int_color color); typedef ARGB_Color custom_finalize_color_type(Application_Links* app, ID_Color color);
typedef String_Const_u8 custom_push_hot_directory_type(Application_Links* app, Arena* arena); typedef String_Const_u8 custom_push_hot_directory_type(Application_Links* app, Arena* arena);
typedef b32 custom_set_hot_directory_type(Application_Links* app, String_Const_u8 string); typedef b32 custom_set_hot_directory_type(Application_Links* app, String_Const_u8 string);
typedef void custom_send_exit_signal_type(Application_Links* app); typedef void custom_send_exit_signal_type(Application_Links* app);
typedef b32 custom_set_window_title_type(Application_Links* app, String_Const_u8 title); typedef b32 custom_set_window_title_type(Application_Links* app, String_Const_u8 title);
typedef Vec2 custom_draw_string_oriented_type(Application_Links* app, Face_ID font_id, String_Const_u8 str, Vec2 point, int_color color, u32 flags, Vec2 delta); typedef Vec2_f32 custom_draw_string_oriented_type(Application_Links* app, Face_ID font_id, FColor color, String_Const_u8 str, Vec2_f32 point, u32 flags, Vec2_f32 delta);
typedef f32 custom_get_string_advance_type(Application_Links* app, Face_ID font_id, String_Const_u8 str); typedef f32 custom_get_string_advance_type(Application_Links* app, Face_ID font_id, String_Const_u8 str);
typedef void custom_draw_rectangle_type(Application_Links* app, Rect_f32 rect, f32 roundness, int_color color); typedef void custom_draw_rectangle_type(Application_Links* app, Rect_f32 rect, f32 roundness, FColor color);
typedef void custom_draw_rectangle_outline_type(Application_Links* app, Rect_f32 rect, f32 roundness, f32 thickness, int_color color); typedef void custom_draw_rectangle_outline_type(Application_Links* app, Rect_f32 rect, f32 roundness, f32 thickness, FColor color);
typedef Rect_f32 custom_draw_set_clip_type(Application_Links* app, Rect_f32 new_clip); typedef Rect_f32 custom_draw_set_clip_type(Application_Links* app, Rect_f32 new_clip);
typedef Text_Layout_ID custom_text_layout_create_type(Application_Links* app, Buffer_ID buffer_id, Rect_f32 rect, Buffer_Point buffer_point); typedef Text_Layout_ID custom_text_layout_create_type(Application_Links* app, Buffer_ID buffer_id, Rect_f32 rect, Buffer_Point buffer_point);
typedef Rect_f32 custom_text_layout_region_type(Application_Links* app, Text_Layout_ID text_layout_id); typedef Rect_f32 custom_text_layout_region_type(Application_Links* app, Text_Layout_ID text_layout_id);
@ -332,7 +332,7 @@ typedef Buffer_ID custom_text_layout_get_buffer_type(Application_Links* app, Tex
typedef Interval_i64 custom_text_layout_get_visible_range_type(Application_Links* app, Text_Layout_ID text_layout_id); typedef Interval_i64 custom_text_layout_get_visible_range_type(Application_Links* app, Text_Layout_ID text_layout_id);
typedef Range_f32 custom_text_layout_line_on_screen_type(Application_Links* app, Text_Layout_ID layout_id, i64 line_number); typedef Range_f32 custom_text_layout_line_on_screen_type(Application_Links* app, Text_Layout_ID layout_id, i64 line_number);
typedef Rect_f32 custom_text_layout_character_on_screen_type(Application_Links* app, Text_Layout_ID layout_id, i64 pos); typedef Rect_f32 custom_text_layout_character_on_screen_type(Application_Links* app, Text_Layout_ID layout_id, i64 pos);
typedef void custom_paint_text_color_type(Application_Links* app, Text_Layout_ID layout_id, Interval_i64 range, int_color color); typedef void custom_paint_text_color_type(Application_Links* app, Text_Layout_ID layout_id, Interval_i64 range, FColor color);
typedef b32 custom_text_layout_free_type(Application_Links* app, Text_Layout_ID text_layout_id); typedef b32 custom_text_layout_free_type(Application_Links* app, Text_Layout_ID text_layout_id);
typedef void custom_draw_text_layout_type(Application_Links* app, Text_Layout_ID layout_id); typedef void custom_draw_text_layout_type(Application_Links* app, Text_Layout_ID layout_id);
typedef void custom_open_color_picker_type(Application_Links* app, Color_Picker* picker); typedef void custom_open_color_picker_type(Application_Links* app, Color_Picker* picker);
@ -598,10 +598,10 @@ internal b32 view_set_cursor(Application_Links* app, View_ID view_id, Buffer_See
internal b32 view_set_buffer_scroll(Application_Links* app, View_ID view_id, Buffer_Scroll scroll, Set_Buffer_Scroll_Rule rule); internal b32 view_set_buffer_scroll(Application_Links* app, View_ID view_id, Buffer_Scroll scroll, Set_Buffer_Scroll_Rule rule);
internal b32 view_set_mark(Application_Links* app, View_ID view_id, Buffer_Seek seek); internal b32 view_set_mark(Application_Links* app, View_ID view_id, Buffer_Seek seek);
internal b32 view_set_buffer(Application_Links* app, View_ID view_id, Buffer_ID buffer_id, Set_Buffer_Flag flags); internal b32 view_set_buffer(Application_Links* app, View_ID view_id, Buffer_ID buffer_id, Set_Buffer_Flag flags);
internal b32 view_post_fade(Application_Links* app, View_ID view_id, f32 seconds, Range_i64 range, int_color color); internal b32 view_post_fade(Application_Links* app, View_ID view_id, f32 seconds, Range_i64 range, FColor color);
internal b32 view_push_context(Application_Links* app, View_ID view_id, View_Context* ctx); internal b32 view_push_context(Application_Links* app, View_ID view_id, View_Context* ctx);
internal b32 view_pop_context(Application_Links* app, View_ID view_id); internal b32 view_pop_context(Application_Links* app, View_ID view_id);
internal b32 view_alter_context(Application_Links* app, View_ID view, View_Context* ctx); internal b32 view_alter_context(Application_Links* app, View_ID view_id, View_Context* ctx);
internal View_Context view_current_context(Application_Links* app, View_ID view_id); internal View_Context view_current_context(Application_Links* app, View_ID view_id);
internal Data view_current_context_hook_memory(Application_Links* app, View_ID view_id, Hook_ID hook_id); internal Data view_current_context_hook_memory(Application_Links* app, View_ID view_id, Hook_ID hook_id);
internal Managed_Scope create_user_managed_scope(Application_Links* app); internal Managed_Scope create_user_managed_scope(Application_Links* app);
@ -659,15 +659,15 @@ internal b32 try_modify_face(Application_Links* app, Face_ID id, Face_Descriptio
internal b32 try_release_face(Application_Links* app, Face_ID id, Face_ID replacement_id); internal b32 try_release_face(Application_Links* app, Face_ID id, Face_ID replacement_id);
internal void set_theme_colors(Application_Links* app, Theme_Color* colors, i32 count); internal void set_theme_colors(Application_Links* app, Theme_Color* colors, i32 count);
internal void get_theme_colors(Application_Links* app, Theme_Color* colors, i32 count); internal void get_theme_colors(Application_Links* app, Theme_Color* colors, i32 count);
internal argb_color finalize_color(Application_Links* app, int_color color); internal ARGB_Color finalize_color(Application_Links* app, ID_Color color);
internal String_Const_u8 push_hot_directory(Application_Links* app, Arena* arena); internal String_Const_u8 push_hot_directory(Application_Links* app, Arena* arena);
internal b32 set_hot_directory(Application_Links* app, String_Const_u8 string); internal b32 set_hot_directory(Application_Links* app, String_Const_u8 string);
internal void send_exit_signal(Application_Links* app); internal void send_exit_signal(Application_Links* app);
internal b32 set_window_title(Application_Links* app, String_Const_u8 title); internal b32 set_window_title(Application_Links* app, String_Const_u8 title);
internal Vec2 draw_string_oriented(Application_Links* app, Face_ID font_id, String_Const_u8 str, Vec2 point, int_color color, u32 flags, Vec2 delta); internal Vec2_f32 draw_string_oriented(Application_Links* app, Face_ID font_id, FColor color, String_Const_u8 str, Vec2_f32 point, u32 flags, Vec2_f32 delta);
internal f32 get_string_advance(Application_Links* app, Face_ID font_id, String_Const_u8 str); internal f32 get_string_advance(Application_Links* app, Face_ID font_id, String_Const_u8 str);
internal void draw_rectangle(Application_Links* app, Rect_f32 rect, f32 roundness, int_color color); internal void draw_rectangle(Application_Links* app, Rect_f32 rect, f32 roundness, FColor color);
internal void draw_rectangle_outline(Application_Links* app, Rect_f32 rect, f32 roundness, f32 thickness, int_color color); internal void draw_rectangle_outline(Application_Links* app, Rect_f32 rect, f32 roundness, f32 thickness, FColor color);
internal Rect_f32 draw_set_clip(Application_Links* app, Rect_f32 new_clip); internal Rect_f32 draw_set_clip(Application_Links* app, Rect_f32 new_clip);
internal Text_Layout_ID text_layout_create(Application_Links* app, Buffer_ID buffer_id, Rect_f32 rect, Buffer_Point buffer_point); internal Text_Layout_ID text_layout_create(Application_Links* app, Buffer_ID buffer_id, Rect_f32 rect, Buffer_Point buffer_point);
internal Rect_f32 text_layout_region(Application_Links* app, Text_Layout_ID text_layout_id); internal Rect_f32 text_layout_region(Application_Links* app, Text_Layout_ID text_layout_id);
@ -675,7 +675,7 @@ internal Buffer_ID text_layout_get_buffer(Application_Links* app, Text_Layout_ID
internal Interval_i64 text_layout_get_visible_range(Application_Links* app, Text_Layout_ID text_layout_id); internal Interval_i64 text_layout_get_visible_range(Application_Links* app, Text_Layout_ID text_layout_id);
internal Range_f32 text_layout_line_on_screen(Application_Links* app, Text_Layout_ID layout_id, i64 line_number); internal Range_f32 text_layout_line_on_screen(Application_Links* app, Text_Layout_ID layout_id, i64 line_number);
internal Rect_f32 text_layout_character_on_screen(Application_Links* app, Text_Layout_ID layout_id, i64 pos); internal Rect_f32 text_layout_character_on_screen(Application_Links* app, Text_Layout_ID layout_id, i64 pos);
internal void paint_text_color(Application_Links* app, Text_Layout_ID layout_id, Interval_i64 range, int_color color); internal void paint_text_color(Application_Links* app, Text_Layout_ID layout_id, Interval_i64 range, FColor color);
internal b32 text_layout_free(Application_Links* app, Text_Layout_ID text_layout_id); internal b32 text_layout_free(Application_Links* app, Text_Layout_ID text_layout_id);
internal void draw_text_layout(Application_Links* app, Text_Layout_ID layout_id); internal void draw_text_layout(Application_Links* app, Text_Layout_ID layout_id);
internal void open_color_picker(Application_Links* app, Color_Picker* picker); internal void open_color_picker(Application_Links* app, Color_Picker* picker);

View File

@ -85,10 +85,10 @@ api(custom) function b32 view_set_cursor(Application_Links* app, View_ID view_id
api(custom) function b32 view_set_buffer_scroll(Application_Links* app, View_ID view_id, Buffer_Scroll scroll, Set_Buffer_Scroll_Rule rule); api(custom) function b32 view_set_buffer_scroll(Application_Links* app, View_ID view_id, Buffer_Scroll scroll, Set_Buffer_Scroll_Rule rule);
api(custom) function b32 view_set_mark(Application_Links* app, View_ID view_id, Buffer_Seek seek); api(custom) function b32 view_set_mark(Application_Links* app, View_ID view_id, Buffer_Seek seek);
api(custom) function b32 view_set_buffer(Application_Links* app, View_ID view_id, Buffer_ID buffer_id, Set_Buffer_Flag flags); api(custom) function b32 view_set_buffer(Application_Links* app, View_ID view_id, Buffer_ID buffer_id, Set_Buffer_Flag flags);
api(custom) function b32 view_post_fade(Application_Links* app, View_ID view_id, f32 seconds, Range_i64 range, int_color color); api(custom) function b32 view_post_fade(Application_Links* app, View_ID view_id, f32 seconds, Range_i64 range, FColor color);
api(custom) function b32 view_push_context(Application_Links* app, View_ID view_id, View_Context* ctx); api(custom) function b32 view_push_context(Application_Links* app, View_ID view_id, View_Context* ctx);
api(custom) function b32 view_pop_context(Application_Links* app, View_ID view_id); api(custom) function b32 view_pop_context(Application_Links* app, View_ID view_id);
api(custom) function b32 view_alter_context(Application_Links* app, View_ID view, View_Context* ctx); api(custom) function b32 view_alter_context(Application_Links* app, View_ID view_id, View_Context* ctx);
api(custom) function View_Context view_current_context(Application_Links* app, View_ID view_id); api(custom) function View_Context view_current_context(Application_Links* app, View_ID view_id);
api(custom) function Data view_current_context_hook_memory(Application_Links* app, View_ID view_id, Hook_ID hook_id); api(custom) function Data view_current_context_hook_memory(Application_Links* app, View_ID view_id, Hook_ID hook_id);
api(custom) function Managed_Scope create_user_managed_scope(Application_Links* app); api(custom) function Managed_Scope create_user_managed_scope(Application_Links* app);
@ -146,15 +146,15 @@ api(custom) function b32 try_modify_face(Application_Links* app, Face_ID id, Fac
api(custom) function b32 try_release_face(Application_Links* app, Face_ID id, Face_ID replacement_id); api(custom) function b32 try_release_face(Application_Links* app, Face_ID id, Face_ID replacement_id);
api(custom) function void set_theme_colors(Application_Links* app, Theme_Color* colors, i32 count); api(custom) function void set_theme_colors(Application_Links* app, Theme_Color* colors, i32 count);
api(custom) function void get_theme_colors(Application_Links* app, Theme_Color* colors, i32 count); api(custom) function void get_theme_colors(Application_Links* app, Theme_Color* colors, i32 count);
api(custom) function argb_color finalize_color(Application_Links* app, int_color color); api(custom) function ARGB_Color finalize_color(Application_Links* app, ID_Color color);
api(custom) function String_Const_u8 push_hot_directory(Application_Links* app, Arena* arena); api(custom) function String_Const_u8 push_hot_directory(Application_Links* app, Arena* arena);
api(custom) function b32 set_hot_directory(Application_Links* app, String_Const_u8 string); api(custom) function b32 set_hot_directory(Application_Links* app, String_Const_u8 string);
api(custom) function void send_exit_signal(Application_Links* app); api(custom) function void send_exit_signal(Application_Links* app);
api(custom) function b32 set_window_title(Application_Links* app, String_Const_u8 title); api(custom) function b32 set_window_title(Application_Links* app, String_Const_u8 title);
api(custom) function Vec2 draw_string_oriented(Application_Links* app, Face_ID font_id, String_Const_u8 str, Vec2 point, int_color color, u32 flags, Vec2 delta); api(custom) function Vec2_f32 draw_string_oriented(Application_Links* app, Face_ID font_id, FColor color, String_Const_u8 str, Vec2_f32 point, u32 flags, Vec2_f32 delta);
api(custom) function f32 get_string_advance(Application_Links* app, Face_ID font_id, String_Const_u8 str); api(custom) function f32 get_string_advance(Application_Links* app, Face_ID font_id, String_Const_u8 str);
api(custom) function void draw_rectangle(Application_Links* app, Rect_f32 rect, f32 roundness, int_color color); api(custom) function void draw_rectangle(Application_Links* app, Rect_f32 rect, f32 roundness, FColor color);
api(custom) function void draw_rectangle_outline(Application_Links* app, Rect_f32 rect, f32 roundness, f32 thickness, int_color color); api(custom) function void draw_rectangle_outline(Application_Links* app, Rect_f32 rect, f32 roundness, f32 thickness, FColor color);
api(custom) function Rect_f32 draw_set_clip(Application_Links* app, Rect_f32 new_clip); api(custom) function Rect_f32 draw_set_clip(Application_Links* app, Rect_f32 new_clip);
api(custom) function Text_Layout_ID text_layout_create(Application_Links* app, Buffer_ID buffer_id, Rect_f32 rect, Buffer_Point buffer_point); api(custom) function Text_Layout_ID text_layout_create(Application_Links* app, Buffer_ID buffer_id, Rect_f32 rect, Buffer_Point buffer_point);
api(custom) function Rect_f32 text_layout_region(Application_Links* app, Text_Layout_ID text_layout_id); api(custom) function Rect_f32 text_layout_region(Application_Links* app, Text_Layout_ID text_layout_id);
@ -162,7 +162,7 @@ api(custom) function Buffer_ID text_layout_get_buffer(Application_Links* app, Te
api(custom) function Interval_i64 text_layout_get_visible_range(Application_Links* app, Text_Layout_ID text_layout_id); api(custom) function Interval_i64 text_layout_get_visible_range(Application_Links* app, Text_Layout_ID text_layout_id);
api(custom) function Range_f32 text_layout_line_on_screen(Application_Links* app, Text_Layout_ID layout_id, i64 line_number); api(custom) function Range_f32 text_layout_line_on_screen(Application_Links* app, Text_Layout_ID layout_id, i64 line_number);
api(custom) function Rect_f32 text_layout_character_on_screen(Application_Links* app, Text_Layout_ID layout_id, i64 pos); api(custom) function Rect_f32 text_layout_character_on_screen(Application_Links* app, Text_Layout_ID layout_id, i64 pos);
api(custom) function void paint_text_color(Application_Links* app, Text_Layout_ID layout_id, Interval_i64 range, int_color color); api(custom) function void paint_text_color(Application_Links* app, Text_Layout_ID layout_id, Interval_i64 range, FColor color);
api(custom) function b32 text_layout_free(Application_Links* app, Text_Layout_ID text_layout_id); api(custom) function b32 text_layout_free(Application_Links* app, Text_Layout_ID text_layout_id);
api(custom) function void draw_text_layout(Application_Links* app, Text_Layout_ID layout_id); api(custom) function void draw_text_layout(Application_Links* app, Text_Layout_ID layout_id);
api(custom) function void open_color_picker(Application_Links* app, Color_Picker* picker); api(custom) function void open_color_picker(Application_Links* app, Color_Picker* picker);

View File

@ -43,456 +43,447 @@ lexeme_table_lookup(u64 *hash_array, String_Const_u8 *key_array,
} }
#endif #endif
u64 main_keys_hash_array[125] = { u64 main_keys_hash_array[121] = {
0x0000000000000000,0x0000000000000000,0xae0dc40193b178f9,0xb96986ad74366239, 0xd7d4c38040a2a51b,0xdf638ad4b9cf69f1,0x0000000000000000,0x49161f88607bb631,
0xae0dc4007d2799c3,0x0000000000000000,0x6b890ab6607df9f5,0xfe4cf8e09552fd7d, 0x536665a889795331,0xac2560d906339023,0x0000000000000000,0x0000000000000000,
0xb96986abf449ab87,0x0ce3b6f3f2ae6d8b,0xb96986b1e4d5012d,0x0000000000000000, 0x9df913c598e7c12f,0x0000000000000000,0x30a1e151f231a23d,0x0000000000000000,
0xae0dc4006a46609d,0xbae13981c29d9e93,0xb96986ac8864fc5b,0x0000000000000000, 0xdf638ad451f403ad,0xdf63897bcdc00091,0xb02f5667f4aa212d,0x0000000000000000,
0xfe4cdd7782bcdf87,0x0000000000000000,0x27dc518216dc92b9,0x0000000000000000, 0x0000000000000000,0x0000000000000000,0x0000000000000000,0xac2560d9187f0241,
0x0000000000000000,0x0ce3a6b2ed33a3f3,0xb6c16efd6d7f8691,0x0000000000000000, 0x0000000000000000,0xdf638adf7971e675,0xb2eaca38e283efad,0x0000000000000000,
0x5f1d5c76d1541da9,0x0000000000000000,0x0000000000000000,0xae0dc4006ef1e009, 0xdf638ad318e5d1ff,0xdf638ad080551679,0x0000000000000000,0x0000000000000000,
0xb96986ad76870c01,0xb96986aba21ca901,0xb96986ae1e791a09,0xfe4cda48543d15eb, 0xdf638ad206456083,0x0000000000000000,0x0000000000000000,0x0000000000000000,
0x0000000000000000,0xfe4c21260e153663,0xbae13981c29e1649,0xae0dc4007c306d83, 0x0000000000000000,0x0000000000000000,0xac2560dad36752fb,0x0000000000000000,
0x0000000000000000,0x0000000000000000,0x0000000000000000,0xfe53a22c8fba72db, 0x536665a889463469,0xb2ea03bb268a134f,0x0000000000000000,0xb2e835e1b80e6623,
0x0000000000000000,0x0000000000000000,0xfe4c3c0e0a6459c3,0x0000000000000000, 0xd7d4c38040add1c7,0x0000000000000000,0x0000000000000000,0x0000000000000000,
0x0000000000000000,0x482db76ef4a7c2b9,0x0000000000000000,0x0000000000000000, 0xdf638ad4bed34c65,0x9df9cfb653425513,0xd7d4c38040ae41d1,0x0000000000000000,
0xb96986adef80de03,0xbae13981c29e443f,0x0000000000000000,0x0000000000000000, 0x947a68a4ac1c1501,0x6d88621e3e0beb01,0x0000000000000000,0x536665a88ceccda5,
0x0000000000000000,0xfe4c3b126f24e73b,0x0000000000000000,0x0000000000000000, 0x0000000000000000,0x536665a88ccb6129,0x0000000000000000,0x0000000000000000,
0xb6c16efd6d5e9039,0x0ce3a73cf2370b75,0x0000000000000000,0x0000000000000000, 0x536665a8896b20ab,0x0000000000000000,0x0000000000000000,0xb07367b671947053,
0x0000000000000000,0x0ce3a6cd0e243afd,0xae0dc4006d60a3dd,0xb6c16efd6d33baeb, 0xb2ea3109b4b43533,0x536665a889437cc3,0x0000000000000000,0x0000000000000000,
0x0000000000000000,0x0000000000000000,0xae0dc4007c1e53d9,0xfe50f7d974bbaa05, 0xac2560d91bdcfc25,0x9df91c40ba8cd527,0x0000000000000000,0x536665a889769513,
0xb96986acb1e73223,0xb96986ad72de7ddd,0xb96986ae0d38e84b,0x0000000000000000, 0xdf638979523c12d1,0x0000000000000000,0x0000000000000000,0xb2c5e55df6610773,
0x0000000000000000,0xfe4c3b65bbba43b3,0x320c5ad54842e269,0xb6c16efd6d7eb2db, 0x0000000000000000,0x536665a8894345fb,0x0000000000000000,0x0000000000000000,
0x0000000000000000,0x0000000000000000,0x0000000000000000,0x0000000000000000, 0x0000000000000000,0x0000000000000000,0x0000000000000000,0xac2560daec0e3851,
0xb6c16efd6d41ec49,0xb6c16efd6d3ad8c3,0xb6c16efd6d79768d,0x0000000000000000, 0x0000000000000000,0xb2c54a9d3317afb5,0xac2560d919a44b01,0x0000000000000000,
0x0ce3a725764fbd37,0x0000000000000000,0xb6c16efd6d326823,0xae0dc4006a76982b, 0xb77ddd8b9e414ce1,0x0000000000000000,0x18f86466c464cb01,0x0000000000000000,
0x0000000000000000,0x0000000000000000,0xae0dc40193bc7f19,0xa48abde904c1baf9, 0x0000000000000000,0xd7d4c38040a2854f,0x9df9ce6f49907115,0xac2560d90e3e3341,
0x0000000000000000,0x0000000000000000,0x0000000000000000,0x0000000000000000, 0xdf63897b933beefb,0x0000000000000000,0x9df9cfb6534252e9,0xb2ea06e728b259ed,
0x0000000000000000,0xb6c16efd6d379001,0x0000000000000000,0x0000000000000000, 0x0000000000000000,0x0000000000000000,0xb2ea5877c412647b,0x0000000000000000,
0x0000000000000000,0x0000000000000000,0xb96986ae0d2c0de5,0x0000000000000000, 0xac2560d90618b725,0x34cb86f3fc1ca901,0xdf638ad4a65162c3,0x0000000000000000,
0xb96986ac4109bb39,0x0000000000000000,0x5ee5e1225dabbaf9,0x6b8a48a90953eeab, 0x536665a88c2a1c41,0x49161f88607ba867,0xb2ead185c7065f1b,0x9df91f79b4ec2e9b,
0x0000000000000000,0x0000000000000000,0x0000000000000000,0x0000000000000000, 0x0000000000000000,0xdf638ad4bf72e239,0xac2560dad9a93d8b,0xdf638979520bcfbf,
0xb6c16efd6d3a30eb,0xb96986ae1e53e287,0xfe4c6461b7a951e5,0x0000000000000000, 0xac2560dada9feda1,0x0000000000000000,0x0000000000000000,0x536665a88cc8be73,
0xbae13981c29ded97,0xbae13981c29dde75,0x5f1d5c76d1541c8f,0x0000000000000000, 0xdf63897b8855fa1b,0xb2c5e570be19f85b,0x9df91ccc8c85f8ed,0xd7d4c38040adb35d,
0x0ce3b6f5b502c4ff,0x0000000000000000,0xae0dc4006c0426b9,0x0ce3b6f3f2ae5611, 0x0000000000000000,
0xc8cfe7a5027aeab5,
}; };
u8 main_keys_key_array_2[] = {0x63,0x6f,0x6e,0x73,0x74,}; u8 main_keys_key_array_0[] = {0x61,0x73,0x6d,};
u8 main_keys_key_array_3[] = {0x73,0x74,0x72,0x75,0x63,0x74,}; u8 main_keys_key_array_1[] = {0x73,0x74,0x72,0x75,0x63,0x74,};
u8 main_keys_key_array_4[] = {0x77,0x68,0x69,0x6c,0x65,}; u8 main_keys_key_array_3[] = {0x64,0x6f,};
u8 main_keys_key_array_6[] = {0x70,0x72,0x6f,0x74,0x65,0x63,0x74,0x65,0x64,}; u8 main_keys_key_array_4[] = {0x67,0x6f,0x74,0x6f,};
u8 main_keys_key_array_7[] = {0x65,0x78,0x70,0x6c,0x69,0x63,0x69,0x74,}; u8 main_keys_key_array_5[] = {0x66,0x61,0x6c,0x73,0x65,};
u8 main_keys_key_array_8[] = {0x72,0x65,0x74,0x75,0x72,0x6e,}; u8 main_keys_key_array_8[] = {0x74,0x79,0x70,0x65,0x64,0x65,0x66,};
u8 main_keys_key_array_9[] = {0x61,0x6c,0x69,0x67,0x6e,0x6f,0x66,}; u8 main_keys_key_array_10[] = {0x74,0x68,0x72,0x65,0x61,0x64,0x5f,0x6c,0x6f,0x63,0x61,0x6c,};
u8 main_keys_key_array_10[] = {0x74,0x79,0x70,0x65,0x69,0x64,}; u8 main_keys_key_array_12[] = {0x73,0x69,0x67,0x6e,0x65,0x64,};
u8 main_keys_key_array_12[] = {0x66,0x6c,0x6f,0x61,0x74,}; u8 main_keys_key_array_13[] = {0x66,0x72,0x69,0x65,0x6e,0x64,};
u8 main_keys_key_array_13[] = {0x61,0x73,0x6d,}; u8 main_keys_key_array_14[] = {0x70,0x72,0x6f,0x74,0x65,0x63,0x74,0x65,0x64,};
u8 main_keys_key_array_14[] = {0x69,0x6e,0x6c,0x69,0x6e,0x65,}; u8 main_keys_key_array_19[] = {0x63,0x6f,0x6e,0x73,0x74,};
u8 main_keys_key_array_16[] = {0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,}; u8 main_keys_key_array_21[] = {0x74,0x79,0x70,0x65,0x69,0x64,};
u8 main_keys_key_array_18[] = {0x73,0x74,0x61,0x74,0x69,0x63,0x5f,0x63,0x61,0x73,0x74,}; u8 main_keys_key_array_22[] = {0x75,0x6e,0x73,0x69,0x67,0x6e,0x65,0x64,};
u8 main_keys_key_array_21[] = {0x70,0x72,0x69,0x76,0x61,0x74,0x65,}; u8 main_keys_key_array_24[] = {0x72,0x65,0x74,0x75,0x72,0x6e,};
u8 main_keys_key_array_22[] = {0x74,0x68,0x69,0x73,}; u8 main_keys_key_array_25[] = {0x70,0x75,0x62,0x6c,0x69,0x63,};
u8 main_keys_key_array_24[] = {0x64,0x6f,}; u8 main_keys_key_array_28[] = {0x69,0x6e,0x6c,0x69,0x6e,0x65,};
u8 main_keys_key_array_27[] = {0x73,0x68,0x6f,0x72,0x74,}; u8 main_keys_key_array_34[] = {0x77,0x68,0x69,0x6c,0x65,};
u8 main_keys_key_array_28[] = {0x73,0x74,0x61,0x74,0x69,0x63,}; u8 main_keys_key_array_36[] = {0x62,0x6f,0x6f,0x6c,};
u8 main_keys_key_array_29[] = {0x70,0x75,0x62,0x6c,0x69,0x63,}; u8 main_keys_key_array_37[] = {0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,};
u8 main_keys_key_array_30[] = {0x65,0x78,0x70,0x6f,0x72,0x74,}; u8 main_keys_key_array_39[] = {0x74,0x79,0x70,0x65,0x6e,0x61,0x6d,0x65,};
u8 main_keys_key_array_31[] = {0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72,}; u8 main_keys_key_array_40[] = {0x74,0x72,0x79,};
u8 main_keys_key_array_33[] = {0x64,0x65,0x63,0x6c,0x74,0x79,0x70,0x65,}; u8 main_keys_key_array_44[] = {0x73,0x77,0x69,0x74,0x63,0x68,};
u8 main_keys_key_array_34[] = {0x69,0x6e,0x74,}; u8 main_keys_key_array_45[] = {0x61,0x6c,0x69,0x67,0x6e,0x6f,0x66,};
u8 main_keys_key_array_35[] = {0x75,0x6e,0x69,0x6f,0x6e,}; u8 main_keys_key_array_46[] = {0x69,0x6e,0x74,};
u8 main_keys_key_array_39[] = {0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,}; u8 main_keys_key_array_48[] = {0x72,0x65,0x69,0x6e,0x74,0x65,0x72,0x70,0x72,0x65,0x74,0x5f,0x63,0x61,0x73,0x74,};
u8 main_keys_key_array_42[] = {0x76,0x6f,0x6c,0x61,0x74,0x69,0x6c,0x65,}; u8 main_keys_key_array_49[] = {0x73,0x74,0x61,0x74,0x69,0x63,0x5f,0x63,0x61,0x73,0x74,};
u8 main_keys_key_array_45[] = {0x64,0x79,0x6e,0x61,0x6d,0x69,0x63,0x5f,0x63,0x61,0x73,0x74,}; u8 main_keys_key_array_51[] = {0x76,0x6f,0x69,0x64,};
u8 main_keys_key_array_48[] = {0x64,0x6f,0x75,0x62,0x6c,0x65,}; u8 main_keys_key_array_53[] = {0x74,0x68,0x69,0x73,};
u8 main_keys_key_array_49[] = {0x74,0x72,0x79,}; u8 main_keys_key_array_56[] = {0x63,0x68,0x61,0x72,};
u8 main_keys_key_array_53[] = {0x74,0x79,0x70,0x65,0x6e,0x61,0x6d,0x65,}; u8 main_keys_key_array_59[] = {0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,};
u8 main_keys_key_array_56[] = {0x6c,0x6f,0x6e,0x67,}; u8 main_keys_key_array_60[] = {0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72,};
u8 main_keys_key_array_57[] = {0x76,0x69,0x72,0x74,0x75,0x61,0x6c,}; u8 main_keys_key_array_61[] = {0x65,0x6c,0x73,0x65,};
u8 main_keys_key_array_61[] = {0x64,0x65,0x66,0x61,0x75,0x6c,0x74,}; u8 main_keys_key_array_64[] = {0x63,0x61,0x74,0x63,0x68,};
u8 main_keys_key_array_62[] = {0x63,0x61,0x74,0x63,0x68,}; u8 main_keys_key_array_65[] = {0x6e,0x75,0x6c,0x6c,0x70,0x74,0x72,};
u8 main_keys_key_array_63[] = {0x63,0x61,0x73,0x65,}; u8 main_keys_key_array_67[] = {0x63,0x61,0x73,0x65,};
u8 main_keys_key_array_66[] = {0x75,0x73,0x69,0x6e,0x67,}; u8 main_keys_key_array_68[] = {0x65,0x78,0x70,0x6f,0x72,0x74,};
u8 main_keys_key_array_67[] = {0x6e,0x6f,0x65,0x78,0x63,0x65,0x70,0x74,}; u8 main_keys_key_array_71[] = {0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,};
u8 main_keys_key_array_68[] = {0x64,0x65,0x6c,0x65,0x74,0x65,}; u8 main_keys_key_array_73[] = {0x65,0x6e,0x75,0x6d,};
u8 main_keys_key_array_69[] = {0x73,0x77,0x69,0x74,0x63,0x68,}; u8 main_keys_key_array_79[] = {0x73,0x68,0x6f,0x72,0x74,};
u8 main_keys_key_array_70[] = {0x73,0x69,0x7a,0x65,0x6f,0x66,}; u8 main_keys_key_array_81[] = {0x65,0x78,0x70,0x6c,0x69,0x63,0x69,0x74,};
u8 main_keys_key_array_73[] = {0x74,0x65,0x6d,0x70,0x6c,0x61,0x74,0x65,}; u8 main_keys_key_array_82[] = {0x63,0x6c,0x61,0x73,0x73,};
u8 main_keys_key_array_74[] = {0x73,0x74,0x61,0x74,0x69,0x63,0x5f,0x61,0x73,0x73,0x65,0x72,0x74,}; u8 main_keys_key_array_84[] = {0x73,0x74,0x61,0x74,0x69,0x63,0x5f,0x61,0x73,0x73,0x65,0x72,0x74,};
u8 main_keys_key_array_75[] = {0x74,0x72,0x75,0x65,}; u8 main_keys_key_array_86[] = {0x64,0x79,0x6e,0x61,0x6d,0x69,0x63,0x5f,0x63,0x61,0x73,0x74,};
u8 main_keys_key_array_80[] = {0x67,0x6f,0x74,0x6f,}; u8 main_keys_key_array_89[] = {0x66,0x6f,0x72,};
u8 main_keys_key_array_81[] = {0x65,0x6e,0x75,0x6d,}; u8 main_keys_key_array_90[] = {0x64,0x65,0x66,0x61,0x75,0x6c,0x74,};
u8 main_keys_key_array_82[] = {0x76,0x6f,0x69,0x64,}; u8 main_keys_key_array_91[] = {0x62,0x72,0x65,0x61,0x6b,};
u8 main_keys_key_array_84[] = {0x74,0x79,0x70,0x65,0x64,0x65,0x66,}; u8 main_keys_key_array_92[] = {0x64,0x65,0x6c,0x65,0x74,0x65,};
u8 main_keys_key_array_86[] = {0x63,0x68,0x61,0x72,}; u8 main_keys_key_array_94[] = {0x61,0x6c,0x69,0x67,0x6e,0x61,0x73,};
u8 main_keys_key_array_87[] = {0x66,0x61,0x6c,0x73,0x65,}; u8 main_keys_key_array_95[] = {0x6e,0x6f,0x65,0x78,0x63,0x65,0x70,0x74,};
u8 main_keys_key_array_90[] = {0x63,0x6c,0x61,0x73,0x73,}; u8 main_keys_key_array_98[] = {0x76,0x6f,0x6c,0x61,0x74,0x69,0x6c,0x65,};
u8 main_keys_key_array_91[] = {0x72,0x65,0x69,0x6e,0x74,0x65,0x72,0x70,0x72,0x65,0x74,0x5f,0x63,0x61,0x73,0x74,}; u8 main_keys_key_array_100[] = {0x66,0x6c,0x6f,0x61,0x74,};
u8 main_keys_key_array_97[] = {0x62,0x6f,0x6f,0x6c,}; u8 main_keys_key_array_101[] = {0x63,0x6f,0x6e,0x73,0x74,0x5f,0x63,0x61,0x73,0x74,};
u8 main_keys_key_array_102[] = {0x73,0x69,0x67,0x6e,0x65,0x64,}; u8 main_keys_key_array_102[] = {0x73,0x69,0x7a,0x65,0x6f,0x66,};
u8 main_keys_key_array_104[] = {0x66,0x72,0x69,0x65,0x6e,0x64,}; u8 main_keys_key_array_104[] = {0x6c,0x6f,0x6e,0x67,};
u8 main_keys_key_array_106[] = {0x63,0x6f,0x6e,0x73,0x74,0x5f,0x63,0x61,0x73,0x74,}; u8 main_keys_key_array_105[] = {0x69,0x66,};
u8 main_keys_key_array_107[] = {0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,}; u8 main_keys_key_array_106[] = {0x74,0x65,0x6d,0x70,0x6c,0x61,0x74,0x65,};
u8 main_keys_key_array_112[] = {0x65,0x6c,0x73,0x65,}; u8 main_keys_key_array_107[] = {0x70,0x72,0x69,0x76,0x61,0x74,0x65,};
u8 main_keys_key_array_113[] = {0x65,0x78,0x74,0x65,0x72,0x6e,}; u8 main_keys_key_array_109[] = {0x73,0x74,0x61,0x74,0x69,0x63,};
u8 main_keys_key_array_114[] = {0x75,0x6e,0x73,0x69,0x67,0x6e,0x65,0x64,}; u8 main_keys_key_array_110[] = {0x75,0x6e,0x69,0x6f,0x6e,};
u8 main_keys_key_array_116[] = {0x66,0x6f,0x72,}; u8 main_keys_key_array_111[] = {0x65,0x78,0x74,0x65,0x72,0x6e,};
u8 main_keys_key_array_117[] = {0x6e,0x65,0x77,}; u8 main_keys_key_array_112[] = {0x75,0x73,0x69,0x6e,0x67,};
u8 main_keys_key_array_118[] = {0x69,0x66,}; u8 main_keys_key_array_115[] = {0x74,0x72,0x75,0x65,};
u8 main_keys_key_array_120[] = {0x6e,0x75,0x6c,0x6c,0x70,0x74,0x72,}; u8 main_keys_key_array_116[] = {0x64,0x6f,0x75,0x62,0x6c,0x65,};
u8 main_keys_key_array_122[] = {0x62,0x72,0x65,0x61,0x6b,}; u8 main_keys_key_array_117[] = {0x64,0x65,0x63,0x6c,0x74,0x79,0x70,0x65,};
u8 main_keys_key_array_123[] = {0x61,0x6c,0x69,0x67,0x6e,0x61,0x73,}; u8 main_keys_key_array_118[] = {0x76,0x69,0x72,0x74,0x75,0x61,0x6c,};
u8 main_keys_key_array_124[] = {0x74,0x68,0x72,0x65,0x61,0x64,0x5f,0x6c,0x6f,0x63,0x61,0x6c,}; u8 main_keys_key_array_119[] = {0x6e,0x65,0x77,};
String_Const_u8 main_keys_key_array[125] = { String_Const_u8 main_keys_key_array[121] = {
{main_keys_key_array_0, 3},
{main_keys_key_array_1, 6},
{0, 0},
{main_keys_key_array_3, 2},
{main_keys_key_array_4, 4},
{main_keys_key_array_5, 5},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{main_keys_key_array_2, 5}, {main_keys_key_array_8, 7},
{main_keys_key_array_3, 6},
{main_keys_key_array_4, 5},
{0, 0}, {0, 0},
{main_keys_key_array_6, 9}, {main_keys_key_array_10, 12},
{main_keys_key_array_7, 8},
{main_keys_key_array_8, 6},
{main_keys_key_array_9, 7},
{main_keys_key_array_10, 6},
{0, 0}, {0, 0},
{main_keys_key_array_12, 5}, {main_keys_key_array_12, 6},
{main_keys_key_array_13, 3}, {main_keys_key_array_13, 6},
{main_keys_key_array_14, 6}, {main_keys_key_array_14, 9},
{0, 0},
{main_keys_key_array_16, 8},
{0, 0},
{main_keys_key_array_18, 11},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{main_keys_key_array_21, 7},
{main_keys_key_array_22, 4},
{0, 0},
{main_keys_key_array_24, 2},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{main_keys_key_array_27, 5}, {main_keys_key_array_19, 5},
{0, 0},
{main_keys_key_array_21, 6},
{main_keys_key_array_22, 8},
{0, 0},
{main_keys_key_array_24, 6},
{main_keys_key_array_25, 6},
{0, 0},
{0, 0},
{main_keys_key_array_28, 6}, {main_keys_key_array_28, 6},
{main_keys_key_array_29, 6},
{main_keys_key_array_30, 6},
{main_keys_key_array_31, 8},
{0, 0},
{main_keys_key_array_33, 8},
{main_keys_key_array_34, 3},
{main_keys_key_array_35, 5},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{0, 0},
{0, 0},
{main_keys_key_array_34, 5},
{0, 0},
{main_keys_key_array_36, 4},
{main_keys_key_array_37, 8},
{0, 0},
{main_keys_key_array_39, 8}, {main_keys_key_array_39, 8},
{0, 0}, {main_keys_key_array_40, 3},
{0, 0},
{main_keys_key_array_42, 8},
{0, 0},
{0, 0},
{main_keys_key_array_45, 12},
{0, 0},
{0, 0},
{main_keys_key_array_48, 6},
{main_keys_key_array_49, 3},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{main_keys_key_array_53, 8}, {main_keys_key_array_44, 6},
{main_keys_key_array_45, 7},
{main_keys_key_array_46, 3},
{0, 0},
{main_keys_key_array_48, 16},
{main_keys_key_array_49, 11},
{0, 0},
{main_keys_key_array_51, 4},
{0, 0},
{main_keys_key_array_53, 4},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{main_keys_key_array_56, 4}, {main_keys_key_array_56, 4},
{main_keys_key_array_57, 7},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{0, 0}, {main_keys_key_array_59, 9},
{main_keys_key_array_61, 7}, {main_keys_key_array_60, 8},
{main_keys_key_array_62, 5}, {main_keys_key_array_61, 4},
{main_keys_key_array_63, 4},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{main_keys_key_array_66, 5}, {main_keys_key_array_64, 5},
{main_keys_key_array_67, 8}, {main_keys_key_array_65, 7},
{0, 0},
{main_keys_key_array_67, 4},
{main_keys_key_array_68, 6}, {main_keys_key_array_68, 6},
{main_keys_key_array_69, 6},
{main_keys_key_array_70, 6},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{main_keys_key_array_73, 8}, {main_keys_key_array_71, 8},
{main_keys_key_array_74, 13},
{main_keys_key_array_75, 4},
{0, 0}, {0, 0},
{0, 0}, {main_keys_key_array_73, 4},
{0, 0},
{0, 0},
{main_keys_key_array_80, 4},
{main_keys_key_array_81, 4},
{main_keys_key_array_82, 4},
{0, 0},
{main_keys_key_array_84, 7},
{0, 0},
{main_keys_key_array_86, 4},
{main_keys_key_array_87, 5},
{0, 0},
{0, 0},
{main_keys_key_array_90, 5},
{main_keys_key_array_91, 16},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{main_keys_key_array_97, 4}, {main_keys_key_array_79, 5},
{0, 0},
{main_keys_key_array_81, 8},
{main_keys_key_array_82, 5},
{0, 0},
{main_keys_key_array_84, 13},
{0, 0},
{main_keys_key_array_86, 12},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{main_keys_key_array_89, 3},
{main_keys_key_array_90, 7},
{main_keys_key_array_91, 5},
{main_keys_key_array_92, 6},
{0, 0},
{main_keys_key_array_94, 7},
{main_keys_key_array_95, 8},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{main_keys_key_array_98, 8},
{0, 0},
{main_keys_key_array_100, 5},
{main_keys_key_array_101, 10},
{main_keys_key_array_102, 6}, {main_keys_key_array_102, 6},
{0, 0}, {0, 0},
{main_keys_key_array_104, 6}, {main_keys_key_array_104, 4},
{main_keys_key_array_105, 2},
{main_keys_key_array_106, 8},
{main_keys_key_array_107, 7},
{0, 0}, {0, 0},
{main_keys_key_array_106, 10}, {main_keys_key_array_109, 6},
{main_keys_key_array_107, 9}, {main_keys_key_array_110, 5},
{main_keys_key_array_111, 6},
{main_keys_key_array_112, 5},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{main_keys_key_array_115, 4},
{main_keys_key_array_116, 6},
{main_keys_key_array_117, 8},
{main_keys_key_array_118, 7},
{main_keys_key_array_119, 3},
{0, 0}, {0, 0},
{0, 0},
{main_keys_key_array_112, 4},
{main_keys_key_array_113, 6},
{main_keys_key_array_114, 8},
{0, 0},
{main_keys_key_array_116, 3},
{main_keys_key_array_117, 3},
{main_keys_key_array_118, 2},
{0, 0},
{main_keys_key_array_120, 7},
{0, 0},
{main_keys_key_array_122, 5},
{main_keys_key_array_123, 7},
{main_keys_key_array_124, 12},
}; };
Lexeme_Table_Value main_keys_value_array[125] = { Lexeme_Table_Value main_keys_value_array[121] = {
{4, TokenCppKind_Asm},
{4, TokenCppKind_Struct},
{0, 0},
{4, TokenCppKind_Do},
{4, TokenCppKind_Goto},
{8, TokenCppKind_LiteralFalse},
{0, 0},
{0, 0},
{4, TokenCppKind_Typedef},
{0, 0},
{4, TokenCppKind_ThreadLocal},
{0, 0},
{4, TokenCppKind_Signed},
{4, TokenCppKind_Friend},
{4, TokenCppKind_Protected},
{0, 0},
{0, 0},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{4, TokenCppKind_Const}, {4, TokenCppKind_Const},
{4, TokenCppKind_Struct},
{4, TokenCppKind_While},
{0, 0}, {0, 0},
{4, TokenCppKind_Protected},
{4, TokenCppKind_Explicit},
{4, TokenCppKind_Return},
{4, TokenCppKind_AlignOf},
{4, TokenCppKind_TypeID}, {4, TokenCppKind_TypeID},
{4, TokenCppKind_Unsigned},
{0, 0},
{4, TokenCppKind_Return},
{4, TokenCppKind_Public},
{0, 0},
{0, 0}, {0, 0},
{4, TokenCppKind_Float},
{4, TokenCppKind_Asm},
{4, TokenCppKind_Inline}, {4, TokenCppKind_Inline},
{0, 0}, {0, 0},
{0, 0},
{0, 0},
{0, 0},
{0, 0},
{4, TokenCppKind_While},
{0, 0},
{4, TokenCppKind_Bool},
{4, TokenCppKind_Operator}, {4, TokenCppKind_Operator},
{0, 0}, {0, 0},
{4, TokenCppKind_StaticCast}, {4, TokenCppKind_Typename},
{0, 0},
{0, 0},
{4, TokenCppKind_Private},
{4, TokenCppKind_This},
{0, 0},
{4, TokenCppKind_Do},
{0, 0},
{0, 0},
{4, TokenCppKind_Short},
{4, TokenCppKind_Static},
{4, TokenCppKind_Public},
{4, TokenCppKind_Export},
{4, TokenCppKind_Register},
{0, 0},
{4, TokenCppKind_DeclType},
{4, TokenCppKind_Int},
{4, TokenCppKind_Union},
{0, 0},
{0, 0},
{0, 0},
{4, TokenCppKind_Continue},
{0, 0},
{0, 0},
{4, TokenCppKind_Volatile},
{0, 0},
{0, 0},
{4, TokenCppKind_DynamicCast},
{0, 0},
{0, 0},
{4, TokenCppKind_Double},
{4, TokenCppKind_Try}, {4, TokenCppKind_Try},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{4, TokenCppKind_Typename},
{0, 0},
{0, 0},
{4, TokenCppKind_Long},
{4, TokenCppKind_Virtual},
{0, 0},
{0, 0},
{0, 0},
{4, TokenCppKind_Default},
{4, TokenCppKind_Catch},
{4, TokenCppKind_Case},
{0, 0},
{0, 0},
{4, TokenCppKind_Using},
{4, TokenCppKind_NoExcept},
{4, TokenCppKind_Delete},
{4, TokenCppKind_Switch}, {4, TokenCppKind_Switch},
{4, TokenCppKind_SizeOf}, {4, TokenCppKind_AlignOf},
{4, TokenCppKind_Int},
{0, 0}, {0, 0},
{4, TokenCppKind_ReinterpretCast},
{4, TokenCppKind_StaticCast},
{0, 0}, {0, 0},
{4, TokenCppKind_Template},
{4, TokenCppKind_StaticAssert},
{8, TokenCppKind_LiteralTrue},
{0, 0},
{0, 0},
{0, 0},
{0, 0},
{4, TokenCppKind_Goto},
{4, TokenCppKind_Enum},
{4, TokenCppKind_Void}, {4, TokenCppKind_Void},
{0, 0}, {0, 0},
{4, TokenCppKind_Typedef}, {4, TokenCppKind_This},
{0, 0},
{0, 0}, {0, 0},
{4, TokenCppKind_Char}, {4, TokenCppKind_Char},
{8, TokenCppKind_LiteralFalse},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{4, TokenCppKind_Class},
{4, TokenCppKind_ReinterpretCast},
{0, 0},
{0, 0},
{0, 0},
{0, 0},
{0, 0},
{4, TokenCppKind_Bool},
{0, 0},
{0, 0},
{0, 0},
{0, 0},
{4, TokenCppKind_Signed},
{0, 0},
{4, TokenCppKind_Friend},
{0, 0},
{4, TokenCppKind_ConstCast},
{4, TokenCppKind_Namespace}, {4, TokenCppKind_Namespace},
{0, 0}, {4, TokenCppKind_Register},
{0, 0},
{0, 0},
{0, 0},
{4, TokenCppKind_Else}, {4, TokenCppKind_Else},
{4, TokenCppKind_Extern},
{4, TokenCppKind_Unsigned},
{0, 0}, {0, 0},
{4, TokenCppKind_For},
{4, TokenCppKind_New},
{4, TokenCppKind_If},
{0, 0}, {0, 0},
{4, TokenCppKind_Catch},
{4, TokenCppKind_NullPtr}, {4, TokenCppKind_NullPtr},
{0, 0}, {0, 0},
{4, TokenCppKind_Case},
{4, TokenCppKind_Export},
{0, 0},
{0, 0},
{4, TokenCppKind_Continue},
{0, 0},
{4, TokenCppKind_Enum},
{0, 0},
{0, 0},
{0, 0},
{0, 0},
{0, 0},
{4, TokenCppKind_Short},
{0, 0},
{4, TokenCppKind_Explicit},
{4, TokenCppKind_Class},
{0, 0},
{4, TokenCppKind_StaticAssert},
{0, 0},
{4, TokenCppKind_DynamicCast},
{0, 0},
{0, 0},
{4, TokenCppKind_For},
{4, TokenCppKind_Default},
{4, TokenCppKind_Break}, {4, TokenCppKind_Break},
{4, TokenCppKind_Delete},
{0, 0},
{4, TokenCppKind_AlignAs}, {4, TokenCppKind_AlignAs},
{4, TokenCppKind_ThreadLocal}, {4, TokenCppKind_NoExcept},
{0, 0},
{0, 0},
{4, TokenCppKind_Volatile},
{0, 0},
{4, TokenCppKind_Float},
{4, TokenCppKind_ConstCast},
{4, TokenCppKind_SizeOf},
{0, 0},
{4, TokenCppKind_Long},
{4, TokenCppKind_If},
{4, TokenCppKind_Template},
{4, TokenCppKind_Private},
{0, 0},
{4, TokenCppKind_Static},
{4, TokenCppKind_Union},
{4, TokenCppKind_Extern},
{4, TokenCppKind_Using},
{0, 0},
{0, 0},
{8, TokenCppKind_LiteralTrue},
{4, TokenCppKind_Double},
{4, TokenCppKind_DeclType},
{4, TokenCppKind_Virtual},
{4, TokenCppKind_New},
{0, 0},
}; };
i32 main_keys_slot_count = 125; i32 main_keys_slot_count = 121;
u64 main_keys_seed = 0xfa381694d5674125; u64 main_keys_seed = 0xc6a99799e45617dd;
u64 pp_directives_hash_array[25] = { u64 pp_directives_hash_array[25] = {
0x0000000000000000,0x34b86dc413bdc61d,0x0000000000000000,0xcc5e69206f9dddbd, 0xfa6a010b7dbbde13,0x0000000000000000,0xce2f38db2af5366d,0xfa6a010b7d62d06d,
0x0000000000000000,0x65f024ddd53ade19,0x65f02489c656353d,0x0000000000000000, 0xcc962e54221688f9,0x0000000000000000,0x03b5dc5556efc84d,0xfa6a010b0bc317e5,
0xcc5e69207d2543bd,0x35db8e7164ab1e55,0x6bb45a7c34b15b09,0x35db8e7164f625dd, 0x0000000000000000,0xcaa053e8a98a24b9,0xcaa053e8a98a2085,0xcc9620cd74b482d5,
0x0000000000000000,0x0000000000000000,0x35db8e7164ab3649,0xcc5e692189cbad79, 0x0000000000000000,0x0000000000000000,0x0000000000000000,0x0000000000000000,
0x0000000000000000,0xcc5e69207d6608a3,0x0000000000000000,0x0000000000000000, 0xce2f38da33096dd7,0xce2f38dbf3d6ad6d,0xfa6a010b0bd76809,0x0000000000000000,
0x65f02488282ecfbd,0x6bb4b5a2472171e5,0xcc5e6921a27c7d55,0x0000000000000000, 0xfa6a010b0edd496d,0xce2f38e88510d3c9,0x0000000000000000,0xcaa053e8aa33abcd,
0x65f02489e6243cc7, 0x0000000000000000,
}; };
u8 pp_directives_key_array_1[] = {0x69,0x66,}; u8 pp_directives_key_array_0[] = {0x75,0x73,0x69,0x6e,0x67,};
u8 pp_directives_key_array_3[] = {0x69,0x66,0x64,0x65,0x66,}; u8 pp_directives_key_array_2[] = {0x64,0x65,0x66,0x69,0x6e,0x65,};
u8 pp_directives_key_array_5[] = {0x70,0x72,0x61,0x67,0x6d,0x61,}; u8 pp_directives_key_array_3[] = {0x75,0x6e,0x64,0x65,0x66,};
u8 pp_directives_key_array_6[] = {0x64,0x65,0x66,0x69,0x6e,0x65,}; u8 pp_directives_key_array_4[] = {0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,};
u8 pp_directives_key_array_8[] = {0x75,0x6e,0x64,0x65,0x66,}; u8 pp_directives_key_array_6[] = {0x69,0x66,};
u8 pp_directives_key_array_9[] = {0x65,0x6c,0x69,0x66,}; u8 pp_directives_key_array_7[] = {0x65,0x6e,0x64,0x69,0x66,};
u8 pp_directives_key_array_10[] = {0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,}; u8 pp_directives_key_array_9[] = {0x65,0x6c,0x73,0x65,};
u8 pp_directives_key_array_11[] = {0x6c,0x69,0x6e,0x65,}; u8 pp_directives_key_array_10[] = {0x65,0x6c,0x69,0x66,};
u8 pp_directives_key_array_14[] = {0x65,0x6c,0x73,0x65,}; u8 pp_directives_key_array_11[] = {0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,};
u8 pp_directives_key_array_15[] = {0x65,0x72,0x72,0x6f,0x72,}; u8 pp_directives_key_array_16[] = {0x69,0x6d,0x70,0x6f,0x72,0x74,};
u8 pp_directives_key_array_17[] = {0x75,0x73,0x69,0x6e,0x67,}; u8 pp_directives_key_array_17[] = {0x69,0x66,0x6e,0x64,0x65,0x66,};
u8 pp_directives_key_array_20[] = {0x69,0x66,0x6e,0x64,0x65,0x66,}; u8 pp_directives_key_array_18[] = {0x65,0x72,0x72,0x6f,0x72,};
u8 pp_directives_key_array_21[] = {0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,}; u8 pp_directives_key_array_20[] = {0x69,0x66,0x64,0x65,0x66,};
u8 pp_directives_key_array_22[] = {0x65,0x6e,0x64,0x69,0x66,}; u8 pp_directives_key_array_21[] = {0x70,0x72,0x61,0x67,0x6d,0x61,};
u8 pp_directives_key_array_24[] = {0x69,0x6d,0x70,0x6f,0x72,0x74,}; u8 pp_directives_key_array_23[] = {0x6c,0x69,0x6e,0x65,};
String_Const_u8 pp_directives_key_array[25] = { String_Const_u8 pp_directives_key_array[25] = {
{pp_directives_key_array_0, 5},
{0, 0}, {0, 0},
{pp_directives_key_array_1, 2}, {pp_directives_key_array_2, 6},
{0, 0},
{pp_directives_key_array_3, 5}, {pp_directives_key_array_3, 5},
{pp_directives_key_array_4, 7},
{0, 0}, {0, 0},
{pp_directives_key_array_5, 6}, {pp_directives_key_array_6, 2},
{pp_directives_key_array_6, 6}, {pp_directives_key_array_7, 5},
{0, 0}, {0, 0},
{pp_directives_key_array_8, 5},
{pp_directives_key_array_9, 4}, {pp_directives_key_array_9, 4},
{pp_directives_key_array_10, 7}, {pp_directives_key_array_10, 4},
{pp_directives_key_array_11, 4}, {pp_directives_key_array_11, 7},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{pp_directives_key_array_14, 4},
{pp_directives_key_array_15, 5},
{0, 0},
{pp_directives_key_array_17, 5},
{0, 0}, {0, 0},
{0, 0}, {0, 0},
{pp_directives_key_array_20, 6}, {pp_directives_key_array_16, 6},
{pp_directives_key_array_21, 7}, {pp_directives_key_array_17, 6},
{pp_directives_key_array_22, 5}, {pp_directives_key_array_18, 5},
{0, 0},
{pp_directives_key_array_20, 5},
{pp_directives_key_array_21, 6},
{0, 0},
{pp_directives_key_array_23, 4},
{0, 0}, {0, 0},
{pp_directives_key_array_24, 6},
}; };
Lexeme_Table_Value pp_directives_value_array[25] = { Lexeme_Table_Value pp_directives_value_array[25] = {
{0, 0},
{5, TokenCppKind_PPIf},
{0, 0},
{5, TokenCppKind_PPIfDef},
{0, 0},
{5, TokenCppKind_PPPragma},
{5, TokenCppKind_PPDefine},
{0, 0},
{5, TokenCppKind_PPUndef},
{5, TokenCppKind_PPElIf},
{5, TokenCppKind_PPInclude},
{5, TokenCppKind_PPLine},
{0, 0},
{0, 0},
{5, TokenCppKind_PPElse},
{5, TokenCppKind_PPError},
{0, 0},
{5, TokenCppKind_PPUsing}, {5, TokenCppKind_PPUsing},
{0, 0}, {0, 0},
{5, TokenCppKind_PPDefine},
{5, TokenCppKind_PPUndef},
{5, TokenCppKind_PPInclude},
{0, 0}, {0, 0},
{5, TokenCppKind_PPIfNDef}, {5, TokenCppKind_PPIf},
{5, TokenCppKind_PPVersion},
{5, TokenCppKind_PPEndIf}, {5, TokenCppKind_PPEndIf},
{0, 0}, {0, 0},
{5, TokenCppKind_PPElse},
{5, TokenCppKind_PPElIf},
{5, TokenCppKind_PPVersion},
{0, 0},
{0, 0},
{0, 0},
{0, 0},
{5, TokenCppKind_PPImport}, {5, TokenCppKind_PPImport},
{5, TokenCppKind_PPIfNDef},
{5, TokenCppKind_PPError},
{0, 0},
{5, TokenCppKind_PPIfDef},
{5, TokenCppKind_PPPragma},
{0, 0},
{5, TokenCppKind_PPLine},
{0, 0},
}; };
i32 pp_directives_slot_count = 25; i32 pp_directives_slot_count = 25;
u64 pp_directives_seed = 0x8fec132e93357a37; u64 pp_directives_seed = 0x7dd6fc44901da387;
u64 pp_keys_hash_array[2] = { u64 pp_keys_hash_array[2] = {
0xaa00330834c0d751,0x0000000000000000, 0x0000000000000000,0x3eb4becea6185ce7,
}; };
u8 pp_keys_key_array_0[] = {0x64,0x65,0x66,0x69,0x6e,0x65,0x64,}; u8 pp_keys_key_array_1[] = {0x64,0x65,0x66,0x69,0x6e,0x65,0x64,};
String_Const_u8 pp_keys_key_array[2] = { String_Const_u8 pp_keys_key_array[2] = {
{pp_keys_key_array_0, 7},
{0, 0}, {0, 0},
{pp_keys_key_array_1, 7},
}; };
Lexeme_Table_Value pp_keys_value_array[2] = { Lexeme_Table_Value pp_keys_value_array[2] = {
{4, TokenCppKind_PPDefined},
{0, 0}, {0, 0},
{4, TokenCppKind_PPDefined},
}; };
i32 pp_keys_slot_count = 2; i32 pp_keys_slot_count = 2;
u64 pp_keys_seed = 0x444d48e552bc237e; u64 pp_keys_seed = 0x62441372bace9443;
struct Lex_State_Cpp{ struct Lex_State_Cpp{
u32 flags_ZF0; u32 flags_ZF0;
u32 flags_KF0; u32 flags_KF0;

View File

@ -348,19 +348,18 @@ system_save_file_sig(){
//////////////////////////////// ////////////////////////////////
internal int_color internal ARGB_Color
swap_r_and_b(int_color a){ swap_r_and_b(ARGB_Color a){
int_color result = a & 0xff00ff00; ARGB_Color result = a & 0xff00ff00;
result |= ((a >> 16) & 0xff); result |= ((a >> 16) & 0xff);
result |= ((a & 0xff) << 16); result |= ((a & 0xff) << 16);
return(result); return(result);
} }
internal int_color internal ARGB_Color
int_color_from_colorref(COLORREF ref, int_color alpha_from){ int_color_from_colorref(COLORREF ref, ARGB_Color alpha_from){
int_color rgb = swap_r_and_b(ref & 0xffffff); ARGB_Color rgb = swap_r_and_b(ref & 0xffffff);
ARGB_Color result = ((0xff000000 & alpha_from) | rgb);
int_color result = ((0xff000000 & alpha_from) | rgb);
return(result); return(result);
} }
@ -383,17 +382,20 @@ color_picker_hook(HWND Window, UINT Message, WPARAM WParam, LPARAM LParam){
case WM_CTLCOLORSTATIC: case WM_CTLCOLORSTATIC:
{ {
// NOTE(casey): I can't believe I'm 42 years old and I still have to do this fucking crap. // NOTE(casey): I can't believe I'm 42 years old and I still have to do
// Microsoft is so fucking fired every god damn day. Would it have killed you to update rgbResult // this fucking crap. Microsoft is so fucking fired every god damn day.
// continuously, or at least provide a GetCurrentColor() call??? // Would it have killed you to update rgbResult continuously, or at least
// provide a GetCurrentColor() call???
// //
// Anyway, since the color picker doesn't tell us when the color is changed, what we do is watch for messages // Anyway, since the color picker doesn't tell us when the color is
// that repaint the color swatch, which is dialog id 0x2c5, and then we sample it to see what color it is. // changed, what we do is watch for messages that repaint the color
// No, I'm not fucking kidding, that's what we do. // swatch, which is dialog id 0x2c5, and then we sample it to see what
// color it is. No, I'm not fucking kidding, that's what we do.
HWND swatch_window = (HWND)LParam; HWND swatch_window = (HWND)LParam;
if(GetDlgCtrlID(swatch_window) == 0x2c5) if(GetDlgCtrlID(swatch_window) == 0x2c5)
{ {
CHOOSECOLORW *win32_params = (CHOOSECOLORW *)GetWindowLongPtr(Window, GWLP_USERDATA); CHOOSECOLORW *win32_params =
(CHOOSECOLORW *)GetWindowLongPtr(Window, GWLP_USERDATA);
if(win32_params) if(win32_params)
{ {
Color_Picker *picker = (Color_Picker*)win32_params->lCustData; Color_Picker *picker = (Color_Picker*)win32_params->lCustData;
@ -401,8 +403,11 @@ color_picker_hook(HWND Window, UINT Message, WPARAM WParam, LPARAM LParam){
RECT rect; RECT rect;
GetClientRect(swatch_window, &rect); GetClientRect(swatch_window, &rect);
HDC swatch_dc = (HDC)WParam; HDC swatch_dc = (HDC)WParam;
COLORREF Probe = GetPixel(swatch_dc, (rect.left + rect.right) / 4, (rect.top + rect.bottom) / 2); COLORREF Probe = GetPixel(swatch_dc,
int_color new_color = int_color_from_colorref(Probe, *picker->dest); (rect.left + rect.right)/4,
(rect.top + rect.bottom)/2);
ARGB_Color new_color =
int_color_from_colorref(Probe, *picker->dest);
if(*picker->dest != new_color) if(*picker->dest != new_color)
{ {
@ -433,9 +438,8 @@ color_picker_thread(LPVOID Param)
{ {
Color_Picker *picker = (Color_Picker*)Param; Color_Picker *picker = (Color_Picker*)Param;
int_color color = 0; ARGB_Color color = 0;
if(picker->dest) if (picker->dest){
{
color = *picker->dest; color = *picker->dest;
} }
@ -451,18 +455,15 @@ color_picker_thread(LPVOID Param)
win32_params.lCustData = (LPARAM)picker; win32_params.lCustData = (LPARAM)picker;
win32_params.lpfnHook = color_picker_hook; win32_params.lpfnHook = color_picker_hook;
if(ChooseColorW(&win32_params)) if (ChooseColorW(&win32_params)){
{
color = int_color_from_colorref(win32_params.rgbResult, color); color = int_color_from_colorref(win32_params.rgbResult, color);
} }
if(picker->dest) if(picker->dest){
{
*picker->dest = color; *picker->dest = color;
} }
if(picker->finished) if (picker->finished){
{
*picker->finished = true; *picker->finished = true;
} }