Using clip rects for better line numbers margin

This commit is contained in:
Allen Webster 2019-03-17 14:30:48 -07:00
parent bc6fa9d9f2
commit 7b9b52affa
2 changed files with 30 additions and 8 deletions

View File

@ -439,6 +439,7 @@ default_buffer_render_caller(Application_Links *app, Render_Parameters render_pa
r_cursor.x0 = left_margin.x1;
draw_rectangle(app, left_margin, Stag_Line_Numbers_Back);
draw_clip_push(app, left_margin);
Fancy_Color line_color = fancy_id(Stag_Line_Numbers_Text);
@ -447,19 +448,19 @@ default_buffer_render_caller(Application_Links *app, Render_Parameters render_pa
for (;cursor.pos <= render_params.on_screen_range.one_past_last;){
Vec2 p = panel_space_from_view_space(cursor.wrapped_p, view.scroll_vars.scroll_p);
p += V2(render_params.buffer_region.p0);
if (p.y >= left_margin.y0){
p.x = left_margin.x0;
Temp_Memory_Arena temp = begin_temp_memory(&arena);
Fancy_String *line_string = push_fancy_stringf(&arena, line_color, "%*d", line_count_digit_count, cursor.line);
draw_fancy_string(app, font_id, line_string, p, Stag_Margin_Active, 0);
end_temp_memory(temp);
}
p.x = left_margin.x0;
Temp_Memory_Arena temp = begin_temp_memory(&arena);
Fancy_String *line_string = push_fancy_stringf(&arena, line_color, "%*d", line_count_digit_count, cursor.line);
draw_fancy_string(app, font_id, line_string, p, Stag_Margin_Active, 0);
end_temp_memory(temp);
i32 next_line = cursor.line + 1;
view_compute_cursor(app, render_params.view_id, seek_line_char(next_line, 1), &cursor);
if (cursor.line < next_line){
break;
}
}
draw_clip_pop(app);
}
}

View File

@ -144,10 +144,13 @@ struct Application_Links;
#define GET_STRING_ADVANCE_SIG(n) f32 n(Application_Links *app, Face_ID font_id, String str)
#define DRAW_RECTANGLE_SIG(n) void n(Application_Links *app, f32_Rect rect, int_color color)
#define DRAW_RECTANGLE_OUTLINE_SIG(n) void n(Application_Links *app, f32_Rect rect, int_color color)
#define DRAW_CLIP_PUSH_SIG(n) void n(Application_Links *app, f32_Rect clip_box)
#define DRAW_CLIP_POP_SIG(n) f32_Rect n(Application_Links *app)
#define GET_DEFAULT_FONT_FOR_VIEW_SIG(n) Face_ID n(Application_Links *app, View_ID view_id)
#define OPEN_COLOR_PICKER_SIG(n) void n(Application_Links *app, color_picker *picker)
#define ANIMATE_SIG(n) void n(Application_Links *app)
#define FIND_ALL_IN_RANGE_INSENSITIVE_SIG(n) Found_String_List n(Application_Links *app, Buffer_ID buffer_id, i32 start, i32 end, String key, Partition *memory)
#define GET_PROCESS_STATE_SIG(n) Process_State n(Application_Links *app, Buffer_ID buffer_id)
typedef GLOBAL_SET_SETTING_SIG(Global_Set_Setting_Function);
typedef GLOBAL_SET_MAPPING_SIG(Global_Set_Mapping_Function);
typedef EXEC_SYSTEM_COMMAND_SIG(Exec_System_Command_Function);
@ -293,10 +296,13 @@ typedef DRAW_STRING_SIG(Draw_String_Function);
typedef GET_STRING_ADVANCE_SIG(Get_String_Advance_Function);
typedef DRAW_RECTANGLE_SIG(Draw_Rectangle_Function);
typedef DRAW_RECTANGLE_OUTLINE_SIG(Draw_Rectangle_Outline_Function);
typedef DRAW_CLIP_PUSH_SIG(Draw_Clip_Push_Function);
typedef DRAW_CLIP_POP_SIG(Draw_Clip_Pop_Function);
typedef GET_DEFAULT_FONT_FOR_VIEW_SIG(Get_Default_Font_For_View_Function);
typedef OPEN_COLOR_PICKER_SIG(Open_Color_Picker_Function);
typedef ANIMATE_SIG(Animate_Function);
typedef FIND_ALL_IN_RANGE_INSENSITIVE_SIG(Find_All_In_Range_Insensitive_Function);
typedef GET_PROCESS_STATE_SIG(Get_Process_State_Function);
struct Application_Links{
#if defined(ALLOW_DEP_4CODER)
Global_Set_Setting_Function *global_set_setting;
@ -444,10 +450,13 @@ Draw_String_Function *draw_string;
Get_String_Advance_Function *get_string_advance;
Draw_Rectangle_Function *draw_rectangle;
Draw_Rectangle_Outline_Function *draw_rectangle_outline;
Draw_Clip_Push_Function *draw_clip_push;
Draw_Clip_Pop_Function *draw_clip_pop;
Get_Default_Font_For_View_Function *get_default_font_for_view;
Open_Color_Picker_Function *open_color_picker;
Animate_Function *animate;
Find_All_In_Range_Insensitive_Function *find_all_in_range_insensitive;
Get_Process_State_Function *get_process_state;
#else
Global_Set_Setting_Function *global_set_setting_;
Global_Set_Mapping_Function *global_set_mapping_;
@ -594,10 +603,13 @@ Draw_String_Function *draw_string_;
Get_String_Advance_Function *get_string_advance_;
Draw_Rectangle_Function *draw_rectangle_;
Draw_Rectangle_Outline_Function *draw_rectangle_outline_;
Draw_Clip_Push_Function *draw_clip_push_;
Draw_Clip_Pop_Function *draw_clip_pop_;
Get_Default_Font_For_View_Function *get_default_font_for_view_;
Open_Color_Picker_Function *open_color_picker_;
Animate_Function *animate_;
Find_All_In_Range_Insensitive_Function *find_all_in_range_insensitive_;
Get_Process_State_Function *get_process_state_;
#endif
void *memory;
int32_t memory_size;
@ -752,10 +764,13 @@ app_links->draw_string_ = Draw_String;\
app_links->get_string_advance_ = Get_String_Advance;\
app_links->draw_rectangle_ = Draw_Rectangle;\
app_links->draw_rectangle_outline_ = Draw_Rectangle_Outline;\
app_links->draw_clip_push_ = Draw_Clip_Push;\
app_links->draw_clip_pop_ = Draw_Clip_Pop;\
app_links->get_default_font_for_view_ = Get_Default_Font_For_View;\
app_links->open_color_picker_ = Open_Color_Picker;\
app_links->animate_ = Animate;\
app_links->find_all_in_range_insensitive_ = Find_All_In_Range_Insensitive;} while(false)
app_links->find_all_in_range_insensitive_ = Find_All_In_Range_Insensitive;\
app_links->get_process_state_ = Get_Process_State;} while(false)
#if defined(ALLOW_DEP_4CODER)
static b32 global_set_setting(Application_Links *app, Global_Setting_ID setting, i32 value){return(app->global_set_setting(app, setting, value));}
static b32 global_set_mapping(Application_Links *app, void *data, i32 size){return(app->global_set_mapping(app, data, size));}
@ -902,10 +917,13 @@ static Vec2 draw_string(Application_Links *app, Face_ID font_id, String str, Vec
static f32 get_string_advance(Application_Links *app, Face_ID font_id, String str){return(app->get_string_advance(app, font_id, str));}
static void draw_rectangle(Application_Links *app, f32_Rect rect, int_color color){(app->draw_rectangle(app, rect, color));}
static void draw_rectangle_outline(Application_Links *app, f32_Rect rect, int_color color){(app->draw_rectangle_outline(app, rect, color));}
static void draw_clip_push(Application_Links *app, f32_Rect clip_box){(app->draw_clip_push(app, clip_box));}
static f32_Rect draw_clip_pop(Application_Links *app){return(app->draw_clip_pop(app));}
static Face_ID get_default_font_for_view(Application_Links *app, View_ID view_id){return(app->get_default_font_for_view(app, view_id));}
static void open_color_picker(Application_Links *app, color_picker *picker){(app->open_color_picker(app, picker));}
static void animate(Application_Links *app){(app->animate(app));}
static Found_String_List find_all_in_range_insensitive(Application_Links *app, Buffer_ID buffer_id, i32 start, i32 end, String key, Partition *memory){return(app->find_all_in_range_insensitive(app, buffer_id, start, end, key, memory));}
static Process_State get_process_state(Application_Links *app, Buffer_ID buffer_id){return(app->get_process_state(app, buffer_id));}
#else
static b32 global_set_setting(Application_Links *app, Global_Setting_ID setting, i32 value){return(app->global_set_setting_(app, setting, value));}
static b32 global_set_mapping(Application_Links *app, void *data, i32 size){return(app->global_set_mapping_(app, data, size));}
@ -1052,8 +1070,11 @@ static Vec2 draw_string(Application_Links *app, Face_ID font_id, String str, Vec
static f32 get_string_advance(Application_Links *app, Face_ID font_id, String str){return(app->get_string_advance_(app, font_id, str));}
static void draw_rectangle(Application_Links *app, f32_Rect rect, int_color color){(app->draw_rectangle_(app, rect, color));}
static void draw_rectangle_outline(Application_Links *app, f32_Rect rect, int_color color){(app->draw_rectangle_outline_(app, rect, color));}
static void draw_clip_push(Application_Links *app, f32_Rect clip_box){(app->draw_clip_push_(app, clip_box));}
static f32_Rect draw_clip_pop(Application_Links *app){return(app->draw_clip_pop_(app));}
static Face_ID get_default_font_for_view(Application_Links *app, View_ID view_id){return(app->get_default_font_for_view_(app, view_id));}
static void open_color_picker(Application_Links *app, color_picker *picker){(app->open_color_picker_(app, picker));}
static void animate(Application_Links *app){(app->animate_(app));}
static Found_String_List find_all_in_range_insensitive(Application_Links *app, Buffer_ID buffer_id, i32 start, i32 end, String key, Partition *memory){return(app->find_all_in_range_insensitive_(app, buffer_id, start, end, key, memory));}
static Process_State get_process_state(Application_Links *app, Buffer_ID buffer_id){return(app->get_process_state_(app, buffer_id));}
#endif