From 1564ade4b0c3fece3fcf9108063c33c95cb3cf8d Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Fri, 24 Jun 2016 00:02:09 -0400 Subject: [PATCH] replaced fade 'ticks' with ''seconds'' --- 4coder_custom.h | 4 ++ 4coder_custom_api.h | 6 +-- 4coder_default_bindings.cpp | 2 +- 4coder_default_include.cpp | 4 +- 4coder_helper.h | 4 +- 4ed_api_implementation.cpp | 75 +++++++++++++++++++++++++++++++----- 4ed_file.cpp | 2 +- 4ed_file_view.cpp | 45 ++++++---------------- build_all.bat | 2 +- custom_api_spec.cpp | 13 +++---- power/4coder_casey.cpp | 65 +++---------------------------- power/4coder_experiments.cpp | 14 +++++-- 12 files changed, 112 insertions(+), 124 deletions(-) diff --git a/4coder_custom.h b/4coder_custom.h index 4ef717c1..82466a7b 100644 --- a/4coder_custom.h +++ b/4coder_custom.h @@ -310,6 +310,10 @@ enum Auto_Indent_Flag{ AutoIndent_UseTab = 0x2 }; +enum Set_Buffer_Flag{ + SetBuffer_KeepOriginalGUI = 0x1 +}; + enum Input_Type_Flag{ EventOnAnyKey = 0x1, EventOnEsc = 0x2, diff --git a/4coder_custom_api.h b/4coder_custom_api.h index 78d96b29..7e5edd34 100644 --- a/4coder_custom_api.h +++ b/4coder_custom_api.h @@ -25,12 +25,12 @@ #define GET_VIEW_NEXT_SIG(n) void n(Application_Links *app, View_Summary *view, unsigned int access) #define GET_VIEW_SIG(n) View_Summary n(Application_Links *app, int view_id, unsigned int access) #define GET_ACTIVE_VIEW_SIG(n) View_Summary n(Application_Links *app, unsigned int access) -#define VIEW_COMPUTE_CURSOR_SIG(n) Full_Cursor n(Application_Links *app, View_Summary *view, Buffer_Seek seek) +#define VIEW_COMPUTE_CURSOR_SIG(n) int n(Application_Links *app, View_Summary *view, Buffer_Seek seek, Full_Cursor *cursor_out) #define VIEW_SET_CURSOR_SIG(n) int n(Application_Links *app, View_Summary *view, Buffer_Seek seek, int set_preferred_x) #define VIEW_SET_MARK_SIG(n) int n(Application_Links *app, View_Summary *view, Buffer_Seek seek) #define VIEW_SET_HIGHLIGHT_SIG(n) int n(Application_Links *app, View_Summary *view, int start, int end, int turn_on) -#define VIEW_SET_BUFFER_SIG(n) int n(Application_Links *app, View_Summary *view, int buffer_id) -#define VIEW_POST_FADE_SIG(n) int n(Application_Links *app, View_Summary *view, int ticks, int start, int end, unsigned int color) +#define VIEW_SET_BUFFER_SIG(n) int n(Application_Links *app, View_Summary *view, int buffer_id, unsigned int flags) +#define VIEW_POST_FADE_SIG(n) int n(Application_Links *app, View_Summary *view, float seconds, int start, int end, unsigned int color) #define VIEW_SET_PASTE_REWRITE__SIG(n) void n(Application_Links *app, View_Summary *view) #define VIEW_GET_PASTE_REWRITE__SIG(n) int n(Application_Links *app, View_Summary *view) #define GET_USER_INPUT_SIG(n) User_Input n(Application_Links *app, unsigned int get_type, unsigned int abort_type) diff --git a/4coder_default_bindings.cpp b/4coder_default_bindings.cpp index f5bf14be..cd22591d 100644 --- a/4coder_default_bindings.cpp +++ b/4coder_default_bindings.cpp @@ -44,7 +44,7 @@ CUSTOM_COMMAND_SIG(switch_to_compilation){ view = app->get_active_view(app, access); buffer = app->get_buffer_by_name(app, name, name_size, access); - app->view_set_buffer(app, &view, buffer.buffer_id); + app->view_set_buffer(app, &view, buffer.buffer_id, 0); } CUSTOM_COMMAND_SIG(rewrite_as_single_caps){ diff --git a/4coder_default_include.cpp b/4coder_default_include.cpp index c286b59c..e66b50da 100644 --- a/4coder_default_include.cpp +++ b/4coder_default_include.cpp @@ -313,7 +313,7 @@ CUSTOM_COMMAND_SIG(paste){ Theme_Color paste; paste.tag = Stag_Paste; app->get_theme_colors(app, &paste, 1); - app->view_post_fade(app, &view, 20, pos, pos + len, paste.color); + app->view_post_fade(app, &view, 0.667f, pos, pos + len, paste.color); } } } @@ -354,7 +354,7 @@ CUSTOM_COMMAND_SIG(paste_next){ Theme_Color paste; paste.tag = Stag_Paste; app->get_theme_colors(app, &paste, 1); - app->view_post_fade(app, &view, 20, pos, pos + len, paste.color); + app->view_post_fade(app, &view, 0.667f, pos, pos + len, paste.color); } } else{ diff --git a/4coder_helper.h b/4coder_helper.h index 40718c7d..54f824ac 100644 --- a/4coder_helper.h +++ b/4coder_helper.h @@ -765,14 +765,14 @@ view_open_file(Application_Links *app, View_Summary *view, int result = false; Buffer_Summary buffer = app->get_buffer_by_name(app, filename, filename_len, AccessProtected|AccessHidden); if (buffer.exists){ - app->view_set_buffer(app, view, buffer.buffer_id); + app->view_set_buffer(app, view, buffer.buffer_id, 0); result = true; } else{ buffer = app->create_buffer(app, filename, filename_len, do_in_background); if (!do_in_background){ if (buffer.exists){ - app->view_set_buffer(app, view, buffer.buffer_id); + app->view_set_buffer(app, view, buffer.buffer_id, 0); result = true; } } diff --git a/4ed_api_implementation.cpp b/4ed_api_implementation.cpp index 9f8aedde..e3de6306 100644 --- a/4ed_api_implementation.cpp +++ b/4ed_api_implementation.cpp @@ -1103,11 +1103,21 @@ DOC_RETURN(returns a summary that describes the active view) return(view); } -VIEW_COMPUTE_CURSOR_SIG(external_view_compute_cursor){ +VIEW_COMPUTE_CURSOR_SIG(external_view_compute_cursor)/* +DOC_PARAM(view, the view on which to run the cursor computation) +DOC_PARAM(seek, the seek position) +DOC_PARAM(cursor_out, on success this is filled with result of the seek) +DOC_RETURN(returns non-zero on success) +DOC +( +Computes a full cursor for the given seek position. +) +DOC_SEE(Buffer_Seek) +*/{ Command_Data *cmd = (Command_Data*)app->cmd_context; View *vptr = imp_get_view(cmd, view); Editing_File *file = 0; - Full_Cursor result = {0}; + int result = false; if (vptr){ file = vptr->file_data.file; @@ -1115,7 +1125,8 @@ VIEW_COMPUTE_CURSOR_SIG(external_view_compute_cursor){ if (seek.type == buffer_seek_line_char && seek.character <= 0){ seek.character = 1; } - result = view_compute_cursor(vptr, seek); + result = true; + *cursor_out = view_compute_cursor(vptr, seek); fill_view_summary(view, vptr, cmd); } } @@ -1123,7 +1134,18 @@ VIEW_COMPUTE_CURSOR_SIG(external_view_compute_cursor){ return(result); } -VIEW_SET_CURSOR_SIG(external_view_set_cursor){ +VIEW_SET_CURSOR_SIG(external_view_set_cursor)/* +DOC_PARAM(view, the view in which to set the cursor) +DOC_PARAM(seek, the seek position) +DOC_PARAM(set_preferred_x, if true the preferred x is updated to match the new cursor position) +DOC_RETURN(returns non-zero on success) +DOC +( +Sets the the view's cursor position. set_preferred_x should usually be true unless the change in +cursor position is is a vertical motion that tries to keep the cursor in the same column or x position. +) +DOC_SEE(Buffer_Seek) +*/{ Command_Data *cmd = (Command_Data*)app->cmd_context; View *vptr = imp_get_view(cmd, view); Editing_File *file = 0; @@ -1148,7 +1170,16 @@ VIEW_SET_CURSOR_SIG(external_view_set_cursor){ return(result); } -VIEW_SET_MARK_SIG(external_view_set_mark){ +VIEW_SET_MARK_SIG(external_view_set_mark)/* +DOC_PARAM(view, the view in which to set the mark) +DOC_PARAM(seek, the seek position) +DOC_RETURN(returns non-zero on success) +DOC +( +Sets the the view's mark position. +) +DOC_SEE(Buffer_Seek) +*/{ Command_Data *cmd = (Command_Data*)app->cmd_context; View *vptr = imp_get_view(cmd, view); Full_Cursor cursor = {0}; @@ -1169,7 +1200,20 @@ VIEW_SET_MARK_SIG(external_view_set_mark){ return(result); } -VIEW_SET_HIGHLIGHT_SIG(external_view_set_highlight){ +VIEW_SET_HIGHLIGHT_SIG(external_view_set_highlight)/* +DOC_PARAM(view, the view to set the highlight in) +DOC_PARAM(start, the start of the highlight range) +DOC_PARAM(end, the end of the highlight range) +DOC_PARAM(turn_on, indicates whether the highlight is being turned on or off) +DOC_RETURN(returns non-zero on success) +DOC +( +The highlight is mutually exclusive to the cursor. When the turn_on parameter +is set to true the highlight will be shown and the cursor will be hidden. After +that either setting the with view_set_cursor or calling view_set_highlight and +the turn_on set to false, will switch back to showing the cursor. +) +*/{ Command_Data *cmd = (Command_Data*)app->cmd_context; View *vptr = imp_get_view(cmd, view); int result = false; @@ -1188,7 +1232,18 @@ VIEW_SET_HIGHLIGHT_SIG(external_view_set_highlight){ return(result); } -VIEW_SET_BUFFER_SIG(external_view_set_buffer){ +VIEW_SET_BUFFER_SIG(external_view_set_buffer)/* +DOC_PARAM(view, the view to display the buffer in) +DOC_PARAM(buffer_id, the buffer to show in the view) +DOC_PARAM(flags, set buffer behavior flags) +DOC_RETURN(returns non-zero on success) +DOC +( +On success view_set_buffer sets the specified view's current buffer and +cancels and dialogue shown in the view and displays the file. +) +DOC_SEE(Set_Buffer_Flag) +*/{ Command_Data *cmd = (Command_Data*)app->cmd_context; View *vptr = imp_get_view(cmd, view); Models *models = cmd->models; @@ -1202,7 +1257,9 @@ VIEW_SET_BUFFER_SIG(external_view_set_buffer){ result = true; if (file != vptr->file_data.file){ view_set_file(vptr, file, models); - view_show_file(vptr); + if (!(flags & SetBuffer_KeepOriginalGUI)){ + view_show_file(vptr); + } } } @@ -1223,7 +1280,7 @@ VIEW_POST_FADE_SIG(external_view_post_fade){ if (vptr){ if (size > 0){ result = true; - view_post_paste_effect(vptr, ticks, start, size, color); + view_post_paste_effect(vptr, seconds, start, size, color); } } diff --git a/4ed_file.cpp b/4ed_file.cpp index 603931b6..09ed78c1 100644 --- a/4ed_file.cpp +++ b/4ed_file.cpp @@ -88,7 +88,7 @@ enum File_Sync_State{ struct Text_Effect{ i32 start, end; u32 color; - i32 tick_down, tick_max; + f32 seconds_down, seconds_max; }; // NOTE(allen): The Editing_File struct is now divided into two diff --git a/4ed_file_view.cpp b/4ed_file_view.cpp index 92fe501d..67542211 100644 --- a/4ed_file_view.cpp +++ b/4ed_file_view.cpp @@ -2226,14 +2226,14 @@ view_replace_range(System_Functions *system, Models *models, View *view, } inline void -view_post_paste_effect(View *view, i32 ticks, i32 start, i32 size, u32 color){ +view_post_paste_effect(View *view, f32 seconds, i32 start, i32 size, u32 color){ 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; - file->state.paste_effect.tick_down = ticks; - file->state.paste_effect.tick_max = ticks; + file->state.paste_effect.seconds_down = seconds; + file->state.paste_effect.seconds_max = seconds; } internal Style* @@ -2270,7 +2270,7 @@ view_undo_redo(System_Functions *system, view->recent->mark = view->recent->cursor.pos; Style *style = main_style(models); - view_post_paste_effect(view, 10, step.edit.start, step.edit.len, + view_post_paste_effect(view, 0.333f, step.edit.start, step.edit.len, style->main.undo_color); } else{ @@ -2988,7 +2988,8 @@ file_auto_tab_tokens(System_Functions *system, Models *models, Edit_Spec spec = file_compute_whitespace_edit(mem, file, pos, batch.edits, batch.str_base, batch.str_size, - inverse_array, inv_str, part->max - part->pos, batch.edit_count); + inverse_array, inv_str, part->max - part->pos, + batch.edit_count); file_do_white_batch_edit(system, models, file, spec, hist_normal); } @@ -2996,31 +2997,6 @@ file_auto_tab_tokens(System_Functions *system, Models *models, #endif } -internal void -view_auto_tab_tokens(System_Functions *system, Models *models, - View *view, i32 start, i32 end, Indent_Options opts){ -#if BUFFER_EXPERIMENT_SCALPEL <= 0 - - Editing_File *file = view->file_data.file; - i32 pos = view->recent->cursor.pos; - - file_auto_tab_tokens(system, models, file, pos, start, end, opts); - - // TODO(allen): This is the bug dummy - { - Buffer_Type *buffer = &file->state.buffer; - i32 line = buffer_get_line_index(buffer, pos); - i32 start = buffer->line_starts[line]; - - Hard_Start_Result hard_start = buffer_find_hard_start(buffer, start, 4); - - if (hard_start.char_pos > pos){ - view_cursor_move(view, hard_start.char_pos); - } - } -#endif -} - struct Get_Link_Result{ b32 in_link; i32 index; @@ -3645,8 +3621,8 @@ file_step(View *view, i32_Rect region, Input_Summary *user_input, b32 is_active, i32 is_animating = 0; Editing_File *file = view->file_data.file; if (file && !file->is_loading){ - if (file->state.paste_effect.tick_down > 0){ - --file->state.paste_effect.tick_down; + if (file->state.paste_effect.seconds_down > 0.f){ + file->state.paste_effect.seconds_down -= user_input->dt; is_animating = 1; } } @@ -5475,11 +5451,12 @@ draw_file_loaded(View *view, i32_Rect rect, b32 is_active, Render_Target *target u32 fade_color = 0xFFFF00FF; f32 fade_amount = 0.f; - if (file->state.paste_effect.tick_down > 0 && + if (file->state.paste_effect.seconds_down > 0.f && file->state.paste_effect.start <= ind && ind < file->state.paste_effect.end){ fade_color = file->state.paste_effect.color; - fade_amount = (f32)(file->state.paste_effect.tick_down) / file->state.paste_effect.tick_max; + fade_amount = file->state.paste_effect.seconds_down; + fade_amount /= file->state.paste_effect.seconds_max; } char_color = color_blend(char_color, fade_amount, fade_color); diff --git a/build_all.bat b/build_all.bat index 1b66b8c2..7263be26 100644 --- a/build_all.bat +++ b/build_all.bat @@ -23,7 +23,7 @@ popd pushd ..\build REM call "..\code\buildsuper.bat" ..\code\4coder_default_bindings.cpp - call "..\code\buildsuper.bat" ..\code\power\4coder_experiments.cpp +REM call "..\code\buildsuper.bat" ..\code\power\4coder_experiments.cpp REM call "..\code\buildsuper.bat" ..\code\power\4coder_casey.cpp REM call "..\code\buildsuper.bat" ..\4vim\4coder_chronal.cpp if %ERRORLEVEL% neq 0 (set FirstError=1) diff --git a/custom_api_spec.cpp b/custom_api_spec.cpp index 18371b80..101196e6 100644 --- a/custom_api_spec.cpp +++ b/custom_api_spec.cpp @@ -43,13 +43,12 @@ void Get_View_Next(Application_Links *app, View_Summary *view, unsigned int acce View_Summary Get_View(Application_Links *app, int view_id, unsigned int access); View_Summary Get_Active_View(Application_Links *app, unsigned int access); -Full_Cursor View_Compute_Cursor (Application_Links *app, View_Summary *view, Buffer_Seek seek); -int View_Set_Cursor (Application_Links *app, View_Summary *view, Buffer_Seek seek, int set_preferred_x); -int View_Set_Mark (Application_Links *app, View_Summary *view, Buffer_Seek seek); -int View_Set_Highlight (Application_Links *app, View_Summary *view, int start, int end, int turn_on); -int View_Set_Buffer (Application_Links *app, View_Summary *view, int buffer_id); -// TODO(allen): Switch from ticks to seconds. -int View_Post_Fade (Application_Links *app, View_Summary *view, int ticks, int start, int end, unsigned int color); +int View_Compute_Cursor (Application_Links *app, View_Summary *view, Buffer_Seek seek, Full_Cursor *cursor_out); +int View_Set_Cursor (Application_Links *app, View_Summary *view, Buffer_Seek seek, int set_preferred_x); +int View_Set_Mark (Application_Links *app, View_Summary *view, Buffer_Seek seek); +int View_Set_Highlight (Application_Links *app, View_Summary *view, int start, int end, int turn_on); +int View_Set_Buffer (Application_Links *app, View_Summary *view, int buffer_id, unsigned int flags); +int View_Post_Fade (Application_Links *app, View_Summary *view, float seconds, int start, int end, unsigned int color); // TODO(allen): // Get rid of this temporary hack ass soon ass possible. diff --git a/power/4coder_casey.cpp b/power/4coder_casey.cpp index 01539526..4eb3aa8c 100644 --- a/power/4coder_casey.cpp +++ b/power/4coder_casey.cpp @@ -508,20 +508,13 @@ SwitchToOrLoadFile(struct Application_Links *app, String FileName, bool CreateIf if(buffer.exists) { - app->view_set_buffer(app, &view, buffer.buffer_id); + app->view_set_buffer(app, &view, buffer.buffer_id, 0); Result.Switched = true; } else { if(app->file_exists(app, FileName.str, FileName.size) || CreateIfNotFound) { -#if 0 - push_parameter(app, par_name, expand_str(FileName)); - // TODO(casey): Do I have to check for existence, or can I pass a parameter - // to interactive open to tell it to fail if the file isn't there? - exec_command(app, cmdid_interactive_open); -#endif - // NOTE(allen): This opens the file and puts it in &view // This returns false if the open fails. view_open_file(app, &view, expand_str(FileName), false); @@ -640,7 +633,7 @@ CUSTOM_COMMAND_SIG(casey_find_corresponding_file_other_window) exec_command(app, cmdid_change_active_panel); View_Summary new_view = app->get_active_view(app, AccessAll); - app->view_set_buffer(app, &new_view, buffer.buffer_id); + app->view_set_buffer(app, &new_view, buffer.buffer_id, 0); // exec_command(app, casey_find_corresponding_file); } @@ -648,51 +641,16 @@ CUSTOM_COMMAND_SIG(casey_find_corresponding_file_other_window) CUSTOM_COMMAND_SIG(casey_save_and_make_without_asking) { exec_command(app, cmdid_change_active_panel); - + Buffer_Summary buffer = {}; - + unsigned int access = AccessAll; for(buffer = app->get_buffer_first(app, access); buffer.exists; app->get_buffer_next(app, &buffer, access)) { -#if 0 - push_parameter(app, par_name, buffer.file_name, buffer.file_name_len); - push_parameter(app, par_buffer_id, buffer.buffer_id); - exec_command(app, cmdid_save); -#endif - - app->save_buffer(app, &buffer, buffer.file_name, buffer.file_name_len); + app->save_buffer(app, &buffer, buffer.file_name, buffer.file_name_len, 0); } - -#if 0 - String dir = make_string(app->memory, 0, app->memory_size); - append(&dir, BuildDirectory); - for(int At = 0; - At < dir.size; - ++At) - { - if(dir.str[At] == '/') - { - dir.str[At] = '\\'; - } - } - - - push_parameter(app, par_flags, CLI_OverlapWithConflict); - push_parameter(app, par_name, GlobalCompilationBufferName, (int)strlen(GlobalCompilationBufferName)); - push_parameter(app, par_cli_path, dir.str, dir.size); - - if(append(&dir, "build.bat")) - { - push_parameter(app, par_cli_command, dir.str, dir.size); - exec_command(app, cmdid_command_line); - exec_command(app, cmdid_change_active_panel); - } - else{ - app->clear_parameters(app); - } -#endif // NOTE(allen): The parameter pushing made it a little easier // to deal with this particular pattern where two similar strings @@ -1154,11 +1112,6 @@ OpenProject(Application_Links *app, char *ProjectFileName) // was originally, so that new appends overwrite old ones. dir.size = dir_size; append(&dir, info->filename); -#if 0 - push_parameter(app, par_name, dir.str, dir.size); - push_parameter(app, par_do_in_background, 1); - exec_command(app, cmdid_interactive_open); -#endif view_open_file(app, 0, dir.str, dir.size, true); ++TotalOpenAttempts; @@ -1351,14 +1304,6 @@ OPEN_FILE_HOOK_SIG(casey_file_settings) treat_as_project = match(ext, make_lit_string("prj")); } -#if 0 - push_parameter(app, par_buffer_id, buffer.buffer_id); - push_parameter(app, par_lex_as_cpp_file, treat_as_code); - push_parameter(app, par_wrap_lines, !treat_as_code); - push_parameter(app, par_key_mapid, mapid_file); - exec_command(app, cmdid_set_settings); -#endif - app->buffer_set_setting(app, &buffer, BufferSetting_Lex, treat_as_code); app->buffer_set_setting(app, &buffer, BufferSetting_WrapLine, !treat_as_code); app->buffer_set_setting(app, &buffer, BufferSetting_MapID, mapid_file); diff --git a/power/4coder_experiments.cpp b/power/4coder_experiments.cpp index eef4e354..41df77da 100644 --- a/power/4coder_experiments.cpp +++ b/power/4coder_experiments.cpp @@ -10,7 +10,6 @@ CUSTOM_COMMAND_SIG(kill_rect){ unsigned int access = AccessOpen; View_Summary view = app->get_active_view(app, access); Buffer_Summary buffer = app->get_buffer(app, view.buffer_id, access); - Full_Cursor cursor; Buffer_Rect rect = get_rect(&view); @@ -18,13 +17,20 @@ CUSTOM_COMMAND_SIG(kill_rect){ int start = 0; int end = 0; - cursor = app->view_compute_cursor(app, &view, seek_line_char(line, rect.char0)); + int success = true; + Full_Cursor cursor = {0}; + + success = success && + app->view_compute_cursor(app, &view, seek_line_char(line, rect.char0), &cursor); start = cursor.pos; - cursor = app->view_compute_cursor(app, &view, seek_line_char(line, rect.char1)); + success = success && + app->view_compute_cursor(app, &view, seek_line_char(line, rect.char1), &cursor); end = cursor.pos; - app->buffer_replace_range(app, &buffer, start, end, 0, 0); + if (success){ + app->buffer_replace_range(app, &buffer, start, end, 0, 0); + } } }