From 21d482e05f6a754dff6764227a1a500fba59cf0d Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Tue, 22 Oct 2019 18:25:40 -0700 Subject: [PATCH] New fancy color cleanup; fancy string cleanup; api colors now use fancy colors; fancy colors are FColors --- 4ed_api_implementation.cpp | 42 +- 4ed_render_target.cpp | 44 +- 4ed_text_layout.cpp | 33 +- 4ed_text_layout.h | 2 +- 4ed_view.cpp | 19 +- custom/4coder_base_commands.cpp | 12 +- custom/4coder_base_types.cpp | 57 +- custom/4coder_base_types.h | 2 + custom/4coder_clipboard.cpp | 12 +- custom/4coder_default_hooks.cpp | 22 +- custom/4coder_default_include.cpp | 1 - custom/4coder_draw.cpp | 169 +++--- custom/4coder_draw.h | 2 +- custom/4coder_fancy.cpp | 668 ++++++++++++++------- custom/4coder_fancy.h | 50 -- custom/4coder_lister_base.cpp | 27 +- custom/4coder_log_parser.cpp | 111 ++-- custom/4coder_profile_inspect.cpp | 159 +++-- custom/4coder_types.h | 88 ++- custom/generated/command_metadata.h | 22 +- custom/generated/custom_api.h | 42 +- custom/generated/custom_api_master_list.h | 14 +- custom/generated/lexer_cpp.cpp | 675 +++++++++++----------- platform_win32/win32_4ed_functions.cpp | 53 +- 24 files changed, 1284 insertions(+), 1042 deletions(-) delete mode 100644 custom/4coder_fancy.h diff --git a/4ed_api_implementation.cpp b/4ed_api_implementation.cpp index c2ef5986..c5adb3b1 100644 --- a/4ed_api_implementation.cpp +++ b/4ed_api_implementation.cpp @@ -1542,16 +1542,19 @@ view_set_buffer(Application_Links *app, View_ID view_id, Buffer_ID buffer_id, Se return(result); } +// TODO(allen): remove this! 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; View *view = imp_get_view(models, view_id); b32 result = false; if (api_check_view(view)){ i64 size = range_size(range); 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; } } @@ -2582,15 +2585,11 @@ 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){ Models *models = (Models*)app->cmd_context; Color_Table color_table = models->color_table; - u32 color_rgb = color; - if ((color & 0xFF000000) == 0){ - color_rgb = color_table.vals[color % color_table.count]; - } - return(color_rgb); + return(finalize_color(color_table, color)); } api(custom) function String_Const_u8 @@ -2630,10 +2629,11 @@ set_window_title(Application_Links *app, String_Const_u8 title) return(true); } -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) { - Vec2 result = point; + Vec2_f32 result = point; Models *models = (Models*)app->cmd_context; Face *face = font_set_face_from_id(&models->font_set, font_id); 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 -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; if (models->in_render_mode){ 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 -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; if (models->in_render_mode){ 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)); 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){ - 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, 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 -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; Rect_f32 result = {}; 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.min -= 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){ *color_ptr = color; } diff --git a/4ed_render_target.cpp b/4ed_render_target.cpp index 5b270684..e3e3795d 100644 --- a/4ed_render_target.cpp +++ b/4ed_render_target.cpp @@ -162,11 +162,13 @@ draw_rectangle(Render_Target *target, Rect_f32 rect, f32 roundness, u32 color){ } 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); 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_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] = {}; if (!HasFlag(flags, GlyphFlag_Rotate90)){ - Rect_f32 xy = Rf32(x + bounds.xy_off.x0, y + bounds.xy_off.y0, - x + bounds.xy_off.x1, y + bounds.xy_off.y1); + Rect_f32 xy = Rf32(p + bounds.xy_off.p0, p + bounds.xy_off.p1); - vertices[0].xy = V2(xy.x0, xy.y1); vertices[0].uvw = V3(uv.x0, uv.y1, bounds.w); - vertices[1].xy = V2(xy.x1, xy.y1); vertices[1].uvw = V3(uv.x1, uv.y1, bounds.w); - vertices[2].xy = V2(xy.x0, xy.y0); vertices[2].uvw = V3(uv.x0, uv.y0, bounds.w); - vertices[5].xy = V2(xy.x1, xy.y0); vertices[5].uvw = V3(uv.x1, uv.y0, bounds.w); + vertices[0].xy = V2f32(xy.x0, xy.y1); + vertices[0].uvw = V3f32(uv.x0, uv.y1, bounds.w); + vertices[1].xy = V2f32(xy.x1, xy.y1); + 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{ - Rect_f32 xy = Rf32(x - bounds.xy_off.y1, y + bounds.xy_off.x0, - x - bounds.xy_off.y0, y + bounds.xy_off.x1); + Rect_f32 xy = Rf32(p.x - bounds.xy_off.y1, p.y + bounds.xy_off.x0, + 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[1].xy = V2(xy.x1, xy.y1); vertices[1].uvw = V3(uv.x1, uv.y0, bounds.w); - vertices[2].xy = V2(xy.x0, xy.y0); vertices[2].uvw = V3(uv.x0, uv.y1, bounds.w); - vertices[5].xy = V2(xy.x1, xy.y0); vertices[5].uvw = V3(uv.x0, uv.y0, bounds.w); + vertices[0].xy = V2f32(xy.x0, xy.y1); + vertices[0].uvw = V3f32(uv.x1, uv.y1, bounds.w); + vertices[1].xy = V2f32(xy.x1, xy.y1); + 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]; @@ -215,7 +224,8 @@ floor32(Vec2 point){ } 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; if (face != 0){ 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){ u32 codepoint = step.value; 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); point += d*delta; @@ -264,7 +274,7 @@ draw_string(Render_Target *target, Face *face, String_Const_u8 string, Vec2 poin Vec2 pp = point; 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]; } } diff --git a/4ed_text_layout.cpp b/4ed_text_layout.cpp index 1057d534..08c9c235 100644 --- a/4ed_text_layout.cpp +++ b/4ed_text_layout.cpp @@ -38,7 +38,7 @@ internal Text_Layout_ID text_layout_new(Text_Layout_Container *container, Arena *arena, Buffer_ID buffer_id, Buffer_Point point, 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); new_layout_data->arena = arena; 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); f32 width = rect_width(layout->rect); - u32 special_color = color_table.vals[Stag_Special_Character]; - u32 ghost_color = color_table.vals[Stag_Ghost_Character]; + ARGB_Color special_color = color_table.vals[Stag_Special_Character]; + ARGB_Color ghost_color = color_table.vals[Stag_Ghost_Character]; Vec2_f32 shift_p = layout->rect.p0 - layout->point.pixel_shift; 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){ Buffer_Layout_Item *item = block->items; 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){ if (item->codepoint != 0){ - int_color symbol_color = item_colors[item->index - first_index]; - u32 color = 0; - if (symbol_color == Stag_Default){ - if (HasFlag(item->flags, BRFlag_Special_Character)){ - color = special_color; - } - else if (HasFlag(item->flags, BRFlag_Ghost_Character)){ - color = ghost_color; - } - else{ - color = finalize_color(color_table, symbol_color); - } + ARGB_Color color = 0; + if (HasFlag(item->flags, BRFlag_Special_Character)){ + color = special_color; + } + else if (HasFlag(item->flags, BRFlag_Ghost_Character)){ + color = ghost_color; } 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; - 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); } } } diff --git a/4ed_text_layout.h b/4ed_text_layout.h index 0befaff8..08ba20a0 100644 --- a/4ed_text_layout.h +++ b/4ed_text_layout.h @@ -21,7 +21,7 @@ union Text_Layout{ Interval_i64 visible_range; Interval_i64 visible_line_number_range; Rect_f32 rect; - int_color *item_colors; + FColor *item_colors; }; }; diff --git a/4ed_view.cpp b/4ed_view.cpp index c3a98040..0cdd3dc1 100644 --- a/4ed_view.cpp +++ b/4ed_view.cpp @@ -388,7 +388,7 @@ view_set_cursor_and_scroll(Thread_Context *tctx, Models *models, View *view, i64 } 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; file->state.paste_effect.start = start; 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 -finalize_color(Color_Table color_table, int_color color){ - argb_color color_argb = color; - if ((color & 0xFF000000) == 0){ - color_argb = color_table.vals[color % color_table.count]; +function ARGB_Color +finalize_color(Color_Table color_table, ID_Color id){ + return(color_table.vals[id % 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); } //////////////////////////////// diff --git a/custom/4coder_base_commands.cpp b/custom/4coder_base_commands.cpp index 23d3e0eb..06e7fc3d 100644 --- a/custom/4coder_base_commands.cpp +++ b/custom/4coder_base_commands.cpp @@ -1630,10 +1630,9 @@ CUSTOM_COMMAND_SIG(multi_paste){ 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)); - Theme_Color paste = {}; - paste.tag = Stag_Paste; - get_theme_colors(app, &paste, 1); - view_post_fade(app, view, 0.667f, Ii64(range.max + 1, range.max + insert_string.size), paste.color); + view_post_fade(app, view, 0.667f, + Ii64(range.max + 1, range.max + insert_string.size), + fcolor_id(Stag_Paste)); } else{ 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)); // TODO(allen): Send this to all views. - Theme_Color paste; - paste.tag = Stag_Paste; - get_theme_colors(app, &paste, 1); - view_post_fade(app, view, 0.667f, finish_range, paste.color); + view_post_fade(app, view, 0.667f, finish_range, fcolor_id(Stag_Paste)); } } return(finish_range); diff --git a/custom/4coder_base_types.cpp b/custom/4coder_base_types.cpp index 441b27e7..3c7ef6c7 100644 --- a/custom/4coder_base_types.cpp +++ b/custom/4coder_base_types.cpp @@ -1520,18 +1520,18 @@ lerp(i32 a, f32 t, i32 b){ return((i32)(lerp((f32)a, t, (f32)b))); } -internal Vec2 -lerp(Vec2 a, f32 t, Vec2 b){ +internal Vec2_f32 +lerp(Vec2_f32 a, f32 t, Vec2_f32 b){ return(a + (b-a)*t); } -internal Vec3 -lerp(Vec3 a, f32 t, Vec3 b){ +internal Vec3_f32 +lerp(Vec3_f32 a, f32 t, Vec3_f32 b){ return(a + (b-a)*t); } -internal Vec4 -lerp(Vec4 a, f32 t, Vec4 b){ +internal Vec4_f32 +lerp(Vec4_f32 a, f32 t, Vec4_f32 b){ return(a + (b-a)*t); } @@ -1590,34 +1590,9 @@ operator!=(Rect_f32 a, Rect_f32 b){ //////////////////////////////// -// TODO(allen): Convert colors to Vec4 -internal u32 -color_blend(u32 a, f32 t, u32 b){ - 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; +internal Vec4_f32 +unpack_color(ARGB_Color color){ + Vec4_f32 result; result.a = ((color >> 24) & 0xFF)/255.f; result.r = ((color >> 16) & 0xFF)/255.f; result.g = ((color >> 8) & 0xFF)/255.f; @@ -1625,9 +1600,9 @@ unpack_color4(u32 color){ return(result); } -internal u32 -pack_color4(Vec4 color){ - u32 result = +internal ARGB_Color +pack_color(Vec4_f32 color){ + ARGB_Color result = ((u8)(color.a*255) << 24) | ((u8)(color.r*255) << 16) | ((u8)(color.g*255) << 8) | @@ -1635,6 +1610,14 @@ pack_color4(Vec4 color){ 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 rgba_to_hsla(Vec4 rgba){ Vec4 hsla = {}; diff --git a/custom/4coder_base_types.h b/custom/4coder_base_types.h index c52d73cb..b716d5c7 100644 --- a/custom/4coder_base_types.h +++ b/custom/4coder_base_types.h @@ -774,6 +774,8 @@ union Rect_f32_Pair{ }; }; +typedef u32 ARGB_Color; + //////////////////////////////// struct i8_Array{ diff --git a/custom/4coder_clipboard.cpp b/custom/4coder_clipboard.cpp index 3af1b9d6..00a7258a 100644 --- a/custom/4coder_clipboard.cpp +++ b/custom/4coder_clipboard.cpp @@ -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)); // TODO(allen): Send this to all views. - Theme_Color paste = {}; - paste.tag = Stag_Paste; - get_theme_colors(app, &paste, 1); - view_post_fade(app, view, 0.667f, Ii64(pos, pos + string.size), paste.color); + view_post_fade(app, view, 0.667f, Ii64_size(pos, string.size), + fcolor_id(Stag_Paste)); } } } @@ -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)); // TODO(allen): Send this to all views. - Theme_Color paste = {}; - paste.tag = Stag_Paste; - get_theme_colors(app, &paste, 1); - view_post_fade(app, view, 0.667f, Ii64(pos, pos + string.size), paste.color); + view_post_fade(app, view, 0.667f, Ii64_size(pos, string.size), + fcolor_id(Stag_Paste)); } else{ paste(app); diff --git a/custom/4coder_default_hooks.cpp b/custom/4coder_default_hooks.cpp index 10cc9d34..20accb25 100644 --- a/custom/4coder_default_hooks.cpp +++ b/custom/4coder_default_hooks.cpp @@ -289,7 +289,10 @@ default_render_buffer(Application_Links *app, View_ID view_id, b32 is_active_vie // NOTE(allen): 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)); } @@ -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*"); Buffer_ID compilation_buffer = get_buffer_by_name(app, name, Access_Always); 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 if (global_config.use_jump_highlight){ Buffer_ID jump_buffer = get_locked_jump_buffer(app); 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 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, }; - draw_paren_highlight(app, buffer, text_layout_id, cursor_pos, colors, ArrayCount(colors)); + FColor 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 if (global_config.highlight_line_at_cursor && is_active_view){ 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 diff --git a/custom/4coder_default_include.cpp b/custom/4coder_default_include.cpp index 85d89273..939430f1 100644 --- a/custom/4coder_default_include.cpp +++ b/custom/4coder_default_include.cpp @@ -32,7 +32,6 @@ #include "4coder_string_match.h" #include "4coder_helper.h" #include "4coder_delta_rule.h" -#include "4coder_fancy.h" #include "4coder_draw.h" #include "4coder_insertion.h" #include "4coder_lister_base.h" diff --git a/custom/4coder_draw.cpp b/custom/4coder_draw.cpp index c699be5b..92962ba5 100644 --- a/custom/4coder_draw.cpp +++ b/custom/4coder_draw.cpp @@ -4,34 +4,35 @@ // TOP -function int_color +function FColor get_margin_color(i32 level){ - int_color margin = 0; + FColor margin = fcolor_zero(); switch (level){ default: case UIHighlight_None: { - margin = Stag_List_Item; + margin = fcolor_id(Stag_List_Item); }break; case UIHighlight_Hover: { - margin = Stag_List_Item_Hover; + margin = fcolor_id(Stag_List_Item_Hover); }break; case UIHighlight_Active: { - margin = Stag_List_Item_Active; + margin = fcolor_id(Stag_List_Item_Active); }break; } return(margin); } -internal Vec2 -draw_string(Application_Links *app, Face_ID font_id, String_Const_u8 string, Vec2 p, int_color color){ - return(draw_string_oriented(app, font_id, string, p, color, 0, V2(1.f, 0.f))); +internal Vec2_f32 +draw_string(Application_Links *app, Face_ID font_id, String_Const_u8 string, + Vec2_f32 p, FColor color){ + return(draw_string_oriented(app, font_id, color, string, p, 0, V2(1.f, 0.f))); } 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, inner.y1, outer.x1, outer.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 -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); draw_rectangle(app, rect, roundness, color); } 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){ i64 i = range.first; 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 -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); draw_rectangle_outline(app, rect, roundness, thickness, color); } 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){ draw_character_wire_frame(app, layout, i, roundness, thickness, color); } } 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.x1 = rect.x0 + 1.f; draw_rectangle(app, rect, 0.f, color); } 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 y2 = text_layout_line_on_screen(app, layout, line_range.max); 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 -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); } 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); } @@ -165,8 +175,9 @@ function Rect_f32 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 inner = rect_inner(view_rect, 3.f); - int_color margin_color = get_margin_color(is_active_view?UIHighlight_Active:UIHighlight_None); - draw_rectangle(app, inner, 0.f, Stag_Back); + FColor margin_color = get_margin_color(is_active_view? + UIHighlight_Active:UIHighlight_None); + draw_rectangle(app, inner, 0.f, fcolor_id(Stag_Back)); draw_margin(app, view_rect, inner, margin_color); 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){ 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); - Fancy_Color pop2_color = fancy_id(Stag_Pop2); + FColor base_color = fcolor_id(Stag_Base); + FColor pop2_color = fcolor_id(Stag_Pop2); i64 cursor_position = view_get_cursor_pos(app, view_id); 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); 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); @@ -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); - draw_fancy_string(app, face_id, list.first, p, Stag_Default, 0); + draw_fancy_line(app, face_id, fcolor_zero(), &list, p); } function void draw_query_bar(Application_Links *app, Query_Bar *query_bar, Face_ID face_id, Rect_f32 bar){ Scratch_Block scratch(app); - Fancy_String_List list = {}; - push_fancy_string(scratch, &list, fancy_id(Stag_Pop1) , query_bar->prompt); - push_fancy_string(scratch, &list, fancy_id(Stag_Default), query_bar->string); + Fancy_Line list = {}; + push_fancy_string(scratch, &list, fcolor_id(Stag_Pop1) , query_bar->prompt); + push_fancy_string(scratch, &list, fcolor_id(Stag_Default), query_bar->string); 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 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){ 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); - 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_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); Vec2_f32 p = V2f32(margin.x0, line_y.min); Temp_Memory_Block temp(scratch); - Fancy_String *line_string = push_fancy_stringf(scratch, line_color, "%*lld", line_count_digit_count, line_number); - draw_fancy_string(app, face_id, line_string, p, Stag_Margin_Active, 0); + Fancy_String *string = push_fancy_stringf(scratch, 0, line_color, + "%*lld", + line_count_digit_count, + line_number); + draw_fancy_string(app, face_id, fcolor_zero(), string, p); 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_frame_index[wrapped_index] = frame_info.index; - draw_rectangle(app, rect, 0.f, 0xFF000000); - draw_rectangle_outline(app, rect, 0.f, 1.f, 0xFFFFFFFF); + draw_rectangle(app, rect, 0.f, f_black); + draw_rectangle_outline(app, rect, 0.f, 1.f, f_white); 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]; i32 frame_index = history_frame_index[j]; - Fancy_String_List list = {}; - push_fancy_stringf(scratch, &list, pink , "FPS: "); - push_fancy_stringf(scratch, &list, green, "["); - push_fancy_stringf(scratch, &list, white, "%5d", frame_index); - push_fancy_stringf(scratch, &list, green, "]: "); + Fancy_Line list = {}; + push_fancy_stringf(scratch, &list, f_pink , "FPS: "); + push_fancy_stringf(scratch, &list, f_green, "["); + push_fancy_stringf(scratch, &list, f_white, "%5d", frame_index); + push_fancy_stringf(scratch, &list, f_green, "]: "); for (i32 k = 0; k < 2; k += 1){ f32 dt = dts[k]; if (dt == 0.f){ - push_fancy_stringf(scratch, &list, white, "----------"); + push_fancy_stringf(scratch, &list, f_white, "----------"); } 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){ - int_color result = Stag_Default; + ID_Color color = Stag_Default; switch (token.kind){ case TokenBaseKind_Preprocessor: { - result = Stag_Preproc; + color = Stag_Preproc; }break; case TokenBaseKind_Keyword: { - result = Stag_Keyword; + color = Stag_Keyword; }break; case TokenBaseKind_Comment: { - result = Stag_Comment; + color = Stag_Comment; }break; case TokenBaseKind_LiteralString: { - result = Stag_Str_Constant; + color = Stag_Str_Constant; }break; case TokenBaseKind_LiteralInteger: { - result = Stag_Int_Constant; + color = Stag_Int_Constant; }break; case TokenBaseKind_LiteralFloat: { - result = Stag_Float_Constant; + color = Stag_Float_Constant; }break; default: { @@ -368,7 +382,7 @@ get_token_color_cpp(Token token){ case TokenCppKind_LiteralTrue: case TokenCppKind_LiteralFalse: { - result = Stag_Bool_Constant; + color = Stag_Bool_Constant; }break; case TokenCppKind_LiteralCharacter: case TokenCppKind_LiteralCharacterWide: @@ -376,16 +390,16 @@ get_token_color_cpp(Token token){ case TokenCppKind_LiteralCharacterUTF16: case TokenCppKind_LiteralCharacterUTF32: { - result = Stag_Char_Constant; + color = Stag_Char_Constant; }break; case TokenCppKind_PPIncludeFile: { - result = Stag_Include; + color = Stag_Include; }break; } }break; } - return(result); + return(fcolor_id(color)); } 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){ break; } - int_color color = get_token_color_cpp(*token); - paint_text_color(app, text_layout_id, Ii64_size(token->pos, token->size), color); + FColor color = get_token_color_cpp(*token); + paint_text_color(app, text_layout_id, Ii64_size(token->pos, token->size), + color); if (!token_it_inc_non_whitespace(&it)){ break; } @@ -472,7 +487,7 @@ get_enclosure_ranges(Application_Links *app, Arena *arena, Buffer_ID buffer, i64 function void draw_enclosures(Application_Links *app, Text_Layout_ID text_layout_id, Buffer_ID buffer, 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); 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 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, pos, FindNest_Scope, RangeHighlightKind_LineHighlight, colors, 0, color_count); @@ -538,7 +553,7 @@ draw_scope_highlight(Application_Links *app, Buffer_ID buffer, Text_Layout_ID te function void 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); if (token_array.tokens != 0){ 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 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); if (jump_buffer != 0){ Managed_Scope scopes[2]; @@ -599,8 +614,10 @@ draw_highlight_range(Application_Links *app, View_ID view_id, Marker marker_range[2]; if (managed_object_load_data(app, *highlight, 0, 2, marker_range)){ Range_i64 range = Ii64(marker_range[0].pos, marker_range[1].pos); - draw_character_block(app, text_layout_id, range, roundness, Stag_Highlight); - paint_text_color(app, text_layout_id, range, Stag_At_Highlight); + draw_character_block(app, text_layout_id, range, roundness, + 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 mark_pos = view_get_mark_pos(app, view_id); if (is_active_view){ - draw_character_block(app, text_layout_id, cursor_pos, roundness, Stag_Cursor); - paint_text_color_pos(app, text_layout_id, cursor_pos, Stag_At_Cursor); - draw_character_wire_frame(app, text_layout_id, mark_pos, roundness, outline_thickness, Stag_Mark); + draw_character_block(app, text_layout_id, cursor_pos, roundness, + fcolor_id(Stag_Cursor)); + 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{ - draw_character_wire_frame(app, text_layout_id, mark_pos, roundness, outline_thickness, Stag_Mark); - draw_character_wire_frame(app, text_layout_id, cursor_pos, roundness, outline_thickness, Stag_Cursor); + draw_character_wire_frame(app, text_layout_id, mark_pos, + 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); if (cursor_pos != mark_pos){ Range_i64 range = Ii64(cursor_pos, mark_pos); - draw_character_block(app, text_layout_id, range, roundness, Stag_Highlight); - paint_text_color(app, text_layout_id, range, Stag_At_Highlight); + draw_character_block(app, text_layout_id, range, roundness, + 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)); } } diff --git a/custom/4coder_draw.h b/custom/4coder_draw.h index a8a043df..e0c5542a 100644 --- a/custom/4coder_draw.h +++ b/custom/4coder_draw.h @@ -9,7 +9,7 @@ struct Comment_Highlight_Pair{ String_Const_u8 needle; - int_color color; + FColor color; }; typedef i32 Range_Highlight_Kind; diff --git a/custom/4coder_fancy.cpp b/custom/4coder_fancy.cpp index 1414228d..2dc1f158 100644 --- a/custom/4coder_fancy.cpp +++ b/custom/4coder_fancy.cpp @@ -4,258 +4,520 @@ // TOP -static Fancy_Color -fancy_blend(id_color a, f32 t, id_color b){ - Fancy_Color result = {}; - result.index_a = (u16)a; - result.index_b = (u16)b; - result.table_a = 1; - 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; +function FColor +fcolor_argb(ARGB_Color color){ + FColor result = {}; + result.argb = color; + if (result.a_byte == 0){ + result.argb = 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 -fancy_pass_through(void){ - Fancy_Color result = {}; +function FColor +fcolor_id(ID_Color id){ + FColor result = {}; + result.id = id; return(result); } -static int_color -int_color_from(Application_Links *app, Fancy_Color source){ - int_color result = {}; - if ((source.c_a == 255) && (source.c_b == 0)){ - result = source.index_a; +function ARGB_Color +argb_color_blend(ARGB_Color a, f32 at, ARGB_Color b, f32 bt){ + Vec4_f32 av = unpack_color(a); + Vec4_f32 bv = unpack_color(b); + 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{ - source = fancy_resolve_to_rgba(app, source); - result = source.rgba; + result = color.argb; } return(result); } -static b32 -is_valid(Fancy_Color source){ - b32 result = !((source.code == 0) && (source.rgba == 0)); +function FColor +fcolor_change_alpha(Application_Links *app, FColor color, f32 alpha){ + 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); } -static void -fancy_string_list_push(Fancy_String_List *list, Fancy_String *string){ - list->last = (list->last ? list->last->next : list->first) = string; +function b32 +fcolor_is_valid(FColor color){ + 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); - result->value = push_string_copy(arena, value); + result->value = value; + result->face = face; result->fore = fore; - result->back = back; - if (list != 0){ - fancy_string_list_push(list, result); + result->pre_margin = pre_margin; + result->post_margin = post_margin; + if (line != 0){ + push_fancy_string(line, result); } return(result); } -static Fancy_String * -push_fancy_string(Arena *arena, Fancy_Color fore, Fancy_Color back, String_Const_u8 value){ - return(push_fancy_string(arena, 0, fore, back, value)); +function Fancy_String* +push_fancy_string(Arena *arena, Fancy_Line *line, Face_ID face, FColor fore, + 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 * -push_fancy_string(Arena *arena, Fancy_Color fore, String_Const_u8 value){ - return(push_fancy_string(arena, 0, fore, fancy_pass_through(), value)); +#define StringFBegin() va_list args; va_start(args, format) +#define StringFPass(N) Fancy_String *result = N +#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 * -push_fancy_string(Arena *arena, String_Const_u8 value){ - return(push_fancy_string(arena, 0, fancy_pass_through(), fancy_pass_through(), value)); -} - -static Fancy_String* -push_fancy_stringfv(Arena *arena, Fancy_String_List *list, Fancy_Color fore, Fancy_Color back, char *format, va_list args){ - String_Const_u8 str = push_u8_stringfv(arena, format, args); - Fancy_String *result = 0; - if (str.size > 0){ - result = push_fancy_string(arena, list, fore, back, str); +function Fancy_Line* +push_fancy_line(Arena *arena, Fancy_Block *block, Face_ID face, FColor fore, + String_Const_u8 text){ + Fancy_Line *line = push_array_zero(arena, Fancy_Line, 1); + line->face = face; + line->fore = fore; + if (text.size != 0){ + push_fancy_string(arena, line, text); } - 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* -push_fancy_stringf(Arena *arena, Fancy_String_List *list, Fancy_Color fore, char *format, ...){ - va_list args; - va_start(args, format); - 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){ +function f32 +get_fancy_string_width__inner(Application_Links *app, Face_ID face, + Fancy_String *string){ + f32 result = 0.f; for (;string != 0; string = string->next){ - Face_ID use_font_id = (string->font_id) ? string->font_id : font_id; - int_color use_fore = is_valid(string->fore) ? int_color_from(app, string->fore) : fore; - - f32 adv = get_string_advance(app, use_font_id, string->value); - - // TODO(casey): need to fill the background here, but I don't know the line - // height, and I can't actually render filled shapes, so, like, I can't - // properly do dP :( - - 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; + Face_ID use_face = face; + if (string->face != 0){ + use_face = string->face; + } + if (use_face != 0){ + result += get_string_advance(app, use_face, string->value); + Face_Metrics metrics = get_face_metrics(app, use_face); + f32 normal_advance = metrics.normal_advance; + result += (string->pre_margin + string->post_margin)*normal_advance; + } } - return(P); + return(result); } -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){ - return(draw_fancy_string(app, font_id, string, P, fore, back, 0, V2(1.f, 0.f))); -} - -static f32 -get_fancy_string_advance(Application_Links *app, Face_ID font_id, Fancy_String *string){ - f32 advance = 0.f; +function f32 +get_fancy_string_height__inner(Application_Links *app, Face_ID face, + Fancy_String *string){ + f32 result = 0.f; + if (face != 0){ + Face_Metrics metrics = get_face_metrics(app, face); + result = metrics.line_height; + } for (;string != 0; string = string->next){ - Face_ID use_font_id = (string->font_id) ? string->font_id : font_id; - f32 adv = get_string_advance(app, use_font_id, string->value); - Face_Metrics metrics = get_face_metrics(app, font_id); - advance += (string->pre_margin + string->post_margin)*metrics.normal_advance + adv; + if (string->face != 0){ + Face_ID use_face = string->face; + Face_Metrics metrics = get_face_metrics(app, use_face); + result = max(result, metrics.line_height); + } } - return(advance); + return(result); } -static void -draw_rectangle_fancy(Application_Links *app, Rect_f32 rect, Fancy_Color fancy_color){ - int_color color = int_color_from(app, fancy_color); - draw_rectangle(app, rect, 0.f, color); +function Vec2_f32 +draw_fancy_string__inner(Application_Links *app, Face_ID face, FColor fore, + Fancy_String *string, Vec2_f32 p, u32 flags, Vec2_f32 delta){ + 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 -global Fancy_Color white = fancy_rgba(1.0f, 1.0f, 1.0f, 1.0f); -global Fancy_Color light_gray = fancy_rgba(0.7f, 0.7f, 0.7f, 1.0f); -global Fancy_Color gray = fancy_rgba(0.5f, 0.5f, 0.5f, 1.0f); -global Fancy_Color dark_gray = fancy_rgba(0.3f, 0.3f, 0.3f, 1.0f); -global Fancy_Color black = fancy_rgba(0.0f, 0.0f, 0.0f, 1.0f); -global Fancy_Color pink = fancy_rgba(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_white = fcolor_argb(1.0f, 1.0f, 1.0f, 1.0f); +global FColor f_light_gray = fcolor_argb(0.7f, 0.7f, 0.7f, 1.0f); +global FColor f_gray = fcolor_argb(0.5f, 0.5f, 0.5f, 1.0f); +global FColor f_dark_gray = fcolor_argb(0.3f, 0.3f, 0.3f, 1.0f); +global FColor f_black = fcolor_argb(0.0f, 0.0f, 0.0f, 1.0f); +global FColor f_pink = fcolor_argb(1.0f, 0.0f, 1.0f, 1.0f); +global FColor f_green = fcolor_argb(0.0f, 1.0f, 0.0f, 1.0f); // BOTTOM diff --git a/custom/4coder_fancy.h b/custom/4coder_fancy.h deleted file mode 100644 index 39756b39..00000000 --- a/custom/4coder_fancy.h +++ /dev/null @@ -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 - diff --git a/custom/4coder_lister_base.cpp b/custom/4coder_lister_base.cpp index 8dcb76bd..a8533b98 100644 --- a/custom/4coder_lister_base.cpp +++ b/custom/4coder_lister_base.cpp @@ -186,15 +186,14 @@ lister_render(Application_Links *app, Frame_Info frame_info, View_ID view){ } { - Fancy_String_List text_field = {}; - push_fancy_string(scratch, &text_field, fancy_id(Stag_Pop1), + Fancy_Line text_field = {}; + push_fancy_string(scratch, &text_field, fcolor_id(Stag_Pop1), lister->query.string); - push_fancy_stringf(scratch, &text_field, fancy_id(Stag_Pop1), " "); - push_fancy_string(scratch, &text_field, fancy_id(Stag_Default), + push_fancy_stringf(scratch, &text_field, " "); + push_fancy_string(scratch, &text_field, fcolor_id(Stag_Default), lister->text_field.string); - draw_fancy_string(app, face_id, text_field.first, - V2f32(text_field_rect.x0 + 3.f, text_field_rect.y0), - Stag_Default, Stag_Back, 0, V2f32(1.f, 0.f)); + draw_fancy_line(app, face_id, fcolor_zero(), &text_field, + V2f32(text_field_rect.x0 + 3.f, text_field_rect.y0)); } 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_inner, 6.f, Stag_Back); + draw_rectangle(app, item_inner, 6.f, fcolor_id(Stag_Back)); - Fancy_String_List line = {}; - push_fancy_string(scratch, &line, fancy_id(Stag_Default), node->string); - push_fancy_stringf(scratch, &line, fancy_id(Stag_Default), " "); - push_fancy_string(scratch, &line, fancy_id(Stag_Pop2), node->status); + Fancy_Line line = {}; + push_fancy_string(scratch, &line, fcolor_id(Stag_Default), node->string); + push_fancy_stringf(scratch, &line, " "); + 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); - draw_fancy_string(app, face_id, line.first, p, Stag_Default, 0, 0, V2(1.f, 0.f)); + Vec2_f32 p = item_inner.p0 + V2f32(3.f, (block_height - line_height)*0.5f); + draw_fancy_line(app, face_id, fcolor_zero(), &line, p); } draw_set_clip(app, prev_clip); diff --git a/custom/4coder_log_parser.cpp b/custom/4coder_log_parser.cpp index 4a70f111..1f335f9b 100644 --- a/custom/4coder_log_parser.cpp +++ b/custom/4coder_log_parser.cpp @@ -646,19 +646,20 @@ log_parse_fill(Application_Links *app, Buffer_ID buffer){ } 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); - push_fancy_stringf(arena, line, white, "["); - push_fancy_string(arena, line, green, tag_name); - push_fancy_stringf(arena, line, white, "="); + push_fancy_stringf(arena, line, f_white, "["); + push_fancy_string(arena, line, f_green, tag_name); + push_fancy_stringf(arena, line, f_white, "="); 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){ 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 @@ -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 inner = rect_inner(view_rect, 3); draw_rectangle(app, view_rect, 0.f, - get_margin_color(is_active_view?UIHighlight_Active:UIHighlight_None)); - draw_rectangle(app, inner, 0.f, Stag_Back); + get_margin_color(is_active_view? + UIHighlight_Active:UIHighlight_None)); + draw_rectangle(app, inner, 0.f, fcolor_id(Stag_Back)); 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); - 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)){ - margin_color = gray; + margin_color = f_gray; hover_event = box_node->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_fancy(app, box_inner, black ); + draw_rectangle(app, box , 0.f, margin_color); + draw_rectangle(app, box_inner, 0.f, f_black ); Log_Event *event = box_node->event; String_Const_u8 event_name = log_parse__get_string(&log_parse, event->event_name); - Fancy_String_List line = {}; - push_fancy_string(scratch, &line, white, event_name); + Fancy_Line line = {}; + push_fancy_string(scratch, &line, f_white, event_name); for (Log_Filter *filter = log_preview_set.first; 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, (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_Filter_Set *viewing_filter_set = log_filter_set_from_tab(current_tab); - draw_rectangle_fancy(app, box , dark_gray); - draw_rectangle_fancy(app, box_inner, black ); + draw_rectangle(app, box , 0.f, f_dark_gray); + draw_rectangle(app, box_inner, 0.f, f_black ); { 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; for (i32 i = LogTab_ERROR + 1; i < LogTab_COUNT; i += 1){ - Fancy_Color color = (i == current_tab)?white:gray; - Fancy_String_List line = {}; + FColor color = (i == current_tab)?f_white:f_gray; + Fancy_Line line = {}; switch (i){ 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); - f32 advance = get_fancy_string_advance(app, log_graph.face_id, line.first); - draw_fancy_string(app, log_graph.face_id, line.first, p, - Stag_Default, Stag_Back, 0, V2f32(1.f, 0.f)); - x_cursor += advance + metrics.normal_advance; + f32 width = get_fancy_line_width(app, log_graph.face_id, + &line); + draw_fancy_line(app, log_graph.face_id, fcolor_zero(), + &line, p); + x_cursor += width + metrics.normal_advance; 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)){ log_graph.has_unused_click = false; 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; if (y_cursor + line_height > box_inner.y1) goto finish_list_display; - Fancy_String_List line = {}; + Fancy_Line line = {}; 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); - push_fancy_stringf(scratch, &line, green, "%.*s", string_expand(tag_name)); - push_fancy_stringf(scratch, &line, white, "="); + push_fancy_stringf(scratch, &line, f_green, "%.*s", string_expand(tag_name)); + push_fancy_stringf(scratch, &line, f_white, "="); 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){ 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{ - 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); - push_fancy_stringf(scratch, &line, green, "%.*s", string_expand(tag_name)); - push_fancy_stringf(scratch, &line, white, "]"); + push_fancy_stringf(scratch, &line, f_green, "%.*s", string_expand(tag_name)); + push_fancy_stringf(scratch, &line, f_white, "]"); } Vec2_f32 p = V2f32(box_inner.x0 + 3.f, y_cursor); - f32 advance = get_fancy_string_advance(app, log_graph.face_id, line.first); - draw_fancy_string(app, log_graph.face_id, line.first, p, Stag_Default, Stag_Back, - 0, V2f32(1.f, 0.f)); + f32 width = get_fancy_line_width(app, log_graph.face_id, + &line); + draw_fancy_line(app, log_graph.face_id, fcolor_zero(), + &line, p); 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)){ log_graph.has_unused_click = false; 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; { - Fancy_String_List line = {}; + Fancy_Line line = {}; 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, white, "%.*s:", string_expand(file_name)); - push_fancy_stringf(scratch, &line, pink, "%llu", view_event->line_number); + push_fancy_stringf(scratch, &line, f_green, "[%d] ", view_event->event_number); + push_fancy_stringf(scratch, &line, f_white, "%.*s:", string_expand(file_name)); + push_fancy_stringf(scratch, &line, f_pink, "%llu", view_event->line_number); 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); - Vec2 p = V2f32(right_p.x - advance, right_p.y); - draw_fancy_string(app, log_graph.face_id, line.first, p, Stag_Default, Stag_Back, - 0, V2(1.f, 0.f)); + f32 width = get_fancy_line_width(app, log_graph.face_id, &line); + Vec2 p = V2f32(right_p.x - width, right_p.y); + draw_fancy_line(app, log_graph.face_id, fcolor_zero(), &line, p); } 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; { - Fancy_String_List line = {}; + Fancy_Line line = {}; log_graph_render__tag(scratch, &line, &log_parse, tag); 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); - Vec2 p = V2f32(right_p.x - advance, right_p.y); - draw_fancy_string(app, log_graph.face_id, line.first, p, - Stag_Default, Stag_Back, 0, V2(1.f, 0.f)); + f32 width = get_fancy_line_width(app, log_graph.face_id, &line); + Vec2 p = V2f32(right_p.x - width, right_p.y); + draw_fancy_line(app, log_graph.face_id, fcolor_zero(), + &line, p); if (log_graph.has_unused_click){ Rect_f32 click_rect = Rf32(p.x, p.y, right_p.x, p.y + line_height); diff --git a/custom/4coder_profile_inspect.cpp b/custom/4coder_profile_inspect.cpp index bbee1947..3674d009 100644 --- a/custom/4coder_profile_inspect.cpp +++ b/custom/4coder_profile_inspect.cpp @@ -179,28 +179,25 @@ profile_draw_tab(Application_Links *app, Tab_State *state, Profile_Inspection *i state->p.x += state->x_half_padding; - Fancy_String_List list = {}; - push_fancy_string(scratch, &list, fancy_pass_through(), string); + Fancy_String *fstring = push_fancy_string(scratch, 0, string); 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); if (rect_contains_point(box, state->m_p)){ hover = true; insp->tab_id_hovered = tab_id; } - int_color text = Stag_Default; - int_color back = 0; + FColor text = fcolor_id(Stag_Default); if (insp->tab_id == tab_id){ - text = Stag_Pop2; + text = fcolor_id(Stag_Pop2); } 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, - text, back); + Vec2_f32 np = draw_fancy_string(app, state->face_id, text, fstring, state->p); state->p = np; 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_half_padding = x_padding*0.5f; - 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), }; 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); if (thread_name.size > 0){ - Fancy_String_List list = {}; - push_fancy_string(scratch, &list, fancy_id(Stag_Pop1), thread_name); + Fancy_String *fstr = + push_fancy_string(scratch, 0, fcolor_id(Stag_Pop1), thread_name); Vec2_f32 p = V2f32(x_pos, y.min + 1.f); - draw_fancy_string(app, face_id, list.first, p, 0, 0); - f32 w = get_fancy_string_advance(app, face_id, list.first); + draw_fancy_string(app, face_id, fcolor_zero(), fstr, p); + f32 w = get_fancy_string_width(app, face_id, fstr); nav_bar_w = max(nav_bar_w, w); } y.min += line_height + 2.f; String_Const_u8 name = profile_node_name(node); if (name.size > 0){ - Fancy_String_List list = {}; - push_fancy_string(scratch, &list, fancy_id(Stag_Default), name); + Fancy_String *fstr = + push_fancy_string(scratch, 0, fcolor_id(Stag_Default), name); Vec2_f32 p = V2f32(x_pos, y.min + 1.f); - draw_fancy_string(app, face_id, list.first, p, 0, 0); - f32 w = get_fancy_string_advance(app, face_id, list.first); + draw_fancy_string(app, face_id, fcolor_zero(), fstr, p); + f32 w = get_fancy_string_width(app, face_id, fstr); nav_bar_w = max(nav_bar_w, w); } 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; if (node->parent != 0){ - Fancy_String_List list = {}; - push_fancy_string(scratch, &list, fancy_pass_through(), - string_u8_litexpr("to parent")); - - f32 w = get_fancy_string_advance(app, face_id, list.first) + x_padding; + Fancy_String *fstr = push_fancy_string(scratch, 0, fcolor_zero(), + string_u8_litexpr("to parent")); + f32 w = get_fancy_string_width(app, face_id, fstr) + x_padding; Range_f32 btn_x = If32_size(x_pos, w); 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)){ - draw_rectangle(app, box, 0.f, Stag_Margin); - color = Stag_Pop1; + draw_rectangle(app, box, 0.f, fcolor_id(Stag_Margin)); + color = fcolor_id(Stag_Pop1); insp->hover_node = node->parent; } Vec2_f32 p = V2f32(box.x0 + x_half_padding, (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; } @@ -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; time_slice_box = rect_inner(time_slice_box, 3.f); - draw_rectangle_outline(app, time_slice_box, 0.f, 3.f, - 0xFFFFFFFF); + draw_rectangle_outline(app, time_slice_box, 0.f, 3.f, f_white); time_slice_box = rect_inner(time_slice_box, 3.f); if (node->closed){ @@ -371,12 +366,11 @@ profile_draw_node(Application_Links *app, View_ID view, Face_ID face_id, // NOTE(allen): duration { f32 duration = ((f32)range_size(node->time))/1000000.f; - Fancy_String_List list = {}; - push_fancy_stringf(scratch, &list, fancy_id(Stag_Default), + Fancy_Line list = {}; + push_fancy_stringf(scratch, &list, fcolor_id(Stag_Default), "time: %11.9f", duration); - draw_fancy_string(app, face_id, list.first, - V2f32(x_pos, y_pos + 1.f), - 0, 0); + draw_fancy_line(app, face_id, fcolor_zero(), + &list, V2f32(x_pos, y_pos + 1.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; if (inspect->thread_count == 0){ - Fancy_String_List text = {}; - push_fancy_string(scratch, &text, fancy_id(Stag_Pop2), - string_u8_litexpr("no profile data")); - f32 width = get_fancy_string_advance(app, face_id, text.first); + Fancy_String *fstr = push_fancy_string(scratch, 0, fcolor_id(Stag_Pop2), + string_u8_litexpr("no profile data")); + f32 width = get_fancy_string_width(app, face_id, fstr); Vec2_f32 view_center = (region.p0 + region.p1)*0.5f; Vec2_f32 half_dim = V2f32(width, line_height)*0.5f; 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{ 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.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){ 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){ Range_f32 y = If32_size(y_pos, block_height); - Fancy_String_List list = {}; - push_fancy_stringf(scratch, &list, fancy_id(Stag_Pop1), + Fancy_Line list = {}; + push_fancy_stringf(scratch, &list, fcolor_id(Stag_Pop1), "%-20.*s (%6d) ", string_expand(thread->name), thread->thread_id); 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); Vec2_f32 p = V2f32(x.min + x_half_padding, (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); - int_color margin = Stag_Margin; + FColor margin = fcolor_id(Stag_Margin); if (rect_contains_point(box, m_p)){ inspect->hover_thread = thread; - margin = Stag_Margin_Hover; + margin = fcolor_id(Stag_Margin_Hover); } 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; i32 name_width = 45; - Fancy_String_List list = {}; + Fancy_Line list = {}; 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... ", name_width - 3, node->name.str); name_too_long = true; } else{ - push_fancy_stringf(scratch, &list, fancy_id(Stag_Pop1), + push_fancy_stringf(scratch, &list, fcolor_id(Stag_Pop1), "%-*.*s ", - name_width, - string_expand(node->name)); + name_width, string_expand(node->name)); } 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 ")); } else{ - push_fancy_stringf(scratch, &list, fancy_id(Stag_Pop2), + push_fancy_stringf(scratch, &list, fcolor_id(Stag_Pop2), "%11.9fs ", ((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); Vec2_f32 p = V2f32(x.min + x_half_padding, (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); - int_color margin = Stag_Margin; + FColor margin = fcolor_id(Stag_Margin); if (rect_contains_point(box, m_p)){ if (name_too_long){ inspect->full_name_hovered = node->name; } inspect->location_jump_hovered = node->location; inspect->hover_slot = node; - margin = Stag_Margin_Hover; + margin = fcolor_id(Stag_Margin_Hover); } 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){ Range_f32 y = If32_size(y_pos, block_height); - Fancy_String_List list = {}; - push_fancy_string(scratch, &list, fancy_id(Stag_Pop2), + Fancy_Line list = {}; + push_fancy_string(scratch, &list, fcolor_id(Stag_Pop2), node->message); Vec2_f32 p = V2f32(x.min + x_half_padding, (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); - int_color margin = Stag_Margin; + FColor margin = fcolor_id(Stag_Margin); if (rect_contains_point(box, m_p)){ 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); @@ -637,44 +629,31 @@ profile_render(Application_Links *app, Frame_Info frame_info, View_ID view){ // NOTE(allen): no tool tip for tabs } else{ - i32 line_count = 0; - Fancy_String_List list[2] = {}; - Fancy_Color color = fancy_rgba(1.f, 1.f, 1.f, 0.5f); + Fancy_Block block = {}; + FColor text_color = fcolor_change_alpha(app, f_white, 0.5f); + FColor back_color = fcolor_change_alpha(app, f_black, 0.5f); - f32 width = 0.f; if (inspect->full_name_hovered.size > 0){ - line_count += 1; - push_fancy_stringf(scratch, &list[0], color, "%.*s", + Fancy_Line *line = push_fancy_line(scratch, &block); + push_fancy_stringf(scratch, line, text_color, "%.*s", 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){ - line_count += 1; - push_fancy_stringf(scratch, &list[1], color, "[shift] '%.*s'", + Fancy_Line *line = push_fancy_line(scratch, &block); + push_fancy_stringf(scratch, line, text_color, "[shift] '%.*s'", 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){ - Vec2_f32 dims = V2f32(width + x_padding, line_count*line_height + 2.f); + if (block.line_count > 0){ + 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); draw_set_clip(app, box); - draw_rectangle(app, box, 6.f, 0x80000000); - f32 y = box.y0 + 1.f; - if (inspect->full_name_hovered.size > 0){ - 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); - } + draw_rectangle(app, box, 6.f, back_color); + draw_fancy_block(app, face_id, fcolor_zero(), &block, + V2f32(box.x0 + x_half_padding, box.y0 + 1.f)); } } } diff --git a/custom/4coder_types.h b/custom/4coder_types.h index 714622b9..0d0c40fd 100644 --- a/custom/4coder_types.h +++ b/custom/4coder_types.h @@ -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 View_ID; - typedef i32 Panel_ID; - typedef u32 Text_Layout_ID; +typedef u32 Child_Process_ID; typedef i32 UI_Highlight_Level; enum{ @@ -375,17 +427,6 @@ struct 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{ String_Const_u8 file_name; 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); -struct Color_Table{ - argb_color *vals; - u32 count; -}; - typedef void New_Clipboard_Contents_Function(Application_Links *app, String_Const_u8 contents); #define NEW_CLIPBOARD_CONTENTS_SIG(name) \ void name(Application_Links *app, String_Const_u8 contents) @@ -600,12 +636,6 @@ struct View_Context{ Command_Map_ID map_id; }; -struct Color_Picker{ - String_Const_u8 title; - argb_color *dest; - b32 *finished; -}; - typedef u32 String_Match_Flag; enum{ StringMatch_CaseSensitive = 1, diff --git a/custom/generated/command_metadata.h b/custom/generated/command_metadata.h index fbd21df2..23d54a8b 100644 --- a/custom/generated/command_metadata.h +++ b/custom/generated/command_metadata.h @@ -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(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(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(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(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(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(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(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(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, 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, 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, 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, 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, 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_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 }, @@ -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_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(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(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_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_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_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, 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, 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, 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_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 }, @@ -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_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(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_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 }, }; diff --git a/custom/generated/custom_api.h b/custom/generated/custom_api.h index cbc59364..ee08bf67 100644 --- a/custom/generated/custom_api.h +++ b/custom/generated/custom_api.h @@ -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_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_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_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_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) @@ -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_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_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_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_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_draw_rectangle_sig() void custom_draw_rectangle(Application_Links* app, Rect_f32 rect, f32 roundness, int_color 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_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, FColor color) #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_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_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_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_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) @@ -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_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_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_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 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); @@ -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 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 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 b32 custom_set_hot_directory_type(Application_Links* app, String_Const_u8 string); 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 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 void custom_draw_rectangle_type(Application_Links* app, Rect_f32 rect, f32 roundness, int_color 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_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, FColor color); 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 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 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 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 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); @@ -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_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_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_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 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); @@ -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 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 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 b32 set_hot_directory(Application_Links* app, String_Const_u8 string); internal void send_exit_signal(Application_Links* app); 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 void draw_rectangle(Application_Links* app, Rect_f32 rect, f32 roundness, int_color color); -internal void draw_rectangle_outline(Application_Links* app, Rect_f32 rect, f32 roundness, f32 thickness, 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, FColor color); 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 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 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 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 void draw_text_layout(Application_Links* app, Text_Layout_ID layout_id); internal void open_color_picker(Application_Links* app, Color_Picker* picker); diff --git a/custom/generated/custom_api_master_list.h b/custom/generated/custom_api_master_list.h index faf97654..09d0e77c 100644 --- a/custom/generated/custom_api_master_list.h +++ b/custom/generated/custom_api_master_list.h @@ -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_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_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_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 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); @@ -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 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 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 b32 set_hot_directory(Application_Links* app, String_Const_u8 string); 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 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 void draw_rectangle(Application_Links* app, Rect_f32 rect, f32 roundness, int_color 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(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, FColor color); 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 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 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 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 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); diff --git a/custom/generated/lexer_cpp.cpp b/custom/generated/lexer_cpp.cpp index 33c479c2..be5b7847 100644 --- a/custom/generated/lexer_cpp.cpp +++ b/custom/generated/lexer_cpp.cpp @@ -43,456 +43,447 @@ lexeme_table_lookup(u64 *hash_array, String_Const_u8 *key_array, } #endif -u64 main_keys_hash_array[125] = { -0x0000000000000000,0x0000000000000000,0xae0dc40193b178f9,0xb96986ad74366239, -0xae0dc4007d2799c3,0x0000000000000000,0x6b890ab6607df9f5,0xfe4cf8e09552fd7d, -0xb96986abf449ab87,0x0ce3b6f3f2ae6d8b,0xb96986b1e4d5012d,0x0000000000000000, -0xae0dc4006a46609d,0xbae13981c29d9e93,0xb96986ac8864fc5b,0x0000000000000000, -0xfe4cdd7782bcdf87,0x0000000000000000,0x27dc518216dc92b9,0x0000000000000000, -0x0000000000000000,0x0ce3a6b2ed33a3f3,0xb6c16efd6d7f8691,0x0000000000000000, -0x5f1d5c76d1541da9,0x0000000000000000,0x0000000000000000,0xae0dc4006ef1e009, -0xb96986ad76870c01,0xb96986aba21ca901,0xb96986ae1e791a09,0xfe4cda48543d15eb, -0x0000000000000000,0xfe4c21260e153663,0xbae13981c29e1649,0xae0dc4007c306d83, -0x0000000000000000,0x0000000000000000,0x0000000000000000,0xfe53a22c8fba72db, -0x0000000000000000,0x0000000000000000,0xfe4c3c0e0a6459c3,0x0000000000000000, -0x0000000000000000,0x482db76ef4a7c2b9,0x0000000000000000,0x0000000000000000, -0xb96986adef80de03,0xbae13981c29e443f,0x0000000000000000,0x0000000000000000, -0x0000000000000000,0xfe4c3b126f24e73b,0x0000000000000000,0x0000000000000000, -0xb6c16efd6d5e9039,0x0ce3a73cf2370b75,0x0000000000000000,0x0000000000000000, -0x0000000000000000,0x0ce3a6cd0e243afd,0xae0dc4006d60a3dd,0xb6c16efd6d33baeb, -0x0000000000000000,0x0000000000000000,0xae0dc4007c1e53d9,0xfe50f7d974bbaa05, -0xb96986acb1e73223,0xb96986ad72de7ddd,0xb96986ae0d38e84b,0x0000000000000000, -0x0000000000000000,0xfe4c3b65bbba43b3,0x320c5ad54842e269,0xb6c16efd6d7eb2db, -0x0000000000000000,0x0000000000000000,0x0000000000000000,0x0000000000000000, -0xb6c16efd6d41ec49,0xb6c16efd6d3ad8c3,0xb6c16efd6d79768d,0x0000000000000000, -0x0ce3a725764fbd37,0x0000000000000000,0xb6c16efd6d326823,0xae0dc4006a76982b, -0x0000000000000000,0x0000000000000000,0xae0dc40193bc7f19,0xa48abde904c1baf9, -0x0000000000000000,0x0000000000000000,0x0000000000000000,0x0000000000000000, -0x0000000000000000,0xb6c16efd6d379001,0x0000000000000000,0x0000000000000000, -0x0000000000000000,0x0000000000000000,0xb96986ae0d2c0de5,0x0000000000000000, -0xb96986ac4109bb39,0x0000000000000000,0x5ee5e1225dabbaf9,0x6b8a48a90953eeab, -0x0000000000000000,0x0000000000000000,0x0000000000000000,0x0000000000000000, -0xb6c16efd6d3a30eb,0xb96986ae1e53e287,0xfe4c6461b7a951e5,0x0000000000000000, -0xbae13981c29ded97,0xbae13981c29dde75,0x5f1d5c76d1541c8f,0x0000000000000000, -0x0ce3b6f5b502c4ff,0x0000000000000000,0xae0dc4006c0426b9,0x0ce3b6f3f2ae5611, -0xc8cfe7a5027aeab5, +u64 main_keys_hash_array[121] = { +0xd7d4c38040a2a51b,0xdf638ad4b9cf69f1,0x0000000000000000,0x49161f88607bb631, +0x536665a889795331,0xac2560d906339023,0x0000000000000000,0x0000000000000000, +0x9df913c598e7c12f,0x0000000000000000,0x30a1e151f231a23d,0x0000000000000000, +0xdf638ad451f403ad,0xdf63897bcdc00091,0xb02f5667f4aa212d,0x0000000000000000, +0x0000000000000000,0x0000000000000000,0x0000000000000000,0xac2560d9187f0241, +0x0000000000000000,0xdf638adf7971e675,0xb2eaca38e283efad,0x0000000000000000, +0xdf638ad318e5d1ff,0xdf638ad080551679,0x0000000000000000,0x0000000000000000, +0xdf638ad206456083,0x0000000000000000,0x0000000000000000,0x0000000000000000, +0x0000000000000000,0x0000000000000000,0xac2560dad36752fb,0x0000000000000000, +0x536665a889463469,0xb2ea03bb268a134f,0x0000000000000000,0xb2e835e1b80e6623, +0xd7d4c38040add1c7,0x0000000000000000,0x0000000000000000,0x0000000000000000, +0xdf638ad4bed34c65,0x9df9cfb653425513,0xd7d4c38040ae41d1,0x0000000000000000, +0x947a68a4ac1c1501,0x6d88621e3e0beb01,0x0000000000000000,0x536665a88ceccda5, +0x0000000000000000,0x536665a88ccb6129,0x0000000000000000,0x0000000000000000, +0x536665a8896b20ab,0x0000000000000000,0x0000000000000000,0xb07367b671947053, +0xb2ea3109b4b43533,0x536665a889437cc3,0x0000000000000000,0x0000000000000000, +0xac2560d91bdcfc25,0x9df91c40ba8cd527,0x0000000000000000,0x536665a889769513, +0xdf638979523c12d1,0x0000000000000000,0x0000000000000000,0xb2c5e55df6610773, +0x0000000000000000,0x536665a8894345fb,0x0000000000000000,0x0000000000000000, +0x0000000000000000,0x0000000000000000,0x0000000000000000,0xac2560daec0e3851, +0x0000000000000000,0xb2c54a9d3317afb5,0xac2560d919a44b01,0x0000000000000000, +0xb77ddd8b9e414ce1,0x0000000000000000,0x18f86466c464cb01,0x0000000000000000, +0x0000000000000000,0xd7d4c38040a2854f,0x9df9ce6f49907115,0xac2560d90e3e3341, +0xdf63897b933beefb,0x0000000000000000,0x9df9cfb6534252e9,0xb2ea06e728b259ed, +0x0000000000000000,0x0000000000000000,0xb2ea5877c412647b,0x0000000000000000, +0xac2560d90618b725,0x34cb86f3fc1ca901,0xdf638ad4a65162c3,0x0000000000000000, +0x536665a88c2a1c41,0x49161f88607ba867,0xb2ead185c7065f1b,0x9df91f79b4ec2e9b, +0x0000000000000000,0xdf638ad4bf72e239,0xac2560dad9a93d8b,0xdf638979520bcfbf, +0xac2560dada9feda1,0x0000000000000000,0x0000000000000000,0x536665a88cc8be73, +0xdf63897b8855fa1b,0xb2c5e570be19f85b,0x9df91ccc8c85f8ed,0xd7d4c38040adb35d, +0x0000000000000000, }; -u8 main_keys_key_array_2[] = {0x63,0x6f,0x6e,0x73,0x74,}; -u8 main_keys_key_array_3[] = {0x73,0x74,0x72,0x75,0x63,0x74,}; -u8 main_keys_key_array_4[] = {0x77,0x68,0x69,0x6c,0x65,}; -u8 main_keys_key_array_6[] = {0x70,0x72,0x6f,0x74,0x65,0x63,0x74,0x65,0x64,}; -u8 main_keys_key_array_7[] = {0x65,0x78,0x70,0x6c,0x69,0x63,0x69,0x74,}; -u8 main_keys_key_array_8[] = {0x72,0x65,0x74,0x75,0x72,0x6e,}; -u8 main_keys_key_array_9[] = {0x61,0x6c,0x69,0x67,0x6e,0x6f,0x66,}; -u8 main_keys_key_array_10[] = {0x74,0x79,0x70,0x65,0x69,0x64,}; -u8 main_keys_key_array_12[] = {0x66,0x6c,0x6f,0x61,0x74,}; -u8 main_keys_key_array_13[] = {0x61,0x73,0x6d,}; -u8 main_keys_key_array_14[] = {0x69,0x6e,0x6c,0x69,0x6e,0x65,}; -u8 main_keys_key_array_16[] = {0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,}; -u8 main_keys_key_array_18[] = {0x73,0x74,0x61,0x74,0x69,0x63,0x5f,0x63,0x61,0x73,0x74,}; -u8 main_keys_key_array_21[] = {0x70,0x72,0x69,0x76,0x61,0x74,0x65,}; -u8 main_keys_key_array_22[] = {0x74,0x68,0x69,0x73,}; -u8 main_keys_key_array_24[] = {0x64,0x6f,}; -u8 main_keys_key_array_27[] = {0x73,0x68,0x6f,0x72,0x74,}; -u8 main_keys_key_array_28[] = {0x73,0x74,0x61,0x74,0x69,0x63,}; -u8 main_keys_key_array_29[] = {0x70,0x75,0x62,0x6c,0x69,0x63,}; -u8 main_keys_key_array_30[] = {0x65,0x78,0x70,0x6f,0x72,0x74,}; -u8 main_keys_key_array_31[] = {0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72,}; -u8 main_keys_key_array_33[] = {0x64,0x65,0x63,0x6c,0x74,0x79,0x70,0x65,}; -u8 main_keys_key_array_34[] = {0x69,0x6e,0x74,}; -u8 main_keys_key_array_35[] = {0x75,0x6e,0x69,0x6f,0x6e,}; -u8 main_keys_key_array_39[] = {0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,}; -u8 main_keys_key_array_42[] = {0x76,0x6f,0x6c,0x61,0x74,0x69,0x6c,0x65,}; -u8 main_keys_key_array_45[] = {0x64,0x79,0x6e,0x61,0x6d,0x69,0x63,0x5f,0x63,0x61,0x73,0x74,}; -u8 main_keys_key_array_48[] = {0x64,0x6f,0x75,0x62,0x6c,0x65,}; -u8 main_keys_key_array_49[] = {0x74,0x72,0x79,}; -u8 main_keys_key_array_53[] = {0x74,0x79,0x70,0x65,0x6e,0x61,0x6d,0x65,}; -u8 main_keys_key_array_56[] = {0x6c,0x6f,0x6e,0x67,}; -u8 main_keys_key_array_57[] = {0x76,0x69,0x72,0x74,0x75,0x61,0x6c,}; -u8 main_keys_key_array_61[] = {0x64,0x65,0x66,0x61,0x75,0x6c,0x74,}; -u8 main_keys_key_array_62[] = {0x63,0x61,0x74,0x63,0x68,}; -u8 main_keys_key_array_63[] = {0x63,0x61,0x73,0x65,}; -u8 main_keys_key_array_66[] = {0x75,0x73,0x69,0x6e,0x67,}; -u8 main_keys_key_array_67[] = {0x6e,0x6f,0x65,0x78,0x63,0x65,0x70,0x74,}; -u8 main_keys_key_array_68[] = {0x64,0x65,0x6c,0x65,0x74,0x65,}; -u8 main_keys_key_array_69[] = {0x73,0x77,0x69,0x74,0x63,0x68,}; -u8 main_keys_key_array_70[] = {0x73,0x69,0x7a,0x65,0x6f,0x66,}; -u8 main_keys_key_array_73[] = {0x74,0x65,0x6d,0x70,0x6c,0x61,0x74,0x65,}; -u8 main_keys_key_array_74[] = {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_80[] = {0x67,0x6f,0x74,0x6f,}; -u8 main_keys_key_array_81[] = {0x65,0x6e,0x75,0x6d,}; -u8 main_keys_key_array_82[] = {0x76,0x6f,0x69,0x64,}; -u8 main_keys_key_array_84[] = {0x74,0x79,0x70,0x65,0x64,0x65,0x66,}; -u8 main_keys_key_array_86[] = {0x63,0x68,0x61,0x72,}; -u8 main_keys_key_array_87[] = {0x66,0x61,0x6c,0x73,0x65,}; -u8 main_keys_key_array_90[] = {0x63,0x6c,0x61,0x73,0x73,}; -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_97[] = {0x62,0x6f,0x6f,0x6c,}; -u8 main_keys_key_array_102[] = {0x73,0x69,0x67,0x6e,0x65,0x64,}; -u8 main_keys_key_array_104[] = {0x66,0x72,0x69,0x65,0x6e,0x64,}; -u8 main_keys_key_array_106[] = {0x63,0x6f,0x6e,0x73,0x74,0x5f,0x63,0x61,0x73,0x74,}; -u8 main_keys_key_array_107[] = {0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,}; -u8 main_keys_key_array_112[] = {0x65,0x6c,0x73,0x65,}; -u8 main_keys_key_array_113[] = {0x65,0x78,0x74,0x65,0x72,0x6e,}; -u8 main_keys_key_array_114[] = {0x75,0x6e,0x73,0x69,0x67,0x6e,0x65,0x64,}; -u8 main_keys_key_array_116[] = {0x66,0x6f,0x72,}; -u8 main_keys_key_array_117[] = {0x6e,0x65,0x77,}; -u8 main_keys_key_array_118[] = {0x69,0x66,}; -u8 main_keys_key_array_120[] = {0x6e,0x75,0x6c,0x6c,0x70,0x74,0x72,}; -u8 main_keys_key_array_122[] = {0x62,0x72,0x65,0x61,0x6b,}; -u8 main_keys_key_array_123[] = {0x61,0x6c,0x69,0x67,0x6e,0x61,0x73,}; -u8 main_keys_key_array_124[] = {0x74,0x68,0x72,0x65,0x61,0x64,0x5f,0x6c,0x6f,0x63,0x61,0x6c,}; -String_Const_u8 main_keys_key_array[125] = { +u8 main_keys_key_array_0[] = {0x61,0x73,0x6d,}; +u8 main_keys_key_array_1[] = {0x73,0x74,0x72,0x75,0x63,0x74,}; +u8 main_keys_key_array_3[] = {0x64,0x6f,}; +u8 main_keys_key_array_4[] = {0x67,0x6f,0x74,0x6f,}; +u8 main_keys_key_array_5[] = {0x66,0x61,0x6c,0x73,0x65,}; +u8 main_keys_key_array_8[] = {0x74,0x79,0x70,0x65,0x64,0x65,0x66,}; +u8 main_keys_key_array_10[] = {0x74,0x68,0x72,0x65,0x61,0x64,0x5f,0x6c,0x6f,0x63,0x61,0x6c,}; +u8 main_keys_key_array_12[] = {0x73,0x69,0x67,0x6e,0x65,0x64,}; +u8 main_keys_key_array_13[] = {0x66,0x72,0x69,0x65,0x6e,0x64,}; +u8 main_keys_key_array_14[] = {0x70,0x72,0x6f,0x74,0x65,0x63,0x74,0x65,0x64,}; +u8 main_keys_key_array_19[] = {0x63,0x6f,0x6e,0x73,0x74,}; +u8 main_keys_key_array_21[] = {0x74,0x79,0x70,0x65,0x69,0x64,}; +u8 main_keys_key_array_22[] = {0x75,0x6e,0x73,0x69,0x67,0x6e,0x65,0x64,}; +u8 main_keys_key_array_24[] = {0x72,0x65,0x74,0x75,0x72,0x6e,}; +u8 main_keys_key_array_25[] = {0x70,0x75,0x62,0x6c,0x69,0x63,}; +u8 main_keys_key_array_28[] = {0x69,0x6e,0x6c,0x69,0x6e,0x65,}; +u8 main_keys_key_array_34[] = {0x77,0x68,0x69,0x6c,0x65,}; +u8 main_keys_key_array_36[] = {0x62,0x6f,0x6f,0x6c,}; +u8 main_keys_key_array_37[] = {0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,}; +u8 main_keys_key_array_39[] = {0x74,0x79,0x70,0x65,0x6e,0x61,0x6d,0x65,}; +u8 main_keys_key_array_40[] = {0x74,0x72,0x79,}; +u8 main_keys_key_array_44[] = {0x73,0x77,0x69,0x74,0x63,0x68,}; +u8 main_keys_key_array_45[] = {0x61,0x6c,0x69,0x67,0x6e,0x6f,0x66,}; +u8 main_keys_key_array_46[] = {0x69,0x6e,0x74,}; +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_49[] = {0x73,0x74,0x61,0x74,0x69,0x63,0x5f,0x63,0x61,0x73,0x74,}; +u8 main_keys_key_array_51[] = {0x76,0x6f,0x69,0x64,}; +u8 main_keys_key_array_53[] = {0x74,0x68,0x69,0x73,}; +u8 main_keys_key_array_56[] = {0x63,0x68,0x61,0x72,}; +u8 main_keys_key_array_59[] = {0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,}; +u8 main_keys_key_array_60[] = {0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72,}; +u8 main_keys_key_array_61[] = {0x65,0x6c,0x73,0x65,}; +u8 main_keys_key_array_64[] = {0x63,0x61,0x74,0x63,0x68,}; +u8 main_keys_key_array_65[] = {0x6e,0x75,0x6c,0x6c,0x70,0x74,0x72,}; +u8 main_keys_key_array_67[] = {0x63,0x61,0x73,0x65,}; +u8 main_keys_key_array_68[] = {0x65,0x78,0x70,0x6f,0x72,0x74,}; +u8 main_keys_key_array_71[] = {0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,}; +u8 main_keys_key_array_73[] = {0x65,0x6e,0x75,0x6d,}; +u8 main_keys_key_array_79[] = {0x73,0x68,0x6f,0x72,0x74,}; +u8 main_keys_key_array_81[] = {0x65,0x78,0x70,0x6c,0x69,0x63,0x69,0x74,}; +u8 main_keys_key_array_82[] = {0x63,0x6c,0x61,0x73,0x73,}; +u8 main_keys_key_array_84[] = {0x73,0x74,0x61,0x74,0x69,0x63,0x5f,0x61,0x73,0x73,0x65,0x72,0x74,}; +u8 main_keys_key_array_86[] = {0x64,0x79,0x6e,0x61,0x6d,0x69,0x63,0x5f,0x63,0x61,0x73,0x74,}; +u8 main_keys_key_array_89[] = {0x66,0x6f,0x72,}; +u8 main_keys_key_array_90[] = {0x64,0x65,0x66,0x61,0x75,0x6c,0x74,}; +u8 main_keys_key_array_91[] = {0x62,0x72,0x65,0x61,0x6b,}; +u8 main_keys_key_array_92[] = {0x64,0x65,0x6c,0x65,0x74,0x65,}; +u8 main_keys_key_array_94[] = {0x61,0x6c,0x69,0x67,0x6e,0x61,0x73,}; +u8 main_keys_key_array_95[] = {0x6e,0x6f,0x65,0x78,0x63,0x65,0x70,0x74,}; +u8 main_keys_key_array_98[] = {0x76,0x6f,0x6c,0x61,0x74,0x69,0x6c,0x65,}; +u8 main_keys_key_array_100[] = {0x66,0x6c,0x6f,0x61,0x74,}; +u8 main_keys_key_array_101[] = {0x63,0x6f,0x6e,0x73,0x74,0x5f,0x63,0x61,0x73,0x74,}; +u8 main_keys_key_array_102[] = {0x73,0x69,0x7a,0x65,0x6f,0x66,}; +u8 main_keys_key_array_104[] = {0x6c,0x6f,0x6e,0x67,}; +u8 main_keys_key_array_105[] = {0x69,0x66,}; +u8 main_keys_key_array_106[] = {0x74,0x65,0x6d,0x70,0x6c,0x61,0x74,0x65,}; +u8 main_keys_key_array_107[] = {0x70,0x72,0x69,0x76,0x61,0x74,0x65,}; +u8 main_keys_key_array_109[] = {0x73,0x74,0x61,0x74,0x69,0x63,}; +u8 main_keys_key_array_110[] = {0x75,0x6e,0x69,0x6f,0x6e,}; +u8 main_keys_key_array_111[] = {0x65,0x78,0x74,0x65,0x72,0x6e,}; +u8 main_keys_key_array_112[] = {0x75,0x73,0x69,0x6e,0x67,}; +u8 main_keys_key_array_115[] = {0x74,0x72,0x75,0x65,}; +u8 main_keys_key_array_116[] = {0x64,0x6f,0x75,0x62,0x6c,0x65,}; +u8 main_keys_key_array_117[] = {0x64,0x65,0x63,0x6c,0x74,0x79,0x70,0x65,}; +u8 main_keys_key_array_118[] = {0x76,0x69,0x72,0x74,0x75,0x61,0x6c,}; +u8 main_keys_key_array_119[] = {0x6e,0x65,0x77,}; +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}, -{main_keys_key_array_2, 5}, -{main_keys_key_array_3, 6}, -{main_keys_key_array_4, 5}, +{main_keys_key_array_8, 7}, {0, 0}, -{main_keys_key_array_6, 9}, -{main_keys_key_array_7, 8}, -{main_keys_key_array_8, 6}, -{main_keys_key_array_9, 7}, -{main_keys_key_array_10, 6}, +{main_keys_key_array_10, 12}, {0, 0}, -{main_keys_key_array_12, 5}, -{main_keys_key_array_13, 3}, -{main_keys_key_array_14, 6}, -{0, 0}, -{main_keys_key_array_16, 8}, -{0, 0}, -{main_keys_key_array_18, 11}, +{main_keys_key_array_12, 6}, +{main_keys_key_array_13, 6}, +{main_keys_key_array_14, 9}, {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}, -{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_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}, +{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}, -{0, 0}, -{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}, +{main_keys_key_array_40, 3}, {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}, {main_keys_key_array_56, 4}, -{main_keys_key_array_57, 7}, {0, 0}, {0, 0}, -{0, 0}, -{main_keys_key_array_61, 7}, -{main_keys_key_array_62, 5}, -{main_keys_key_array_63, 4}, +{main_keys_key_array_59, 9}, +{main_keys_key_array_60, 8}, +{main_keys_key_array_61, 4}, {0, 0}, {0, 0}, -{main_keys_key_array_66, 5}, -{main_keys_key_array_67, 8}, +{main_keys_key_array_64, 5}, +{main_keys_key_array_65, 7}, +{0, 0}, +{main_keys_key_array_67, 4}, {main_keys_key_array_68, 6}, -{main_keys_key_array_69, 6}, -{main_keys_key_array_70, 6}, {0, 0}, {0, 0}, -{main_keys_key_array_73, 8}, -{main_keys_key_array_74, 13}, -{main_keys_key_array_75, 4}, +{main_keys_key_array_71, 8}, {0, 0}, -{0, 0}, -{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}, +{main_keys_key_array_73, 4}, {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}, +{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}, +{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}, {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}, -{main_keys_key_array_106, 10}, -{main_keys_key_array_107, 9}, +{main_keys_key_array_109, 6}, +{main_keys_key_array_110, 5}, +{main_keys_key_array_111, 6}, +{main_keys_key_array_112, 5}, {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}, -{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}, {4, TokenCppKind_Const}, -{4, TokenCppKind_Struct}, -{4, TokenCppKind_While}, {0, 0}, -{4, TokenCppKind_Protected}, -{4, TokenCppKind_Explicit}, -{4, TokenCppKind_Return}, -{4, TokenCppKind_AlignOf}, {4, TokenCppKind_TypeID}, +{4, TokenCppKind_Unsigned}, +{0, 0}, +{4, TokenCppKind_Return}, +{4, TokenCppKind_Public}, +{0, 0}, {0, 0}, -{4, TokenCppKind_Float}, -{4, TokenCppKind_Asm}, {4, TokenCppKind_Inline}, {0, 0}, +{0, 0}, +{0, 0}, +{0, 0}, +{0, 0}, +{4, TokenCppKind_While}, +{0, 0}, +{4, TokenCppKind_Bool}, {4, TokenCppKind_Operator}, {0, 0}, -{4, TokenCppKind_StaticCast}, -{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_Typename}, {4, TokenCppKind_Try}, {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_SizeOf}, +{4, TokenCppKind_AlignOf}, +{4, TokenCppKind_Int}, {0, 0}, +{4, TokenCppKind_ReinterpretCast}, +{4, TokenCppKind_StaticCast}, {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}, {0, 0}, -{4, TokenCppKind_Typedef}, +{4, TokenCppKind_This}, +{0, 0}, {0, 0}, {4, TokenCppKind_Char}, -{8, TokenCppKind_LiteralFalse}, {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}, -{0, 0}, -{0, 0}, -{0, 0}, -{0, 0}, +{4, TokenCppKind_Register}, {4, TokenCppKind_Else}, -{4, TokenCppKind_Extern}, -{4, TokenCppKind_Unsigned}, {0, 0}, -{4, TokenCppKind_For}, -{4, TokenCppKind_New}, -{4, TokenCppKind_If}, {0, 0}, +{4, TokenCppKind_Catch}, {4, TokenCppKind_NullPtr}, {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_Delete}, +{0, 0}, {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; -u64 main_keys_seed = 0xfa381694d5674125; +i32 main_keys_slot_count = 121; +u64 main_keys_seed = 0xc6a99799e45617dd; u64 pp_directives_hash_array[25] = { -0x0000000000000000,0x34b86dc413bdc61d,0x0000000000000000,0xcc5e69206f9dddbd, -0x0000000000000000,0x65f024ddd53ade19,0x65f02489c656353d,0x0000000000000000, -0xcc5e69207d2543bd,0x35db8e7164ab1e55,0x6bb45a7c34b15b09,0x35db8e7164f625dd, -0x0000000000000000,0x0000000000000000,0x35db8e7164ab3649,0xcc5e692189cbad79, -0x0000000000000000,0xcc5e69207d6608a3,0x0000000000000000,0x0000000000000000, -0x65f02488282ecfbd,0x6bb4b5a2472171e5,0xcc5e6921a27c7d55,0x0000000000000000, -0x65f02489e6243cc7, +0xfa6a010b7dbbde13,0x0000000000000000,0xce2f38db2af5366d,0xfa6a010b7d62d06d, +0xcc962e54221688f9,0x0000000000000000,0x03b5dc5556efc84d,0xfa6a010b0bc317e5, +0x0000000000000000,0xcaa053e8a98a24b9,0xcaa053e8a98a2085,0xcc9620cd74b482d5, +0x0000000000000000,0x0000000000000000,0x0000000000000000,0x0000000000000000, +0xce2f38da33096dd7,0xce2f38dbf3d6ad6d,0xfa6a010b0bd76809,0x0000000000000000, +0xfa6a010b0edd496d,0xce2f38e88510d3c9,0x0000000000000000,0xcaa053e8aa33abcd, +0x0000000000000000, }; -u8 pp_directives_key_array_1[] = {0x69,0x66,}; -u8 pp_directives_key_array_3[] = {0x69,0x66,0x64,0x65,0x66,}; -u8 pp_directives_key_array_5[] = {0x70,0x72,0x61,0x67,0x6d,0x61,}; -u8 pp_directives_key_array_6[] = {0x64,0x65,0x66,0x69,0x6e,0x65,}; -u8 pp_directives_key_array_8[] = {0x75,0x6e,0x64,0x65,0x66,}; -u8 pp_directives_key_array_9[] = {0x65,0x6c,0x69,0x66,}; -u8 pp_directives_key_array_10[] = {0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,}; -u8 pp_directives_key_array_11[] = {0x6c,0x69,0x6e,0x65,}; -u8 pp_directives_key_array_14[] = {0x65,0x6c,0x73,0x65,}; -u8 pp_directives_key_array_15[] = {0x65,0x72,0x72,0x6f,0x72,}; -u8 pp_directives_key_array_17[] = {0x75,0x73,0x69,0x6e,0x67,}; -u8 pp_directives_key_array_20[] = {0x69,0x66,0x6e,0x64,0x65,0x66,}; -u8 pp_directives_key_array_21[] = {0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,}; -u8 pp_directives_key_array_22[] = {0x65,0x6e,0x64,0x69,0x66,}; -u8 pp_directives_key_array_24[] = {0x69,0x6d,0x70,0x6f,0x72,0x74,}; +u8 pp_directives_key_array_0[] = {0x75,0x73,0x69,0x6e,0x67,}; +u8 pp_directives_key_array_2[] = {0x64,0x65,0x66,0x69,0x6e,0x65,}; +u8 pp_directives_key_array_3[] = {0x75,0x6e,0x64,0x65,0x66,}; +u8 pp_directives_key_array_4[] = {0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,}; +u8 pp_directives_key_array_6[] = {0x69,0x66,}; +u8 pp_directives_key_array_7[] = {0x65,0x6e,0x64,0x69,0x66,}; +u8 pp_directives_key_array_9[] = {0x65,0x6c,0x73,0x65,}; +u8 pp_directives_key_array_10[] = {0x65,0x6c,0x69,0x66,}; +u8 pp_directives_key_array_11[] = {0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,}; +u8 pp_directives_key_array_16[] = {0x69,0x6d,0x70,0x6f,0x72,0x74,}; +u8 pp_directives_key_array_17[] = {0x69,0x66,0x6e,0x64,0x65,0x66,}; +u8 pp_directives_key_array_18[] = {0x65,0x72,0x72,0x6f,0x72,}; +u8 pp_directives_key_array_20[] = {0x69,0x66,0x64,0x65,0x66,}; +u8 pp_directives_key_array_21[] = {0x70,0x72,0x61,0x67,0x6d,0x61,}; +u8 pp_directives_key_array_23[] = {0x6c,0x69,0x6e,0x65,}; String_Const_u8 pp_directives_key_array[25] = { +{pp_directives_key_array_0, 5}, {0, 0}, -{pp_directives_key_array_1, 2}, -{0, 0}, +{pp_directives_key_array_2, 6}, {pp_directives_key_array_3, 5}, +{pp_directives_key_array_4, 7}, {0, 0}, -{pp_directives_key_array_5, 6}, -{pp_directives_key_array_6, 6}, +{pp_directives_key_array_6, 2}, +{pp_directives_key_array_7, 5}, {0, 0}, -{pp_directives_key_array_8, 5}, {pp_directives_key_array_9, 4}, -{pp_directives_key_array_10, 7}, -{pp_directives_key_array_11, 4}, +{pp_directives_key_array_10, 4}, +{pp_directives_key_array_11, 7}, {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}, -{pp_directives_key_array_20, 6}, -{pp_directives_key_array_21, 7}, -{pp_directives_key_array_22, 5}, +{pp_directives_key_array_16, 6}, +{pp_directives_key_array_17, 6}, +{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}, -{pp_directives_key_array_24, 6}, }; 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}, {0, 0}, +{5, TokenCppKind_PPDefine}, +{5, TokenCppKind_PPUndef}, +{5, TokenCppKind_PPInclude}, {0, 0}, -{5, TokenCppKind_PPIfNDef}, -{5, TokenCppKind_PPVersion}, +{5, TokenCppKind_PPIf}, {5, TokenCppKind_PPEndIf}, {0, 0}, +{5, TokenCppKind_PPElse}, +{5, TokenCppKind_PPElIf}, +{5, TokenCppKind_PPVersion}, +{0, 0}, +{0, 0}, +{0, 0}, +{0, 0}, {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; -u64 pp_directives_seed = 0x8fec132e93357a37; +u64 pp_directives_seed = 0x7dd6fc44901da387; 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] = { -{pp_keys_key_array_0, 7}, {0, 0}, +{pp_keys_key_array_1, 7}, }; Lexeme_Table_Value pp_keys_value_array[2] = { -{4, TokenCppKind_PPDefined}, {0, 0}, +{4, TokenCppKind_PPDefined}, }; i32 pp_keys_slot_count = 2; -u64 pp_keys_seed = 0x444d48e552bc237e; +u64 pp_keys_seed = 0x62441372bace9443; struct Lex_State_Cpp{ u32 flags_ZF0; u32 flags_KF0; diff --git a/platform_win32/win32_4ed_functions.cpp b/platform_win32/win32_4ed_functions.cpp index 516428c2..b2521db4 100644 --- a/platform_win32/win32_4ed_functions.cpp +++ b/platform_win32/win32_4ed_functions.cpp @@ -348,19 +348,18 @@ system_save_file_sig(){ //////////////////////////////// -internal int_color -swap_r_and_b(int_color a){ - int_color result = a & 0xff00ff00; +internal ARGB_Color +swap_r_and_b(ARGB_Color a){ + ARGB_Color result = a & 0xff00ff00; result |= ((a >> 16) & 0xff); result |= ((a & 0xff) << 16); return(result); } -internal int_color -int_color_from_colorref(COLORREF ref, int_color alpha_from){ - int_color rgb = swap_r_and_b(ref & 0xffffff); - - int_color result = ((0xff000000 & alpha_from) | rgb); +internal ARGB_Color +int_color_from_colorref(COLORREF ref, ARGB_Color alpha_from){ + ARGB_Color rgb = swap_r_and_b(ref & 0xffffff); + ARGB_Color result = ((0xff000000 & alpha_from) | rgb); return(result); } @@ -383,17 +382,20 @@ color_picker_hook(HWND Window, UINT Message, WPARAM WParam, LPARAM LParam){ case WM_CTLCOLORSTATIC: { - // NOTE(casey): I can't believe I'm 42 years old and I still have to do this fucking crap. - // Microsoft is so fucking fired every god damn day. Would it have killed you to update rgbResult - // continuously, or at least provide a GetCurrentColor() call??? + // NOTE(casey): I can't believe I'm 42 years old and I still have to do + // this fucking crap. Microsoft is so fucking fired every god damn day. + // 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 - // that repaint the color 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. + // Anyway, since the color picker doesn't tell us when the color is + // changed, what we do is watch for messages that repaint the color + // 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; if(GetDlgCtrlID(swatch_window) == 0x2c5) { - CHOOSECOLORW *win32_params = (CHOOSECOLORW *)GetWindowLongPtr(Window, GWLP_USERDATA); + CHOOSECOLORW *win32_params = + (CHOOSECOLORW *)GetWindowLongPtr(Window, GWLP_USERDATA); if(win32_params) { 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; GetClientRect(swatch_window, &rect); HDC swatch_dc = (HDC)WParam; - COLORREF Probe = GetPixel(swatch_dc, (rect.left + rect.right) / 4, (rect.top + rect.bottom) / 2); - int_color new_color = int_color_from_colorref(Probe, *picker->dest); + COLORREF Probe = GetPixel(swatch_dc, + (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) { @@ -433,9 +438,8 @@ color_picker_thread(LPVOID Param) { Color_Picker *picker = (Color_Picker*)Param; - int_color color = 0; - if(picker->dest) - { + ARGB_Color color = 0; + if (picker->dest){ color = *picker->dest; } @@ -451,18 +455,15 @@ color_picker_thread(LPVOID Param) win32_params.lCustData = (LPARAM)picker; win32_params.lpfnHook = color_picker_hook; - if(ChooseColorW(&win32_params)) - { + if (ChooseColorW(&win32_params)){ color = int_color_from_colorref(win32_params.rgbResult, color); } - if(picker->dest) - { + if(picker->dest){ *picker->dest = color; } - if(picker->finished) - { + if (picker->finished){ *picker->finished = true; }