From 90163a2f850c4ddb5ea4632135577f758e5e47a5 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Sun, 10 Feb 2019 01:18:34 -0800 Subject: [PATCH] Remove the persistent and transient sub parts of the view, just a view now --- 4coder_auto_indent.cpp | 9 +- 4coder_generated/command_metadata.h | 8 +- 4ed.cpp | 37 +++--- 4ed_api_implementation.cpp | 132 ++++++++++----------- 4ed_edit.cpp | 30 ++--- 4ed_file.cpp | 12 +- 4ed_file.h | 1 - 4ed_view.cpp | 177 ++++++++++++++++------------ 4ed_view.h | 16 +-- 4ed_view_ui.cpp | 45 +++---- 10 files changed, 237 insertions(+), 230 deletions(-) diff --git a/4coder_auto_indent.cpp b/4coder_auto_indent.cpp index dce0c33a..f323d8d4 100644 --- a/4coder_auto_indent.cpp +++ b/4coder_auto_indent.cpp @@ -9,7 +9,7 @@ buffer_find_hard_start(Application_Links *app, Buffer_Summary *buffer, int32_t l tab_width -= 1; Hard_Start_Result result = {}; - result.all_space = 1; + result.all_space = true; result.indent_pos = 0; result.char_pos = line_start; @@ -17,7 +17,7 @@ buffer_find_hard_start(Application_Links *app, Buffer_Summary *buffer, int32_t l Stream_Chunk stream = {}; stream.add_null = true; if (init_stream_chunk(&stream, app, buffer, line_start, data_chunk, sizeof(data_chunk))){ - int32_t still_looping = 1; + bool32 still_looping = true; do{ for (; result.char_pos < stream.end; ++result.char_pos){ char c = stream.data[result.char_pos]; @@ -36,7 +36,7 @@ buffer_find_hard_start(Application_Links *app, Buffer_Summary *buffer, int32_t l } if (c != ' '){ - result.all_space = 0; + result.all_space = false; } result.indent_pos += 1; @@ -51,8 +51,7 @@ buffer_find_hard_start(Application_Links *app, Buffer_Summary *buffer, int32_t l static Buffer_Batch_Edit make_batch_from_indent_marks(Application_Links *app, Partition *arena, Buffer_Summary *buffer, - int32_t first_line, int32_t one_past_last_line, - int32_t *indent_marks, Indent_Options opts){ + int32_t first_line, int32_t one_past_last_line, int32_t *indent_marks, Indent_Options opts){ int32_t *shifted_indent_marks = indent_marks - first_line; int32_t edit_count = 0; diff --git a/4coder_generated/command_metadata.h b/4coder_generated/command_metadata.h index c8d61880..04eedb5f 100644 --- a/4coder_generated/command_metadata.h +++ b/4coder_generated/command_metadata.h @@ -242,9 +242,9 @@ int32_t line_number; }; static Command_Metadata fcoder_metacmd_table[220] = { { PROC_LINKS(allow_mouse, 0), "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 240 }, -{ PROC_LINKS(auto_tab_line_at_cursor, 0), "auto_tab_line_at_cursor", 23, "Auto-indents the line on which the cursor sits.", 47, "w:\\4ed\\code\\4coder_auto_indent.cpp", 34, 722 }, -{ PROC_LINKS(auto_tab_range, 0), "auto_tab_range", 14, "Auto-indents the range between the cursor and the mark.", 55, "w:\\4ed\\code\\4coder_auto_indent.cpp", 34, 733 }, -{ PROC_LINKS(auto_tab_whole_file, 0), "auto_tab_whole_file", 19, "Audo-indents the entire current buffer.", 39, "w:\\4ed\\code\\4coder_auto_indent.cpp", 34, 712 }, +{ PROC_LINKS(auto_tab_line_at_cursor, 0), "auto_tab_line_at_cursor", 23, "Auto-indents the line on which the cursor sits.", 47, "w:\\4ed\\code\\4coder_auto_indent.cpp", 34, 721 }, +{ PROC_LINKS(auto_tab_range, 0), "auto_tab_range", 14, "Auto-indents the range between the cursor and the mark.", 55, "w:\\4ed\\code\\4coder_auto_indent.cpp", 34, 732 }, +{ PROC_LINKS(auto_tab_whole_file, 0), "auto_tab_whole_file", 19, "Audo-indents the entire current buffer.", 39, "w:\\4ed\\code\\4coder_auto_indent.cpp", 34, 711 }, { PROC_LINKS(backspace_char, 0), "backspace_char", 14, "Deletes the character to the left of the cursor.", 48, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 97 }, { PROC_LINKS(backspace_word, 0), "backspace_word", 14, "Delete characters between the cursor position and the first alphanumeric boundary to the left.", 94, "w:\\4ed\\code\\4coder_seek.cpp", 27, 1258 }, { PROC_LINKS(basic_change_active_panel, 0), "basic_change_active_panel", 25, "Change the currently active panel, moving to the panel with the next highest view_id. Will not skipe the build panel if it is open.", 132, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 504 }, @@ -453,7 +453,7 @@ static Command_Metadata fcoder_metacmd_table[220] = { { PROC_LINKS(view_buffer_other_panel, 0), "view_buffer_other_panel", 23, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1542 }, { PROC_LINKS(view_jump_list_with_lister, 0), "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\\4coder_jump_lister.cpp", 34, 108 }, { PROC_LINKS(word_complete, 0), "word_complete", 13, "Iteratively tries completing the word to the left of the cursor with other words in open buffers that have the same prefix string.", 130, "w:\\4ed\\code\\4coder_search.cpp", 29, 856 }, -{ PROC_LINKS(write_and_auto_tab, 0), "write_and_auto_tab", 18, "Inserts a character and auto-indents the line on which the cursor sits.", 71, "w:\\4ed\\code\\4coder_auto_indent.cpp", 34, 745 }, +{ PROC_LINKS(write_and_auto_tab, 0), "write_and_auto_tab", 18, "Inserts a character and auto-indents the line on which the cursor sits.", 71, "w:\\4ed\\code\\4coder_auto_indent.cpp", 34, 744 }, { PROC_LINKS(write_block, 0), "write_block", 11, "At the cursor, insert a block comment.", 38, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 103 }, { PROC_LINKS(write_character, 0), "write_character", 15, "Inserts whatever character was used to trigger this command.", 60, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 63 }, { PROC_LINKS(write_hack, 0), "write_hack", 10, "At the cursor, insert a '// HACK' comment, includes user name if it was specified in config.4coder.", 99, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 91 }, diff --git a/4ed.cpp b/4ed.cpp index 975e201a..0d4f9766 100644 --- a/4ed.cpp +++ b/4ed.cpp @@ -78,12 +78,12 @@ file_cursor_to_end(System_Functions *system, Models *models, Editing_File *file) panel != 0; panel = layout_get_next_open_panel(layout, panel)){ View *view = panel->view; - if (view->transient.file_data.file != file){ + if (view->file_data.file != file){ continue; } view_cursor_move(system, view, pos); File_Edit_Positions edit_pos = view_get_edit_pos(view); - view->transient.mark = edit_pos.cursor_pos; + view->mark = edit_pos.cursor_pos; } } @@ -105,8 +105,8 @@ file_cursor_to_end(System_Functions *system, Models *models, Editing_File *file) #define REQ_OPEN_VIEW(n) USE_VIEW(n); if (view_lock_flags(n) != 0) return -#define REQ_FILE(n,v) Editing_File *n = (v)->transient.file_data.file; if (n == 0) return -#define REQ_FILE_HISTORY(n,v) Editing_File *n = (v)->transient.file_data.file; if (n == 0 || n->state.undo.undo.edits == 0) return +#define REQ_FILE(n,v) Editing_File *n = (v)->file_data.file; if (n == 0) return +#define REQ_FILE_HISTORY(n,v) Editing_File *n = (v)->file_data.file; if (n == 0 || n->state.undo.undo.edits == 0) return SCROLL_RULE_SIG(fallback_scroll_rule){ b32 result = false; @@ -736,7 +736,7 @@ force_abort_coroutine(System_Functions *system, Models *models, View *view){ // TODO(allen): post grave warning models->command_coroutine = 0; } - init_query_set(&view->transient.query_set); + init_query_set(&view->query_set); } internal void @@ -802,20 +802,17 @@ App_Init_Sig(app_init){ models->live_set.views = push_array(part, View, models->live_set.max); //dll_init_sentinel - models->live_set.free_sentinel.transient.next = &models->live_set.free_sentinel; - models->live_set.free_sentinel.transient.prev = &models->live_set.free_sentinel; + models->live_set.free_sentinel.next = &models->live_set.free_sentinel; + models->live_set.free_sentinel.prev = &models->live_set.free_sentinel; i32 max = models->live_set.max; View *view = models->live_set.views; for (i32 i = 0; i < max; ++i, ++view){ //dll_insert(&models->live_set.free_sentinel, view); - view->transient.next = models->live_set.free_sentinel.transient.next; - view->transient.prev = &models->live_set.free_sentinel; - models->live_set.free_sentinel.transient.next = view; - view->transient.next->transient.prev = view; - - View_Persistent *persistent = &view->persistent; - persistent->id = i; + view->next = models->live_set.free_sentinel.next; + view->prev = &models->live_set.free_sentinel; + models->live_set.free_sentinel.next = view; + view->next->prev = view; } } @@ -907,7 +904,7 @@ App_Init_Sig(app_init){ Panel *panel = layout_initialize(part, &models->layout); View *new_view = live_set_alloc_view(&models->mem.heap, &models->lifetime_allocator, &models->live_set); panel->view = new_view; - new_view->transient.panel = panel; + new_view->panel = panel; view_set_file(system, models, new_view, models->scratch_buffer); } @@ -1238,7 +1235,7 @@ App_Step_Sig(app_step){ app_result.animating = true; if (models->command_coroutine == 0){ - init_query_set(&view->transient.query_set); + init_query_set(&view->query_set); } } } @@ -1294,20 +1291,20 @@ App_Step_Sig(app_step){ i32 max_y = 0; b32 file_scroll = false; File_Edit_Positions edit_pos = view_get_edit_pos(view); - if (!view->transient.ui_mode){ + if (!view->ui_mode){ scroll_vars = &edit_pos.scroll; max_y = view_compute_max_target_y(view); file_scroll = true; } else{ - scroll_vars = &view->transient.ui_scroll; - i32 bottom = view->transient.ui_control.bounding_box[UICoordinates_Scrolled].y1; + scroll_vars = &view->ui_scroll; + i32 bottom = view->ui_control.bounding_box[UICoordinates_Scrolled].y1; max_y = view_compute_max_target_y_from_bottom_y(view, (f32)bottom); file_scroll = false; } b32 active = (panel == active_panel); - Input_Process_Result ip_result = do_step_file_view(system, view, models, panel->rect_inner, active, dt, *scroll_vars, max_y); + Input_Process_Result ip_result = do_step_file_view(system, models, view, panel->rect_inner, active, dt, *scroll_vars, max_y); if (ip_result.is_animating){ app_result.animating = true; diff --git a/4ed_api_implementation.cpp b/4ed_api_implementation.cpp index 95bdca69..c22cdd99 100644 --- a/4ed_api_implementation.cpp +++ b/4ed_api_implementation.cpp @@ -51,32 +51,32 @@ fill_buffer_summary(Buffer_Summary *buffer, Editing_File *file, Working_Set *wor internal void fill_view_summary(System_Functions *system, View_Summary *view, View *vptr, Live_Views *live_set, Working_Set *working_set){ - File_Viewing_Data *data = &vptr->transient.file_data; + File_Viewing_Data *data = &vptr->file_data; memset(view, 0, sizeof(*view)); - if (vptr->transient.in_use){ + if (vptr->in_use){ view->exists = true; view->view_id = (int32_t)(vptr - live_set->views) + 1; - view->line_height = (f32)(vptr->transient.line_height); + view->line_height = (f32)(vptr->line_height); view->unwrapped_lines = data->file->settings.unwrapped_lines; view->show_whitespace = data->show_whitespace; view->lock_flags = view_lock_flags(vptr); - view->buffer_id = vptr->transient.file_data.file->id.id; + view->buffer_id = vptr->file_data.file->id.id; Assert(data->file != 0); File_Edit_Positions edit_pos = view_get_edit_pos(vptr); - view->mark = file_compute_cursor(system, data->file, seek_pos(vptr->transient.mark)); + view->mark = file_compute_cursor(system, data->file, seek_pos(vptr->mark)); view->cursor = file_compute_cursor(system, data->file, seek_pos(edit_pos.cursor_pos)); - view->preferred_x = edit_pos.preferred_x; + view->preferred_x = vptr->preferred_x; - view->view_region = vptr->transient.panel->rect_inner; - view->file_region = vptr->transient.file_region; - if (vptr->transient.ui_mode){ - view->scroll_vars = vptr->transient.ui_scroll; + view->view_region = vptr->panel->rect_inner; + view->file_region = vptr->file_region; + if (vptr->ui_mode){ + view->scroll_vars = vptr->ui_scroll; } else{ view->scroll_vars = edit_pos.scroll; @@ -92,11 +92,11 @@ fill_view_summary(System_Functions *system, View_Summary *view, View *vptr, Mode internal void view_quit_ui(System_Functions *system, Models *models, View *view){ Assert(view != 0); - view->transient.ui_mode = false; - if (view->transient.ui_quit != 0){ + view->ui_mode = false; + if (view->ui_quit != 0){ View_Summary view_summary = {}; fill_view_summary(system, &view_summary, view, models); - view->transient.ui_quit(&models->app_links, view_summary); + view->ui_quit(&models->app_links, view_summary); } } @@ -139,7 +139,7 @@ imp_get_view(Models *models, View_ID view_id){ view_id = view_id - 1; if (0 <= view_id && view_id < live_set->max){ vptr = live_set->views + view_id; - if (!vptr->transient.in_use){ + if (!vptr->in_use){ vptr = 0; } } @@ -1347,9 +1347,9 @@ DOC_SEE(Buffer_Identifier) panel != 0; panel = layout_get_next_open_panel(layout, panel)){ View *view = panel->view; - if (view->transient.file_data.file == file){ + if (view->file_data.file == file){ Assert(file_node != used); - view->transient.file_data.file = 0; + view->file_data.file = 0; Editing_File *new_file = CastFromMember(Editing_File, main_chain_node, file_node); view_set_file(system, models, view, new_file); if (file_node->next != used){ @@ -1406,15 +1406,15 @@ Reopen_Buffer(Application_Links *app, Buffer_Summary *buffer, Buffer_Reopen_Flag panel != 0; panel = layout_get_next_open_panel(layout, panel)){ View *view_it = panel->view; - if (view_it->transient.file_data.file != file){ + if (view_it->file_data.file != file){ continue; } vptrs[vptr_count] = view_it; File_Edit_Positions edit_pos = view_get_edit_pos(view_it); - Full_Cursor cursor = file_compute_cursor(system, view_it->transient.file_data.file, seek_pos(edit_pos.cursor_pos)); + Full_Cursor cursor = file_compute_cursor(system, view_it->file_data.file, seek_pos(edit_pos.cursor_pos)); line_numbers[vptr_count] = cursor.line; column_numbers[vptr_count] = cursor.character; - view_it->transient.file_data.file = models->scratch_buffer; + view_it->file_data.file = models->scratch_buffer; ++vptr_count; } @@ -1425,10 +1425,10 @@ Reopen_Buffer(Application_Links *app, Buffer_Summary *buffer, Buffer_Reopen_Flag for (i32 i = 0; i < vptr_count; ++i){ view_set_file(system, models, vptrs[i], file); - vptrs[i]->transient.file_data.file = file; + vptrs[i]->file_data.file = file; Full_Cursor cursor = file_compute_cursor(system, file, seek_line_char(line_numbers[i], column_numbers[i])); - view_set_cursor(system, vptrs[i], cursor, true, file->settings.unwrapped_lines); + view_set_cursor(system, vptrs[i], cursor, true); } result = BufferReopenResult_Reopened; @@ -1462,7 +1462,7 @@ get_view_next__internal(Models *models, View_Summary *view){ i32 index = view->view_id - 1; if (index >= 0 && index < live_set->max){ View *vptr = live_set->views + index; - Panel *panel = vptr->transient.panel; + Panel *panel = vptr->panel; if (panel != 0){ panel = layout_get_next_open_panel(layout, panel); } @@ -1581,7 +1581,7 @@ DOC_SEE(View_Split_Position) System_Functions *system = models->system; Layout *layout = &models->layout; View *vptr = imp_get_view(models, view_location); - Panel *panel = vptr->transient.panel; + Panel *panel = vptr->panel; View_Summary result = {}; b32 vertical_split = ((position == ViewSplit_Left) || (position == ViewSplit_Right)); b32 br_split = ((position == ViewSplit_Bottom) || (position == ViewSplit_Right)); @@ -1589,7 +1589,7 @@ DOC_SEE(View_Split_Position) if (new_panel != 0){ View *new_view = live_set_alloc_view(&models->mem.heap, &models->lifetime_allocator, &models->live_set); new_panel->view = new_view; - new_view->transient.panel = new_panel; + new_view->panel = new_panel; view_set_file(system, models, new_view, models->scratch_buffer); fill_view_summary(system, &result, new_view, models); } @@ -1614,7 +1614,7 @@ in the system, the call will fail.) bool32 result = false; if (vptr != 0){ - if (layout_close_panel(layout, vptr->transient.panel)){ + if (layout_close_panel(layout, vptr->panel)){ live_set_free_view(&models->mem.heap, &models->lifetime_allocator, &models->live_set, vptr); result = true; } @@ -1637,7 +1637,7 @@ DOC_SEE(get_active_view) View *vptr = imp_get_view(models, view); bool32 result = false; if (vptr != 0){ - models->layout.active_panel = vptr->transient.panel; + models->layout.active_panel = vptr->panel; result = true; } return(result); @@ -1660,22 +1660,22 @@ DOC_RETURN(returns non-zero on success) switch (setting){ case ViewSetting_ShowWhitespace: { - *value_out = vptr->transient.file_data.show_whitespace; + *value_out = vptr->file_data.show_whitespace; }break; case ViewSetting_ShowScrollbar: { - *value_out = !vptr->transient.hide_scrollbar; + *value_out = !vptr->hide_scrollbar; }break; case ViewSetting_ShowFileBar: { - *value_out = !vptr->transient.hide_file_bar; + *value_out = !vptr->hide_file_bar; }break; case ViewSetting_UICommandMap: { - *value_out = vptr->transient.ui_map_id; + *value_out = vptr->ui_map_id; }break; default: @@ -1707,22 +1707,22 @@ DOC_SEE(View_Setting_ID) switch (setting){ case ViewSetting_ShowWhitespace: { - vptr->transient.file_data.show_whitespace = value; + vptr->file_data.show_whitespace = value; }break; case ViewSetting_ShowScrollbar: { - vptr->transient.hide_scrollbar = !value; + vptr->hide_scrollbar = !value; }break; case ViewSetting_ShowFileBar: { - vptr->transient.hide_file_bar = !value; + vptr->hide_file_bar = !value; }break; case ViewSetting_UICommandMap: { - vptr->transient.ui_map_id = value; + vptr->ui_map_id = value; }break; default: @@ -1750,8 +1750,8 @@ If the view_id does not specify a valid view, the returned scope is null.) View *view = imp_get_view(models, view_id); Managed_Scope lifetime = 0; if (view != 0){ - Assert(view->transient.lifetime_object != 0); - lifetime = (Managed_Scope)(view->transient.lifetime_object->workspace.scope_id); + Assert(view->lifetime_object != 0); + lifetime = (Managed_Scope)(view->lifetime_object->workspace.scope_id); } return(lifetime); } @@ -1776,7 +1776,7 @@ DOC_RETURN(This call returns non-zero on success.) View *vptr = imp_get_view(models, view); bool32 result = false; if (vptr != 0){ - Panel *panel = vptr->transient.panel; + Panel *panel = vptr->panel; Panel *intermediate = panel->parent; if (intermediate != 0){ Assert(intermediate->kind == PanelKind_Intermediate); @@ -1828,7 +1828,7 @@ DOC_RETURN(The rectangle of the panel containing this view.) View *vptr = imp_get_view(models, view); i32_Rect result = {}; if (vptr != 0){ - Panel *panel = vptr->transient.panel; + Panel *panel = vptr->panel; Assert(panel != 0); Panel *parent = panel->parent; if (parent != 0){ @@ -1858,7 +1858,7 @@ DOC_SEE(Full_Cursor) bool32 result = false; if (vptr != 0){ - Editing_File *file = vptr->transient.file_data.file; + Editing_File *file = vptr->file_data.file; Assert(file != 0); if (!file->is_loading){ result = true; @@ -1886,12 +1886,12 @@ DOC_SEE(Buffer_Seek) bool32 result = false; if (vptr != 0){ - Editing_File *file = vptr->transient.file_data.file; + Editing_File *file = vptr->file_data.file; if (!file->is_loading){ - result = true; Full_Cursor cursor = file_compute_cursor(system, file, seek); - view_set_cursor(system, vptr, cursor, set_preferred_x, file->settings.unwrapped_lines); + view_set_cursor(system, vptr, cursor, set_preferred_x); fill_view_summary(system, view, vptr, models); + result = true; } } @@ -1912,14 +1912,14 @@ DOC_SEE(GUI_Scroll_Vars) bool32 result = false; if (vptr != 0){ - Editing_File *file = vptr->transient.file_data.file; + Editing_File *file = vptr->file_data.file; if (!file->is_loading){ result = true; - if (!vptr->transient.ui_mode){ + if (!vptr->ui_mode){ view_set_scroll(system, vptr, scroll); } else{ - vptr->transient.ui_scroll = scroll; + vptr->ui_scroll = scroll; } fill_view_summary(system, view, vptr, models); } @@ -1943,17 +1943,17 @@ DOC_SEE(Buffer_Seek) bool32 result = false; if (vptr != 0){ - Editing_File *file = vptr->transient.file_data.file; + Editing_File *file = vptr->file_data.file; Assert(file != 0); if (!file->is_loading){ if (seek.type != buffer_seek_pos){ result = true; Full_Cursor cursor = file_compute_cursor(system, file, seek); - vptr->transient.mark = cursor.pos; + vptr->mark = cursor.pos; } else{ result = true; - vptr->transient.mark = seek.pos; + vptr->mark = seek.pos; } fill_view_summary(system, view, vptr, models); } @@ -1989,7 +1989,7 @@ DOC_SEE(Set_Buffer_Flag) Editing_File *file = working_set_get_active_file(&models->working_set, buffer_id); if (file != 0){ result = true; - if (file != vptr->transient.file_data.file){ + if (file != vptr->file_data.file){ view_set_file(system, models, vptr, file); if (!(flags & SetBuffer_KeepOriginalGUI)){ view_quit_ui(system, models, vptr); @@ -2040,11 +2040,11 @@ DOC_SEE(view_set_ui) Models *models = (Models*)app->cmd_context; View *vptr = imp_get_view(models, view); if (vptr != 0){ - if (vptr->transient.ui_mode){ + if (vptr->ui_mode){ return(false); } else{ - vptr->transient.ui_mode = true; + vptr->ui_mode = true; return(true); } } @@ -2067,9 +2067,9 @@ DOC_SEE(view_set_ui) bool32 result = false; Models *models = (Models*)app->cmd_context; View *vptr = imp_get_view(models, view); - if (vptr != 0 && vptr->transient.ui_mode){ + if (vptr != 0 && vptr->ui_mode){ view_quit_ui(models->system, models, vptr); - vptr->transient.ui_mode = false; + vptr->ui_mode = false; result = true; } return(result); @@ -2093,11 +2093,11 @@ DOC_SEE(UI_Quit_Function_Type) Heap *heap = &models->mem.heap; View *vptr = imp_get_view(models, view); if (vptr != 0){ - if (vptr->transient.ui_control.items != 0){ - heap_free(heap, vptr->transient.ui_control.items); + if (vptr->ui_control.items != 0){ + heap_free(heap, vptr->ui_control.items); } - memset(&vptr->transient.ui_control, 0, sizeof(vptr->transient.ui_control)); - vptr->transient.ui_quit = quit_function; + memset(&vptr->ui_control, 0, sizeof(vptr->ui_control)); + vptr->ui_quit = quit_function; if (control != 0){ if (control->count > 0){ i32 string_size = 0; @@ -2168,14 +2168,14 @@ DOC_SEE(UI_Quit_Function_Type) memcpy(new_str, old.str, old.size); } } - vptr->transient.ui_control.items = new_items; - vptr->transient.ui_control.count = count; + vptr->ui_control.items = new_items; + vptr->ui_control.count = count; } else{ return(false); } } - memcpy(vptr->transient.ui_control.bounding_box, control->bounding_box, + memcpy(vptr->ui_control.bounding_box, control->bounding_box, sizeof(control->bounding_box)); } return(true); @@ -2196,7 +2196,7 @@ DOC_SEE(view_set_ui) View *vptr = imp_get_view(models, view); UI_Control result = {}; if (vptr != 0 && part != 0){ - UI_Control *control = &vptr->transient.ui_control; + UI_Control *control = &vptr->ui_control; result.items = push_array(part, UI_Item, control->count); if (result.items != 0){ result.count = control->count; @@ -2280,7 +2280,7 @@ get_lifetime_object_from_workspace(Dynamic_Workspace *workspace){ case DynamicWorkspace_View: { View *vptr = (View*)workspace->user_back_ptr; - result = vptr->transient.lifetime_object; + result = vptr->lifetime_object; }break; default: { @@ -3044,7 +3044,7 @@ max_result_count of 1 and be assured you will get the most recent bar if any exi Models *models = (Models*)app->cmd_context; View *view = imp_get_view(models, view_id); if (view != 0){ - for (Query_Slot *slot = view->transient.query_set.used_slot; + for (Query_Slot *slot = view->query_set.used_slot; slot != 0 && (result < max_result_count); slot = slot->next){ if (slot->query_bar != 0){ @@ -3075,7 +3075,7 @@ only use for this call is in an interactive command that makes calls to get_user Models *models = (Models*)app->cmd_context; Panel *active_panel = layout_get_active_panel(&models->layout); View *active_view = active_panel->view; - Query_Slot *slot = alloc_query_slot(&active_view->transient.query_set); + Query_Slot *slot = alloc_query_slot(&active_view->query_set); bool32 result = (slot != 0); if (result){ slot->query_bar = bar; @@ -3093,7 +3093,7 @@ DOC(Stops showing the particular query bar specified by the bar parameter.) Models *models = (Models*)app->cmd_context; Panel *active_panel = layout_get_active_panel(&models->layout); View *active_view = active_panel->view; - free_query_slot(&active_view->transient.query_set, bar); + free_query_slot(&active_view->query_set, bar); } API_EXPORT void @@ -4073,7 +4073,7 @@ Get_Default_Font_For_View(Application_Links *app, View_ID view_id) { Models *models = (Models*)app->cmd_context; View *view = imp_get_view(models, view_id); - Editing_File *file = view->transient.file_data.file; + Editing_File *file = view->file_data.file; Assert(file != 0); Face_ID face_id = file->settings.font_id; return(face_id); diff --git a/4ed_edit.cpp b/4ed_edit.cpp index 82ebe8bd..70af70dd 100644 --- a/4ed_edit.cpp +++ b/4ed_edit.cpp @@ -28,11 +28,11 @@ edit_pre_state_change(System_Functions *system, Heap *heap, Models *models, Edit panel != 0; panel = layout_get_next_open_panel(layout, panel)){ View *view = panel->view; - if (view->transient.file_data.file == file){ + if (view->file_data.file == file){ Full_Cursor render_cursor = view_get_render_cursor(system, view); Full_Cursor target_cursor = view_get_render_cursor_target(system, view); - view->transient.temp_view_top_left_pos = render_cursor.pos; - view->transient.temp_view_top_left_target_pos = target_cursor.pos; + view->temp_view_top_left_pos = render_cursor.pos; + view->temp_view_top_left_target_pos = target_cursor.pos; } } } @@ -135,12 +135,12 @@ edit_fix_markers(System_Functions *system, Models *models, Editing_File *file, E panel != 0; panel = layout_get_next_open_panel(layout, panel)){ View *view = panel->view; - if (view->transient.file_data.file == file){ + if (view->file_data.file == file){ File_Edit_Positions edit_pos = view_get_edit_pos(view); write_cursor_with_index(cursors, &cursor_count, edit_pos.cursor_pos); - write_cursor_with_index(cursors, &cursor_count, view->transient.mark); - write_cursor_with_index(cursors, &cursor_count, view->transient.temp_view_top_left_pos); - write_cursor_with_index(cursors, &cursor_count, view->transient.temp_view_top_left_target_pos); + write_cursor_with_index(cursors, &cursor_count, view->mark); + write_cursor_with_index(cursors, &cursor_count, view->temp_view_top_left_pos); + write_cursor_with_index(cursors, &cursor_count, view->temp_view_top_left_target_pos); } } @@ -180,19 +180,19 @@ edit_fix_markers(System_Functions *system, Models *models, Editing_File *file, E panel != 0; panel = layout_get_next_open_panel(layout, panel)){ View *view = panel->view; - if (view->transient.file_data.file == file){ + if (view->file_data.file == file){ i32 cursor_pos = cursors[cursor_count++].pos; Full_Cursor new_cursor = file_compute_cursor(system, file, seek_pos(cursor_pos)); File_Edit_Positions edit_pos = view_get_edit_pos(view); GUI_Scroll_Vars scroll = edit_pos.scroll; - view->transient.mark = cursors[cursor_count++].pos; - i32 line_height = view->transient.line_height; + view->mark = cursors[cursor_count++].pos; + i32 line_height = view->line_height; i32 top_left_pos = cursors[cursor_count++].pos; i32 top_left_target_pos = cursors[cursor_count++].pos; f32 new_y_val_aligned = 0; - if (view->transient.temp_view_top_left_pos != top_left_pos){ + if (view->temp_view_top_left_pos != top_left_pos){ Full_Cursor new_position_cursor = file_compute_cursor(system, file, seek_pos(top_left_pos)); if (file->settings.unwrapped_lines){ new_y_val_aligned = new_position_cursor.unwrapped_y; @@ -202,7 +202,7 @@ edit_fix_markers(System_Functions *system, Models *models, Editing_File *file, E } scroll.scroll_y = edit_fix_markers__compute_scroll_y(line_height, scroll.scroll_y, new_y_val_aligned); } - if (view->transient.temp_view_top_left_target_pos != top_left_target_pos){ + if (view->temp_view_top_left_target_pos != top_left_target_pos){ if (top_left_target_pos != top_left_pos){ Full_Cursor new_position_cursor = file_compute_cursor(system, file, seek_pos(top_left_target_pos)); if (file->settings.unwrapped_lines){ @@ -215,7 +215,7 @@ edit_fix_markers(System_Functions *system, Models *models, Editing_File *file, E scroll.target_y = edit_fix_markers__compute_scroll_y(line_height, scroll.target_y, new_y_val_aligned); } - view_set_cursor_and_scroll(view, new_cursor, true, view->transient.file_data.file->settings.unwrapped_lines, scroll); + view_set_cursor_and_scroll(view, new_cursor, true, scroll); } } @@ -461,12 +461,12 @@ edit_clear(System_Functions *system, Models *models, Editing_File *file){ panel != 0; panel = layout_get_next_open_panel(layout, panel)){ View *view = panel->view; - if (view->transient.file_data.file == file){ + if (view->file_data.file == file){ Full_Cursor cursor = {}; cursor.line = 1; cursor.character = 1; cursor.wrap_line = 1; - view_set_cursor(system, view, cursor, true, file->settings.unwrapped_lines); + view_set_cursor(system, view, cursor, true); no_views_see_file = false; } } diff --git a/4ed_file.cpp b/4ed_file.cpp index cddc2059..389dba5a 100644 --- a/4ed_file.cpp +++ b/4ed_file.cpp @@ -19,16 +19,8 @@ to_file_id(i32 id){ //////////////////////////////// internal void -file_edit_positions_set_cursor(File_Edit_Positions *edit_pos, Full_Cursor cursor, b32 set_preferred_x, b32 unwrapped_lines){ - edit_pos->cursor_pos = cursor.pos; - if (set_preferred_x){ - if (unwrapped_lines){ - edit_pos->preferred_x = cursor.unwrapped_x; - } - else{ - edit_pos->preferred_x = cursor.wrapped_x; - } - } +file_edit_positions_set_cursor(File_Edit_Positions *edit_pos, i32 pos){ + edit_pos->cursor_pos = pos; edit_pos->last_set_type = EditPos_CursorSet; } diff --git a/4ed_file.h b/4ed_file.h index 9e61ae6d..80c6c14d 100644 --- a/4ed_file.h +++ b/4ed_file.h @@ -22,7 +22,6 @@ struct File_Edit_Positions{ Edit_Pos_Set_Type last_set_type; GUI_Scroll_Vars scroll; i32 cursor_pos; - f32 preferred_x; }; // TODO(NAME): do(replace Text_Effect with markers over time) diff --git a/4ed_view.cpp b/4ed_view.cpp index 76bbfc85..b8ebda86 100644 --- a/4ed_view.cpp +++ b/4ed_view.cpp @@ -11,29 +11,37 @@ internal i32 view_get_map(View *view){ - if (view->transient.ui_mode){ - return(view->transient.ui_map_id); + if (view->ui_mode){ + return(view->ui_map_id); } else{ - return(view->transient.file_data.file->settings.base_map_id); + return(view->file_data.file->settings.base_map_id); } } +internal i32 +view_get_index(Live_Views *live_set, View *view){ + return((i32)(view - live_set->views)); +} + +internal i32 +view_get_id(Live_Views *live_set, View *view){ + return((i32)(view - live_set->views) + 1); +} + internal View* live_set_alloc_view(Heap *heap, Lifetime_Allocator *lifetime_allocator, Live_Views *live_set){ Assert(live_set->count < live_set->max); ++live_set->count; - View *result = live_set->free_sentinel.transient.next; - Assert((i32)(result - live_set->views) == result->persistent.id); + View *result = live_set->free_sentinel.next; + result->next->prev = result->prev; + result->prev->next = result->next; + block_zero_struct(result); - result->transient.next->transient.prev = result->transient.prev; - result->transient.prev->transient.next = result->transient.next; - block_zero_struct(&result->transient); - - result->transient.in_use = true; - init_query_set(&result->transient.query_set); - result->transient.lifetime_object = lifetime_alloc_object(heap, lifetime_allocator, DynamicWorkspace_View, result); + result->in_use = true; + init_query_set(&result->query_set); + result->lifetime_object = lifetime_alloc_object(heap, lifetime_allocator, DynamicWorkspace_View, result); return(result); } @@ -43,50 +51,50 @@ live_set_free_view(Heap *heap, Lifetime_Allocator *lifetime_allocator, Live_View Assert(live_set->count > 0); --live_set->count; - if (view->transient.ui_control.items != 0){ - heap_free(heap, view->transient.ui_control.items); + if (view->ui_control.items != 0){ + heap_free(heap, view->ui_control.items); } - view->transient.next = live_set->free_sentinel.transient.next; - view->transient.prev = &live_set->free_sentinel; - live_set->free_sentinel.transient.next = view; - view->transient.next->transient.prev = view; - view->transient.in_use = false; + view->next = live_set->free_sentinel.next; + view->prev = &live_set->free_sentinel; + live_set->free_sentinel.next = view; + view->next->prev = view; + view->in_use = false; - lifetime_free_object(heap, lifetime_allocator, view->transient.lifetime_object); + lifetime_free_object(heap, lifetime_allocator, view->lifetime_object); } //////////////////////////////// internal File_Edit_Positions view_get_edit_pos(View *view){ - return(view->transient.edit_pos_); + return(view->edit_pos_); } internal void view_set_edit_pos(View *view, File_Edit_Positions edit_pos){ - view->transient.edit_pos_ = edit_pos; - view->transient.file_data.file->state.edit_pos_most_recent = edit_pos; + view->edit_pos_ = edit_pos; + view->file_data.file->state.edit_pos_most_recent = edit_pos; } //////////////////////////////// internal i32 view_width(View *view){ - return(rect_width(view->transient.file_region)); + return(rect_width(view->file_region)); } internal i32 view_height(View *view){ - return(rect_height(view->transient.file_region)); + return(rect_height(view->file_region)); } internal Vec2_i32 view_get_cursor_xy(System_Functions *system, View *view){ File_Edit_Positions edit_pos = view_get_edit_pos(view); - Full_Cursor cursor = file_compute_cursor(system, view->transient.file_data.file, seek_pos(edit_pos.cursor_pos)); + Full_Cursor cursor = file_compute_cursor(system, view->file_data.file, seek_pos(edit_pos.cursor_pos)); Vec2_i32 result = {}; - if (view->transient.file_data.file->settings.unwrapped_lines){ + if (view->file_data.file->settings.unwrapped_lines){ result = V2i32((i32)cursor.unwrapped_x, (i32)cursor.unwrapped_y); } else{ @@ -97,7 +105,7 @@ view_get_cursor_xy(System_Functions *system, View *view){ internal Cursor_Limits view_cursor_limits(View *view){ - i32 line_height = view->transient.line_height; + i32 line_height = view->line_height; i32 visible_height = view_height(view); Cursor_Limits limits = {}; limits.max = visible_height - line_height*3; @@ -119,7 +127,7 @@ view_cursor_limits(View *view){ internal i32 view_compute_max_target_y_from_bottom_y(View *view, f32 max_item_y){ - i32 line_height = view->transient.line_height; + i32 line_height = view->line_height; f32 height = clamp_bottom((f32)line_height, view_height(view)); f32 max_target_y = clamp_bottom(0.f, max_item_y - height*0.5f); return(ceil32(max_target_y)); @@ -127,8 +135,8 @@ view_compute_max_target_y_from_bottom_y(View *view, f32 max_item_y){ internal i32 view_compute_max_target_y(View *view){ - i32 line_height = view->transient.line_height; - Editing_File *file = view->transient.file_data.file; + i32 line_height = view->line_height; + Editing_File *file = view->file_data.file; Gap_Buffer *buffer = &file->state.buffer; i32 lowest_line = buffer->line_count; if (!file->settings.unwrapped_lines){ @@ -140,8 +148,8 @@ view_compute_max_target_y(View *view){ internal u32 view_lock_flags(View *view){ u32 result = AccessOpen; - File_Viewing_Data *data = &view->transient.file_data; - if (view->transient.ui_mode){ + File_Viewing_Data *data = &view->file_data; + if (view->ui_mode){ result |= AccessHidden; } if (data->file_locked || (data->file && data->file->settings.read_only)){ @@ -192,10 +200,10 @@ view_move_view_to_cursor(System_Functions *system, View *view, GUI_Scroll_Vars * internal b32 view_move_cursor_to_view(System_Functions *system, View *view, GUI_Scroll_Vars scroll, i32 *pos_in_out, f32 preferred_x){ - Editing_File *file = view->transient.file_data.file; + Editing_File *file = view->file_data.file; Full_Cursor cursor = file_compute_cursor(system, file, seek_pos(*pos_in_out)); - i32 line_height = view->transient.line_height; + i32 line_height = view->line_height; f32 old_cursor_y = 0.f; if (file->settings.unwrapped_lines){ old_cursor_y = cursor.unwrapped_y; @@ -204,7 +212,7 @@ view_move_cursor_to_view(System_Functions *system, View *view, GUI_Scroll_Vars s old_cursor_y = cursor.wrapped_y; } f32 cursor_y = old_cursor_y; - f32 target_y = scroll.target_y + view->transient.widget_height; + f32 target_y = scroll.target_y + view->widget_height; Cursor_Limits limits = view_cursor_limits(view); @@ -232,10 +240,35 @@ view_move_cursor_to_view(System_Functions *system, View *view, GUI_Scroll_Vars s return(result); } +internal b32 +view_has_unwrapped_lines(View *view){ + return(view->file_data.file->settings.unwrapped_lines); +} + internal void -view_set_cursor(System_Functions *system, View *view, Full_Cursor cursor, b32 set_preferred_x, b32 unwrapped_lines){ +view_set_preferred_x(View *view, Full_Cursor cursor){ + if (view_has_unwrapped_lines(view)){ + view->preferred_x = cursor.unwrapped_x; + } + else{ + view->preferred_x = cursor.wrapped_x; + } +} + +internal void +view_set_preferred_x_to_current_position(System_Functions *system, View *view){ File_Edit_Positions edit_pos = view_get_edit_pos(view); - file_edit_positions_set_cursor(&edit_pos, cursor, set_preferred_x, unwrapped_lines); + Full_Cursor cursor = file_compute_cursor(system, view->file_data.file, seek_pos(edit_pos.cursor_pos)); + view_set_preferred_x(view, cursor); +} + +internal void +view_set_cursor(System_Functions *system, View *view, Full_Cursor cursor, b32 set_preferred_x){ + File_Edit_Positions edit_pos = view_get_edit_pos(view); + file_edit_positions_set_cursor(&edit_pos, cursor.pos); + if (set_preferred_x){ + view_set_preferred_x(view, cursor); + } view_set_edit_pos(view, edit_pos); GUI_Scroll_Vars scroll = edit_pos.scroll; if (view_move_view_to_cursor(system, view, &scroll)){ @@ -250,17 +283,20 @@ view_set_scroll(System_Functions *system, View *view, GUI_Scroll_Vars scroll){ file_edit_positions_set_scroll(&edit_pos, scroll); view_set_edit_pos(view, edit_pos); i32 pos = edit_pos.cursor_pos; - if (view_move_cursor_to_view(system, view, edit_pos.scroll, &pos, edit_pos.preferred_x)){ - Full_Cursor cursor = file_compute_cursor(system, view->transient.file_data.file, seek_pos(pos)); + if (view_move_cursor_to_view(system, view, edit_pos.scroll, &pos, view->preferred_x)){ + Full_Cursor cursor = file_compute_cursor(system, view->file_data.file, seek_pos(pos)); edit_pos.cursor_pos = cursor.pos; view_set_edit_pos(view, edit_pos); } } internal void -view_set_cursor_and_scroll(View *view, Full_Cursor cursor, b32 set_preferred_x, b32 unwrapped_lines, GUI_Scroll_Vars scroll){ +view_set_cursor_and_scroll(View *view, Full_Cursor cursor, b32 set_preferred_x, GUI_Scroll_Vars scroll){ File_Edit_Positions edit_pos = view_get_edit_pos(view); - file_edit_positions_set_cursor(&edit_pos, cursor, set_preferred_x, unwrapped_lines); + file_edit_positions_set_cursor(&edit_pos, cursor.pos); + if (set_preferred_x){ + view_set_preferred_x(view, cursor); + } file_edit_positions_set_scroll(&edit_pos, scroll); edit_pos.last_set_type = EditPos_None; view_set_edit_pos(view, edit_pos); @@ -268,15 +304,15 @@ view_set_cursor_and_scroll(View *view, Full_Cursor cursor, b32 set_preferred_x, internal void view_cursor_move(System_Functions *system, View *view, i32 pos){ - Editing_File *file = view->transient.file_data.file; + Editing_File *file = view->file_data.file; Assert(file != 0); Full_Cursor cursor = file_compute_cursor(system, file, seek_pos(pos)); - view_set_cursor(system, view, cursor, true, file->settings.unwrapped_lines); + view_set_cursor(system, view, cursor, true); } internal void view_post_paste_effect(View *view, f32 seconds, i32 start, i32 size, u32 color){ - Editing_File *file = view->transient.file_data.file; + Editing_File *file = view->file_data.file; file->state.paste_effect.start = start; file->state.paste_effect.end = start + size; file->state.paste_effect.color = color; @@ -290,28 +326,22 @@ internal void view_set_file(System_Functions *system, Models *models, View *view, Editing_File *file){ Assert(file != 0); - Editing_File *old_file = view->transient.file_data.file; + Editing_File *old_file = view->file_data.file; if (old_file != 0){ file_touch(&models->working_set, old_file); file_edit_positions_push(old_file, view_get_edit_pos(view)); } - block_zero(&view->transient.file_data, sizeof(view->transient.file_data)); - view->transient.file_data.file = file; + block_zero(&view->file_data, sizeof(view->file_data)); + view->file_data.file = file; File_Edit_Positions edit_pos = file_edit_positions_pop(file); view_set_edit_pos(view, edit_pos); - view->transient.mark = edit_pos.cursor_pos; + view->mark = edit_pos.cursor_pos; + view_set_preferred_x_to_current_position(system, view); Font_Pointers font = system->font.get_pointers_by_id(file->settings.font_id); - view->transient.line_height = font.metrics->height; - -#if 0 - File_Edit_Positions edit_pos = view_get_edit_pos(view); - if (edit_pos.cursor.line == 0){ - view_cursor_move(system, view, 0); - } -#endif + view->line_height = font.metrics->height; } //////////////////////////////// @@ -323,7 +353,7 @@ file_is_viewed(Layout *layout, Editing_File *file){ panel != 0; panel = layout_get_next_open_panel(layout, panel)){ View *view = panel->view; - if (view->transient.file_data.file == file){ + if (view->file_data.file == file){ is_viewed = true; break; } @@ -338,10 +368,10 @@ adjust_views_looking_at_file_to_new_cursor(System_Functions *system, Models *mod panel != 0; panel = layout_get_next_open_panel(layout, panel)){ View *view = panel->view; - if (view->transient.file_data.file == file){ + if (view->file_data.file == file){ File_Edit_Positions edit_pos = view_get_edit_pos(view); Full_Cursor cursor = file_compute_cursor(system, file, seek_pos(edit_pos.cursor_pos)); - view_set_cursor(system, view, cursor, true, file->settings.unwrapped_lines); + view_set_cursor(system, view, cursor, true); } } } @@ -358,8 +388,8 @@ file_full_remeasure(System_Functions *system, Models *models, Editing_File *file panel != 0; panel = layout_get_next_open_panel(layout, panel)){ View *view = panel->view; - if (view->transient.file_data.file == file){ - view->transient.line_height = font.metrics->height; + if (view->file_data.file == file){ + view->line_height = font.metrics->height; } } } @@ -744,7 +774,7 @@ 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){ - Editing_File *file = view->transient.file_data.file; + Editing_File *file = view->file_data.file; Partition *part = &models->mem.part; Style *style = &models->styles.styles[0]; @@ -763,7 +793,7 @@ render_loaded_file_in_view__inner(Models *models, Render_Target *target, View *v { Lifetime_Object *lifetime_object = file->lifetime_object; Buffer_ID buffer_id = file->id.id; - i32 view_index = view->persistent.id; + i32 view_index = view_get_index(&models->live_set, view); Theme *theme_data = &style->theme; get_visual_markers(part, &lifetime_object->workspace, on_screen_range, buffer_id, view_index, theme_data); @@ -939,7 +969,7 @@ render_loaded_file_in_view__inner(Models *models, Render_Target *target, View *v char_color = ghost_color; } - if (view->transient.file_data.show_whitespace && highlight_color == 0 && codepoint_is_whitespace(item->codepoint)){ + if (view->file_data.show_whitespace && highlight_color == 0 && codepoint_is_whitespace(item->codepoint)){ highlight_this_color = style->theme.colors[Stag_Highlight_White]; } else{ @@ -1145,7 +1175,7 @@ do_core_render(Application_Links *app){ internal Full_Cursor view_get_render_cursor(System_Functions *system, View *view, f32 scroll_y){ Full_Cursor result = {}; - Editing_File *file = view->transient.file_data.file; + Editing_File *file = view->file_data.file; if (file->settings.unwrapped_lines){ result = file_compute_cursor_hint(system, file, seek_unwrapped_xy(0, scroll_y, false)); } @@ -1162,7 +1192,7 @@ view_get_render_cursor(System_Functions *system, View *view){ // NOTE(allen): For now we will temporarily adjust scroll_y to try // to prevent the view moving around until floating sections are added // to the gui system. - scroll_y += view->transient.widget_height; + scroll_y += view->widget_height; return(view_get_render_cursor(system, view, scroll_y)); } @@ -1173,14 +1203,14 @@ view_get_render_cursor_target(System_Functions *system, View *view){ // NOTE(allen): For now we will temporarily adjust scroll_y to try // to prevent the view moving around until floating sections are added // to the gui system. - scroll_y += view->transient.widget_height; + scroll_y += view->widget_height; return(view_get_render_cursor(system, view, scroll_y)); } internal void render_loaded_file_in_view(System_Functions *system, View *view, Models *models, i32_Rect rect, b32 is_active, Render_Target *target){ - Editing_File *file = view->transient.file_data.file; - i32 line_height = view->transient.line_height; + Editing_File *file = view->file_data.file; + i32 line_height = view->line_height; f32 max_x = (f32)file->settings.display_width; i32 max_y = rect.y1 - rect.y0 + line_height; @@ -1210,13 +1240,13 @@ render_loaded_file_in_view(System_Functions *system, View *view, Models *models, // NOTE(allen): For now we will temporarily adjust scroll_y to try // to prevent the view moving around until floating sections are added // to the gui system. - scroll_y += view->transient.widget_height; + scroll_y += view->widget_height; Full_Cursor render_cursor = view_get_render_cursor(system, view); #if 0 // TODO(allen): do(eliminate scroll_i nonsense) - view->transient.edit_pos_.scroll_i = render_cursor.pos; + view->edit_pos_.scroll_i = render_cursor.pos; #endif i32 item_count = 0; @@ -1296,13 +1326,14 @@ render_loaded_file_in_view(System_Functions *system, View *view, Models *models, //////////////////////////////// if (models->render_caller != 0){ + View_ID view_id = view_get_id(&models->live_set, view); models->render_view = view; models->render_rect = rect; models->render_cursor = render_cursor; models->render_range = on_screen_range; models->render_items = items; models->render_item_count = item_count; - models->render_caller(&models->app_links, view->persistent.id + 1, on_screen_range, do_core_render); + models->render_caller(&models->app_links, view_id, on_screen_range, do_core_render); models->render_view = 0; } else{ diff --git a/4ed_view.h b/4ed_view.h index 2782b331..a30ab3ff 100644 --- a/4ed_view.h +++ b/4ed_view.h @@ -12,18 +12,13 @@ #if !defined(FRED_VIEW_H) #define FRED_VIEW_H -struct View_Persistent{ - i32 id; - Coroutine_Head *coroutine; -}; - struct File_Viewing_Data{ Editing_File *file; b32 show_whitespace; b32 file_locked; }; -struct View_Transient{ +struct View{ struct View *next; struct View *prev; struct Panel *panel; @@ -38,6 +33,7 @@ struct View_Transient{ i32_Rect scroll_region; File_Edit_Positions edit_pos_; i32 mark; + f32 preferred_x; i32 temp_view_top_left_pos; i32 temp_view_top_left_target_pos; @@ -52,8 +48,6 @@ struct View_Transient{ b32 hide_scrollbar; b32 hide_file_bar; - b32 changed_context_in_step; - // misc // TODO(allen): Can we burn line_height to the ground now? @@ -64,12 +58,6 @@ struct View_Transient{ f32 widget_height; }; -struct View{ - // TODO(allen): Why is this this way? - View_Persistent persistent; - View_Transient transient; -}; - struct Live_Views{ View *views; View free_sentinel; diff --git a/4ed_view_ui.cpp b/4ed_view_ui.cpp index e009fd29..7b4795ec 100644 --- a/4ed_view_ui.cpp +++ b/4ed_view_ui.cpp @@ -47,14 +47,14 @@ global_const Style_Color_Edit colors_to_edit[] = { }; internal Input_Process_Result -do_step_file_view(System_Functions *system, View *view, Models *models, i32_Rect rect, b32 is_active, f32 dt, GUI_Scroll_Vars scroll, i32 max_y){ +do_step_file_view(System_Functions *system, Models *models, View *view, i32_Rect rect, b32 is_active, f32 dt, GUI_Scroll_Vars scroll, i32 max_y){ Input_Process_Result result = {}; scroll.target_y = clamp(0, scroll.target_y, max_y); result.scroll = scroll; - i32 line_height = view->transient.line_height; + i32 line_height = view->line_height; - if (!view->transient.hide_file_bar){ + if (!view->hide_file_bar){ i32_Rect top_bar_rect = {}; top_bar_rect.x0 = rect.x0; top_bar_rect.y0 = rect.y0; @@ -62,15 +62,15 @@ do_step_file_view(System_Functions *system, View *view, Models *models, i32_Rect top_bar_rect.y1 = rect.y0 + line_height + 2; rect.y0 = top_bar_rect.y1; } - view->transient.file_region = rect; + view->file_region = rect; i32 bar_count = 0; - for (Query_Slot *slot = view->transient.query_set.used_slot; + for (Query_Slot *slot = view->query_set.used_slot; slot != 0; slot = slot->next, ++bar_count); - view->transient.widget_height = (f32)bar_count*(view->transient.line_height + 2); + view->widget_height = (f32)bar_count*(view->line_height + 2); - Editing_File *file = view->transient.file_data.file; + Editing_File *file = view->file_data.file; // TODO(allen): do(eliminate the built in paste_effect) if (!file->is_loading && file->state.paste_effect.seconds_down > 0.f){ @@ -79,18 +79,19 @@ do_step_file_view(System_Functions *system, View *view, Models *models, i32_Rect } // NOTE(allen): call scroll rule hook - b32 is_new_target = (result.scroll.target_x != view->transient.prev_target.x || - result.scroll.target_y != view->transient.prev_target.y); + b32 is_new_target = (result.scroll.target_x != view->prev_target.x || + result.scroll.target_y != view->prev_target.y); f32 target_x = (f32)result.scroll.target_x; f32 target_y = (f32)result.scroll.target_y; - if (models->scroll_rule(target_x, target_y, &result.scroll.scroll_x, &result.scroll.scroll_y, (view->persistent.id) + 1, is_new_target, dt)){ + View_ID view_id = view_get_id(&models->live_set, view); + if (models->scroll_rule(target_x, target_y, &result.scroll.scroll_x, &result.scroll.scroll_y, view_id, is_new_target, dt)){ result.is_animating = true; } - view->transient.prev_target.x = result.scroll.target_x; - view->transient.prev_target.y = result.scroll.target_y; + view->prev_target.x = result.scroll.target_x; + view->prev_target.y = result.scroll.target_y; return(result); } @@ -149,7 +150,7 @@ draw_file_bar(System_Functions *system, Render_Target *target, View *view, Model } else{ File_Edit_Positions edit_pos = view_get_edit_pos(view); - Full_Cursor cursor = file_compute_cursor(system, view->transient.file_data.file, seek_pos(edit_pos.cursor_pos)); + Full_Cursor cursor = file_compute_cursor(system, view->file_data.file, seek_pos(edit_pos.cursor_pos)); char bar_space[526]; String bar_text = make_fixed_width_string(bar_space); @@ -213,10 +214,10 @@ get_margin_color(Style *style, i32 level){ internal void do_render_file_view(System_Functions *system, View *view, Models *models, GUI_Scroll_Vars *scroll, View *active, i32_Rect rect, b32 is_active, Render_Target *target){ - Editing_File *file = view->transient.file_data.file; + Editing_File *file = view->file_data.file; Assert(file != 0); - i32 line_height = view->transient.line_height; + i32 line_height = view->line_height; Style *style = &models->styles.styles[0]; Face_ID font_id = file->settings.font_id; char font_name_space[256]; @@ -224,7 +225,7 @@ do_render_file_view(System_Functions *system, View *view, Models *models, GUI_Sc font_name.size = system->font.get_name_by_id(font_id, font_name.str, font_name.memory_size); Font_Pointers font = system->font.get_pointers_by_id(font_id); - if (!view->transient.hide_file_bar){ + if (!view->hide_file_bar){ i32_Rect top_bar_rect = {}; top_bar_rect.x0 = rect.x0; top_bar_rect.y0 = rect.y0; @@ -235,7 +236,7 @@ do_render_file_view(System_Functions *system, View *view, Models *models, GUI_Sc } i32 bar_count = 0; - for (Query_Slot *slot = view->transient.query_set.used_slot; + for (Query_Slot *slot = view->query_set.used_slot; slot != 0; slot = slot->next, ++bar_count){ i32_Rect query_bar_rect = {}; @@ -253,10 +254,10 @@ do_render_file_view(System_Functions *system, View *view, Models *models, GUI_Sc x = ceil32(draw_string(system, target, font_id, slot->query_bar->prompt, x, y, text2_color)); draw_string(system, target, font_id, slot->query_bar->string, x, y, text1_color); } - view->transient.widget_height = (f32)bar_count*(view->transient.line_height + 2); + view->widget_height = (f32)bar_count*(view->line_height + 2); draw_push_clip(target, rect); - if (!view->transient.ui_mode){ + if (!view->ui_mode){ if (file_is_ready(file)){ render_loaded_file_in_view(system, view, models, rect, is_active, target); } @@ -264,9 +265,9 @@ do_render_file_view(System_Functions *system, View *view, Models *models, GUI_Sc else{ f32_Rect rect_f32 = f32R(rect); - i32 item_count = view->transient.ui_control.count; - UI_Item *item = view->transient.ui_control.items; - GUI_Scroll_Vars ui_scroll = view->transient.ui_scroll; + i32 item_count = view->ui_control.count; + UI_Item *item = view->ui_control.items; + GUI_Scroll_Vars ui_scroll = view->ui_scroll; for (i32 i = 0; i < item_count; ++i, item += 1){ f32_Rect item_rect = f32R(item->rectangle);