New text coloring system setup
This commit is contained in:
parent
2e0992fdd3
commit
1f81120343
|
@ -557,7 +557,7 @@ default_buffer_render_caller(Application_Links *app, Frame_Info frame_info, View
|
|||
{
|
||||
if (is_active_view){
|
||||
draw_character_block(app, text_layout_id, cursor_pos, Stag_Cursor);
|
||||
paint_text_color(app, text_layout_id, make_range_i64(cursor_pos), Stag_At_Cursor);
|
||||
paint_text_color(app, text_layout_id, cursor_pos, Stag_At_Cursor);
|
||||
draw_character_wire_frame(app, text_layout_id, mark_pos, Stag_Mark);
|
||||
}
|
||||
else{
|
||||
|
@ -596,7 +596,7 @@ default_buffer_render_caller(Application_Links *app, Frame_Info frame_info, View
|
|||
}
|
||||
draw_enclosures(app, text_layout_id, buffer,
|
||||
cursor_pos, FindScope_Paren, RangeHighlightKind_CharacterHighlight,
|
||||
colors, 0, color_count);
|
||||
0, colors, color_count);
|
||||
}
|
||||
|
||||
draw_clip_push(app, buffer_rect);
|
||||
|
|
|
@ -3908,7 +3908,18 @@ Text_Layout_Character_On_Screen(Application_Links *app, Text_Layout_ID layout_id
|
|||
|
||||
API_EXPORT void
|
||||
Paint_Text_Color(Application_Links *app, Text_Layout_ID layout_id, Range_i64 range, int_color color){
|
||||
//NotImplemented;
|
||||
Models *models = (Models*)app->cmd_context;
|
||||
Text_Layout layout = {};
|
||||
Rect_f32 result = {};
|
||||
if (text_layout_get(&models->text_layouts, layout_id, &layout)){
|
||||
range.min = clamp_bot(layout.on_screen_range.min, range.min);
|
||||
range.max = clamp_top(range.max, layout.on_screen_range.max);
|
||||
range.min -= layout.on_screen_range.min;
|
||||
range.max -= layout.on_screen_range.min;
|
||||
for (i64 i = range.min; i < range.max; i += 1){
|
||||
layout.item_colors[i] = color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
API_EXPORT b32
|
||||
|
@ -4030,12 +4041,14 @@ Compute_Render_Layout(Application_Links *app, View_ID view_id, Buffer_ID buffer_
|
|||
Range range = Ii32((i32)render_cursor.pos, (i32)end_pos);
|
||||
|
||||
// TODO(allen):
|
||||
int_color *item_colors = push_array_zero(&view->layout_arena, int_color, range.max - range.min);
|
||||
view->render.view_rect = view->panel->rect_inner;
|
||||
view->render.buffer_rect = i32R(f32R(screen_p.x, screen_p.y,
|
||||
screen_p.x + layout_dim.x, screen_p.y + layout_dim.y));
|
||||
view->render.cursor = render_cursor;
|
||||
view->render.range = range;
|
||||
view->render.items = items;
|
||||
view->render.item_colors = item_colors;
|
||||
view->render.item_count = item_count;
|
||||
|
||||
f32 height = 0.f;
|
||||
|
@ -4048,7 +4061,7 @@ Compute_Render_Layout(Application_Links *app, View_ID view_id, Buffer_ID buffer_
|
|||
coordinates.on_screen_p0 = screen_p;
|
||||
coordinates.in_buffer_p0 = in_buffer_p;
|
||||
coordinates.dim = layout_dim;
|
||||
result = text_layout_new(&models->mem.heap, &models->text_layouts, buffer_id, buffer_point, range, height, coordinates);
|
||||
result = text_layout_new(&models->mem.heap, &models->text_layouts, buffer_id, buffer_point, range, height, coordinates, item_colors);
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
@ -4060,7 +4073,9 @@ Draw_Render_Layout(Application_Links *app, View_ID view_id){
|
|||
if (api_check_view(view) && models->target != 0){
|
||||
render_loaded_file_in_view__inner(models, models->target, view, view->render.buffer_rect,
|
||||
view->render.cursor, view->render.range,
|
||||
view->render.items, view->render.item_count);
|
||||
view->render.items,
|
||||
view->render.item_colors,
|
||||
view->render.item_count);
|
||||
linalloc_clear(&view->layout_arena);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,13 +29,14 @@ text_layout_new__alloc_layout(Text_Layout_Container *container){
|
|||
}
|
||||
|
||||
internal Text_Layout_ID
|
||||
text_layout_new(Heap *heap, Text_Layout_Container *container, Buffer_ID buffer_id, Buffer_Point point, Range on_screen_range, f32 height, Text_Layout_Coordinates coordinates){
|
||||
text_layout_new(Heap *heap, Text_Layout_Container *container, Buffer_ID buffer_id, Buffer_Point point, Range on_screen_range, f32 height, Text_Layout_Coordinates coordinates, int_color *item_colors){
|
||||
Text_Layout *new_layout_data = text_layout_new__alloc_layout(container);
|
||||
new_layout_data->buffer_id = buffer_id;
|
||||
new_layout_data->point = point;
|
||||
new_layout_data->on_screen_range = on_screen_range;
|
||||
new_layout_data->height = height;
|
||||
new_layout_data->coordinates = coordinates;
|
||||
new_layout_data->item_colors = item_colors;
|
||||
Text_Layout_ID new_id = ++container->id_counter;
|
||||
insert_u32_Ptr_table(heap, &container->table, new_id, new_layout_data);
|
||||
return(new_id);
|
||||
|
|
|
@ -26,6 +26,7 @@ struct Text_Layout{
|
|||
f32 height;
|
||||
|
||||
Text_Layout_Coordinates coordinates;
|
||||
int_color *item_colors;
|
||||
};
|
||||
|
||||
union Text_Layout_Node{
|
||||
|
|
16
4ed_view.cpp
16
4ed_view.cpp
|
@ -790,8 +790,8 @@ render__get_brush_from_range_stack(Render_Range_Record *stack, i32 stack_top){
|
|||
|
||||
internal void
|
||||
render_loaded_file_in_view__inner(Models *models, Render_Target *target, View *view,
|
||||
i32_Rect rect, Full_Cursor render_cursor, Range on_screen_range,
|
||||
Buffer_Render_Item *items, i32 item_count){
|
||||
Rect_i32 rect, Full_Cursor render_cursor, Range on_screen_range,
|
||||
Buffer_Render_Item *items, int_color *item_colors, i32 item_count){
|
||||
Editing_File *file = view->file;
|
||||
Arena *scratch = &models->mem.arena;
|
||||
Color_Table color_table = models->color_table;
|
||||
|
@ -929,7 +929,7 @@ render_loaded_file_in_view__inner(Models *models, Render_Target *target, View *v
|
|||
i32 prev_ind = -1;
|
||||
u32 highlight_color = 0;
|
||||
|
||||
for (; item < item_end; ++item){
|
||||
for (i32 i = 0; item < item_end; item += 1, i += 1){
|
||||
i32 ind = item->index;
|
||||
|
||||
// NOTE(allen): Line scanning
|
||||
|
@ -998,10 +998,16 @@ render_loaded_file_in_view__inner(Models *models, Render_Target *target, View *v
|
|||
Rect_f32 char_rect = f32R(item->x0, item->y0, item->x1, item->y1);
|
||||
|
||||
u32 char_color = main_color;
|
||||
if (item->flags & BRFlag_Special_Character){
|
||||
if (on_screen_range.min <= ind && ind < on_screen_range.max){
|
||||
i32 index_shifted = ind - on_screen_range.min;
|
||||
if (item_colors[index_shifted] != 0){
|
||||
char_color = finalize_color(color_table, item_colors[index_shifted]);
|
||||
}
|
||||
}
|
||||
if (HasFlag(item->flags, BRFlag_Special_Character)){
|
||||
char_color = special_color;
|
||||
}
|
||||
else if (item->flags & BRFlag_Ghost_Character){
|
||||
else if (HasFlag(item->flags, BRFlag_Ghost_Character)){
|
||||
char_color = ghost_color;
|
||||
}
|
||||
|
||||
|
|
|
@ -52,6 +52,7 @@ struct View{
|
|||
Full_Cursor cursor;
|
||||
Range range;
|
||||
Buffer_Render_Item *items;
|
||||
int_color *item_colors;
|
||||
i32 item_count;
|
||||
} render;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue