Face* instead of Face_ID as much as possible; Preferred X works again
This commit is contained in:
parent
aaec0cc3c8
commit
352cb27b73
|
@ -49,7 +49,7 @@ write_character_parameter(Application_Links *app, u8 *character, u32 length){
|
|||
|
||||
// NOTE(allen): finish updating the cursor
|
||||
if (edit_success){
|
||||
view_set_cursor(app, view, seek_pos(pos + length), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(pos + length));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -100,7 +100,7 @@ CUSTOM_DOC("Deletes the character to the left of the cursor.")
|
|||
i64 character = view_relative_character_from_pos(app, view, cursor.line, cursor.pos);
|
||||
i64 start = view_pos_from_relative_character(app, view, cursor.line, character - 1);
|
||||
if (buffer_replace_range(app, buffer, Ii64(start, end), string_u8_empty)){
|
||||
view_set_cursor(app, view, seek_pos(start), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(start));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -112,7 +112,7 @@ CUSTOM_DOC("Sets the mark to the current position of the cursor.")
|
|||
View_ID view = get_active_view(app, AccessProtected);
|
||||
i64 pos = view_get_cursor_pos(app, view);
|
||||
view_set_mark(app, view, seek_pos(pos));
|
||||
view_set_cursor(app, view, seek_pos(pos), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(pos));
|
||||
}
|
||||
|
||||
CUSTOM_COMMAND_SIG(cursor_mark_swap)
|
||||
|
@ -121,7 +121,7 @@ CUSTOM_DOC("Swaps the position of the cursor and the mark.")
|
|||
View_ID view = get_active_view(app, AccessProtected);
|
||||
i64 cursor = view_get_cursor_pos(app, view);
|
||||
i64 mark = view_get_mark_pos(app, view);
|
||||
view_set_cursor(app, view, seek_pos(mark), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(mark));
|
||||
view_set_mark(app, view, seek_pos(cursor));
|
||||
}
|
||||
|
||||
|
@ -227,7 +227,7 @@ CUSTOM_DOC("Sets the cursor position and mark to the mouse position.")
|
|||
if (!view_is_in_ui_mode(app, view)){
|
||||
Mouse_State mouse = get_mouse_state(app);
|
||||
i64 pos = view_pos_from_xy(app, view, V2(mouse.p));
|
||||
view_set_cursor(app, view, seek_pos(pos), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(pos));
|
||||
view_set_mark(app, view, seek_pos(pos));
|
||||
}
|
||||
}
|
||||
|
@ -239,7 +239,7 @@ CUSTOM_DOC("Sets the cursor position to the mouse position.")
|
|||
if (!view_is_in_ui_mode(app, view)){
|
||||
Mouse_State mouse = get_mouse_state(app);
|
||||
i64 pos = view_pos_from_xy(app, view, V2(mouse.p));
|
||||
view_set_cursor(app, view, seek_pos(pos), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(pos));
|
||||
no_mark_snap_to_cursor(app, view);
|
||||
}
|
||||
}
|
||||
|
@ -252,7 +252,7 @@ CUSTOM_DOC("If the mouse left button is pressed, sets the cursor position to the
|
|||
Mouse_State mouse = get_mouse_state(app);
|
||||
if (mouse.l){
|
||||
i64 pos = view_pos_from_xy(app, view, V2(mouse.p));
|
||||
view_set_cursor(app, view, seek_pos(pos), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(pos));
|
||||
}
|
||||
no_mark_snap_to_cursor(app, view);
|
||||
}
|
||||
|
@ -296,9 +296,10 @@ move_vertical_pixels(Application_Links *app, View_ID view, f32 pixels){
|
|||
i64 pos = view_get_cursor_pos(app, view);
|
||||
Buffer_Cursor cursor = view_compute_cursor(app, view, seek_pos(pos));
|
||||
Vec2_f32 p = view_relative_xy_of_pos(app, view, cursor.line, pos);
|
||||
p.x = view_get_preferred_x(app, view);
|
||||
p.y += pixels;
|
||||
i64 new_pos = view_pos_at_relative_xy(app, view, cursor.line, p);
|
||||
view_set_cursor(app, view, seek_pos(new_pos), false);
|
||||
view_set_cursor(app, view, seek_pos(new_pos));
|
||||
no_mark_snap_to_cursor_if_shift(app, view);
|
||||
}
|
||||
|
||||
|
@ -324,8 +325,6 @@ move_vertical_lines(Application_Links *app, f32 lines){
|
|||
move_vertical_lines(app, view, lines);
|
||||
}
|
||||
|
||||
#define move_vertical move_vertical_lines
|
||||
|
||||
internal f32
|
||||
get_page_jump(Application_Links *app, View_ID view){
|
||||
Rect_f32 region = view_get_buffer_region(app, view);
|
||||
|
@ -335,25 +334,25 @@ get_page_jump(Application_Links *app, View_ID view){
|
|||
CUSTOM_COMMAND_SIG(move_up)
|
||||
CUSTOM_DOC("Moves the cursor up one line.")
|
||||
{
|
||||
move_vertical(app, -1.f);
|
||||
move_vertical_lines(app, -1.f);
|
||||
}
|
||||
|
||||
CUSTOM_COMMAND_SIG(move_down)
|
||||
CUSTOM_DOC("Moves the cursor down one line.")
|
||||
{
|
||||
move_vertical(app, 1.f);
|
||||
move_vertical_lines(app, 1.f);
|
||||
}
|
||||
|
||||
CUSTOM_COMMAND_SIG(move_up_10)
|
||||
CUSTOM_DOC("Moves the cursor up ten lines.")
|
||||
{
|
||||
move_vertical(app, -10.f);
|
||||
move_vertical_lines(app, -10.f);
|
||||
}
|
||||
|
||||
CUSTOM_COMMAND_SIG(move_down_10)
|
||||
CUSTOM_DOC("Moves the cursor down ten lines.")
|
||||
{
|
||||
move_vertical(app, 10.f);
|
||||
move_vertical_lines(app, 10.f);
|
||||
}
|
||||
|
||||
CUSTOM_COMMAND_SIG(move_down_textual)
|
||||
|
@ -363,7 +362,7 @@ CUSTOM_DOC("Moves down to the next line of actual text, regardless of line wrapp
|
|||
i64 pos = view_get_cursor_pos(app, view);
|
||||
Buffer_Cursor cursor = view_compute_cursor(app, view, seek_pos(pos));
|
||||
i64 next_line = cursor.line + 1;
|
||||
view_set_cursor(app, view, seek_line_col(next_line, 1), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_line_col(next_line, 1));
|
||||
}
|
||||
|
||||
CUSTOM_COMMAND_SIG(page_up)
|
||||
|
@ -399,7 +398,7 @@ seek_blank_line(Application_Links *app, Scan_Direction direction, Position_Withi
|
|||
new_pos = get_line_side_pos_from_pos(app, buffer, new_pos, Side_Max);
|
||||
}break;
|
||||
}
|
||||
view_set_cursor(app, view, seek_pos(new_pos), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(new_pos));
|
||||
no_mark_snap_to_cursor_if_shift(app, view);
|
||||
}
|
||||
|
||||
|
@ -439,11 +438,6 @@ CUSTOM_DOC("Seeks the cursor down to the next blank line and places it at the en
|
|||
seek_blank_line(app, Scan_Forward, PositionWithinLine_End);
|
||||
}
|
||||
|
||||
#define seek_whitespace_up move_up_to_blank_line
|
||||
#define seek_whitespace_down move_down_to_blank_line
|
||||
#define seek_whitespace_up_end_line move_up_to_blank_line_skip_whitespace
|
||||
#define seek_whitespace_down_end_line move_down_to_blank_line_skip_whitespace
|
||||
|
||||
CUSTOM_COMMAND_SIG(move_left)
|
||||
CUSTOM_DOC("Moves the cursor one character to the left.")
|
||||
{
|
||||
|
@ -452,7 +446,7 @@ CUSTOM_DOC("Moves the cursor one character to the left.")
|
|||
Buffer_Cursor cursor = view_compute_cursor(app, view, seek_pos(pos));
|
||||
i64 character = view_relative_character_from_pos(app, view, cursor.line, pos);
|
||||
i64 new_pos = view_pos_from_relative_character(app, view, cursor.line, character - 1);
|
||||
view_set_cursor(app, view, seek_pos(new_pos), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(new_pos));
|
||||
no_mark_snap_to_cursor_if_shift(app, view);
|
||||
}
|
||||
|
||||
|
@ -464,7 +458,7 @@ CUSTOM_DOC("Moves the cursor one character to the right.")
|
|||
Buffer_Cursor cursor = view_compute_cursor(app, view, seek_pos(pos));
|
||||
i64 character = view_relative_character_from_pos(app, view, cursor.line, pos);
|
||||
i64 new_pos = view_pos_from_relative_character(app, view, cursor.line, character + 1);
|
||||
view_set_cursor(app, view, seek_pos(new_pos), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(new_pos));
|
||||
no_mark_snap_to_cursor_if_shift(app, view);
|
||||
}
|
||||
|
||||
|
@ -474,7 +468,7 @@ current_view_scan_move(Application_Links *app, Scan_Direction direction, Boundar
|
|||
Buffer_ID buffer = view_get_buffer(app, view, AccessProtected);
|
||||
i64 cursor_pos = view_get_cursor_pos(app, view);
|
||||
i64 pos = scan(app, funcs, buffer, direction, cursor_pos);
|
||||
view_set_cursor(app, view, seek_pos(pos), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(pos));
|
||||
no_mark_snap_to_cursor_if_shift(app, view);
|
||||
}
|
||||
|
||||
|
@ -577,7 +571,7 @@ CUSTOM_DOC("Puts the cursor at the top of the file, and the mark at the bottom o
|
|||
View_ID view = get_active_view(app, AccessProtected);
|
||||
Buffer_ID buffer = view_get_buffer(app, view, AccessProtected);
|
||||
i32 buffer_size = (i32)buffer_get_size(app, buffer);
|
||||
view_set_cursor(app, view, seek_pos(0), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(0));
|
||||
view_set_mark(app, view, seek_pos(buffer_size));
|
||||
no_mark_snap_to_cursor(app, view);
|
||||
}
|
||||
|
@ -594,7 +588,7 @@ CUSTOM_DOC("Converts all ascii text in the range between the cursor and the mark
|
|||
String_Const_u8 string = push_buffer_range(app, scratch, buffer, range);
|
||||
string = string_mod_upper(string);
|
||||
buffer_replace_range(app, buffer, range, string);
|
||||
view_set_cursor(app, view, seek_pos(range.max), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(range.max));
|
||||
}
|
||||
|
||||
CUSTOM_COMMAND_SIG(to_lowercase)
|
||||
|
@ -607,7 +601,7 @@ CUSTOM_DOC("Converts all ascii text in the range between the cursor and the mark
|
|||
String_Const_u8 string = push_buffer_range(app, scratch, buffer, range);
|
||||
string = string_mod_lower(string);
|
||||
buffer_replace_range(app, buffer, range, string);
|
||||
view_set_cursor(app, view, seek_pos(range.max), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(range.max));
|
||||
}
|
||||
|
||||
CUSTOM_COMMAND_SIG(clean_all_lines)
|
||||
|
@ -833,7 +827,7 @@ CUSTOM_DOC("Queries the user for a number, and jumps the cursor to the correspon
|
|||
if (query_user_number(app, &bar)){
|
||||
i32 line_number = (i32)string_to_integer(bar.string, 10);
|
||||
View_ID view = get_active_view(app, AccessProtected);
|
||||
view_set_cursor(app, view, seek_line_col(line_number, 0), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_line_col(line_number, 0));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -843,7 +837,7 @@ CUSTOM_COMMAND_SIG(reverse_search);
|
|||
static void
|
||||
isearch__update_highlight(Application_Links *app, View_ID view, Range_i64 range){
|
||||
view_set_highlight_range(app, view, range);
|
||||
view_set_cursor(app, view, seek_pos(range.start), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(range.start));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1029,7 +1023,7 @@ isearch(Application_Links *app, b32 start_reversed, String_Const_u8 query_init,
|
|||
size = clamp_top(size, sizeof(previous_isearch_query) - 1);
|
||||
block_copy(previous_isearch_query, bar.string.str, size);
|
||||
previous_isearch_query[size] = 0;
|
||||
view_set_cursor(app, view, seek_pos(first_pos), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(first_pos));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1178,7 +1172,7 @@ query_replace_base(Application_Links *app, View_ID view, Buffer_ID buffer_id, i6
|
|||
return;
|
||||
}
|
||||
|
||||
view_set_cursor(app, view, seek_pos(pos), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(pos));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1452,7 +1446,7 @@ current_view_move_line(Application_Links *app, Scan_Direction direction){
|
|||
i64 pos = view_get_cursor_pos(app, view);
|
||||
i64 line_number = get_line_number_from_pos(app, buffer, pos);
|
||||
pos = move_line(app, buffer, line_number, direction);
|
||||
view_set_cursor(app, view, seek_pos(pos), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(pos));
|
||||
}
|
||||
|
||||
CUSTOM_COMMAND_SIG(move_line_up)
|
||||
|
@ -1600,7 +1594,7 @@ CUSTOM_DOC("Set the other non-active panel to view the buffer that the active pa
|
|||
change_active_panel(app);
|
||||
view = get_active_view(app, AccessAll);
|
||||
view_set_buffer(app, view, buffer, 0);
|
||||
view_set_cursor(app, view, seek_pos(pos), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(pos));
|
||||
}
|
||||
|
||||
CUSTOM_COMMAND_SIG(swap_buffers_between_panels)
|
||||
|
@ -1627,11 +1621,11 @@ CUSTOM_DOC("Set the other non-active panel to view the buffer that the active pa
|
|||
i64 m2 = view_get_mark_pos(app, view2);
|
||||
Buffer_Scroll sc2 = view_get_buffer_scroll(app, view2);
|
||||
|
||||
view_set_cursor(app, view1, seek_pos(p2), true);
|
||||
view_set_mark (app, view1, seek_pos(m2));
|
||||
view_set_cursor_and_preferred_x(app, view1, seek_pos(p2));
|
||||
view_set_mark(app, view1, seek_pos(m2));
|
||||
view_set_buffer_scroll(app, view1, sc2);
|
||||
view_set_cursor(app, view2, seek_pos(p1), true);
|
||||
view_set_mark (app, view2, seek_pos(m1));
|
||||
view_set_cursor_and_preferred_x(app, view2, seek_pos(p1));
|
||||
view_set_mark(app, view2, seek_pos(m1));
|
||||
view_set_buffer_scroll(app, view2, sc1);
|
||||
}
|
||||
}
|
||||
|
@ -1726,7 +1720,7 @@ CUSTOM_DOC("Advances backwards through the undo history of the current buffer.")
|
|||
if (current > 0){
|
||||
i32 new_position = record_get_new_cursor_position_undo(app, buffer, current);
|
||||
buffer_history_set_current_state_index(app, buffer, current - 1);
|
||||
view_set_cursor(app, view, seek_pos(new_position), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(new_position));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1740,7 +1734,7 @@ CUSTOM_DOC("Advances forwards through the undo history of the current buffer.")
|
|||
if (current < max_index){
|
||||
i32 new_position = record_get_new_cursor_position_redo(app, buffer, current + 1);
|
||||
buffer_history_set_current_state_index(app, buffer, current + 1);
|
||||
view_set_cursor(app, view, seek_pos(new_position), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(new_position));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -58,7 +58,7 @@ CUSTOM_DOC("At the cursor, insert the text at the top of the clipboard.")
|
|||
i64 pos = view_get_cursor_pos(app, view);
|
||||
buffer_replace_range(app, buffer, Ii64(pos), string);
|
||||
view_set_mark(app, view, seek_pos(pos));
|
||||
view_set_cursor(app, view, seek_pos(pos + (i32)string.size), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(pos + (i32)string.size));
|
||||
|
||||
// TODO(allen): Send this to all views.
|
||||
Theme_Color paste = {};
|
||||
|
@ -97,7 +97,7 @@ CUSTOM_DOC("If the previous command was paste or paste_next, replaces the paste
|
|||
i64 pos = range.min;
|
||||
|
||||
buffer_replace_range(app, buffer, range, string);
|
||||
view_set_cursor(app, view, seek_pos(pos + string.size), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(pos + string.size));
|
||||
|
||||
// TODO(allen): Send this to all views.
|
||||
Theme_Color paste = {};
|
||||
|
|
|
@ -8,7 +8,7 @@ static void
|
|||
write_string(Application_Links *app, View_ID view, Buffer_ID buffer, String_Const_u8 string){
|
||||
i64 pos = view_get_cursor_pos(app, view);
|
||||
buffer_replace_range(app, buffer, Ii64(pos), string);
|
||||
view_set_cursor(app, view, seek_pos(pos + string.size), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(pos + string.size));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -38,7 +38,7 @@ long_braces(Application_Links *app, char *text, i32 size){
|
|||
Buffer_ID buffer = view_get_buffer(app, view, AccessOpen);
|
||||
i64 pos = view_get_cursor_pos(app, view);
|
||||
buffer_replace_range(app, buffer, Ii64(pos), SCu8(text, size));
|
||||
view_set_cursor(app, view, seek_pos(pos + 2), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(pos + 2));
|
||||
buffer_auto_indent(app, buffer, pos, pos + size, DEF_TAB_WIDTH, DEFAULT_INDENT_FLAGS | AutoIndent_FullTokens);
|
||||
move_past_lead_whitespace(app, view, buffer);
|
||||
}
|
||||
|
@ -205,7 +205,7 @@ activate_snippet(Application_Links *app, Heap *heap, View_ID view, struct Lister
|
|||
Buffer_ID buffer = view_get_buffer(app, view, AccessOpen);
|
||||
i64 pos = view_get_cursor_pos(app, view);
|
||||
buffer_replace_range(app, buffer, Ii64(pos), SCu8(snippet.text));
|
||||
view_set_cursor(app, view, seek_pos(pos + snippet.cursor_offset), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(pos + snippet.cursor_offset));
|
||||
view_set_mark(app, view, seek_pos(pos + snippet.mark_offset));
|
||||
}
|
||||
else{
|
||||
|
|
|
@ -188,7 +188,7 @@ view_buffer_set(Application_Links *app, Buffer_ID *buffers, i32 *positions, i32
|
|||
View_Node *node = primary_view_first;
|
||||
for (i32 i = 0; i < buffer_set_count; i += 1, node = node->next){
|
||||
if (view_set_buffer(app, node->view_id, buffers[i], 0)){
|
||||
view_set_cursor(app, node->view_id, seek_pos(positions[i]), true);
|
||||
view_set_cursor_and_preferred_x(app, node->view_id, seek_pos(positions[i]));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@ CUSTOM_COMMAND_SIG(multi_paste){
|
|||
Range_i64 range = get_view_range(app, view);
|
||||
buffer_replace_range(app, buffer, Ii64(range.max), insert_string);
|
||||
view_set_mark(app, view, seek_pos(range.max + 1));
|
||||
view_set_cursor(app, view, seek_pos(range.max + insert_string.size), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(range.max + insert_string.size));
|
||||
|
||||
// TODO(allen): Send this to all views.
|
||||
Theme_Color paste = {};
|
||||
|
@ -98,7 +98,7 @@ multi_paste_range(Application_Links *app, View_ID view, Range_i64 range, i32 pas
|
|||
finish_range.min = pos;
|
||||
finish_range.max = pos + total_size;
|
||||
view_set_mark(app, view, seek_pos(finish_range.min));
|
||||
view_set_cursor(app, view, seek_pos(finish_range.max), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(finish_range.max));
|
||||
|
||||
// TODO(allen): Send this to all views.
|
||||
Theme_Color paste;
|
||||
|
|
|
@ -65,6 +65,7 @@ struct Application_Links;
|
|||
#define VIEW_GET_CURSOR_POS_SIG(n) i64 n(Application_Links *app, View_ID view_id)
|
||||
#define VIEW_GET_MARK_POS_SIG(n) i64 n(Application_Links *app, View_ID view_id)
|
||||
#define VIEW_GET_PREFERRED_X_SIG(n) f32 n(Application_Links *app, View_ID view_id)
|
||||
#define VIEW_SET_PREFERRED_X_SIG(n) b32 n(Application_Links *app, View_ID view_id, f32 x)
|
||||
#define VIEW_GET_SCREEN_RECT_SIG(n) Rect_f32 n(Application_Links *app, View_ID view_id)
|
||||
#define VIEW_GET_PANEL_SIG(n) Panel_ID n(Application_Links *app, View_ID view_id)
|
||||
#define PANEL_GET_VIEW_SIG(n) View_ID n(Application_Links *app, Panel_ID panel_id)
|
||||
|
@ -86,7 +87,8 @@ struct Application_Links;
|
|||
#define VIEW_SET_SETTING_SIG(n) b32 n(Application_Links *app, View_ID view_id, View_Setting_ID setting, i32 value)
|
||||
#define VIEW_GET_MANAGED_SCOPE_SIG(n) Managed_Scope n(Application_Links *app, View_ID view_id)
|
||||
#define BUFFER_COMPUTE_CURSOR_SIG(n) Buffer_Cursor n(Application_Links *app, Buffer_ID buffer, Buffer_Seek seek)
|
||||
#define VIEW_SET_CURSOR_SIG(n) b32 n(Application_Links *app, View_ID view_id, Buffer_Seek seek, b32 set_preferred_x)
|
||||
#define VIEW_COMPUTE_CURSOR_SIG(n) Buffer_Cursor n(Application_Links *app, View_ID view_id, Buffer_Seek seek)
|
||||
#define VIEW_SET_CURSOR_SIG(n) b32 n(Application_Links *app, View_ID view_id, Buffer_Seek seek)
|
||||
#define VIEW_SET_BUFFER_SCROLL_SIG(n) b32 n(Application_Links *app, View_ID view_id, Buffer_Scroll scroll)
|
||||
#define VIEW_SET_BASIC_SCROLL_SIG(n) b32 n(Application_Links *app, View_ID view_id, Basic_Scroll scroll)
|
||||
#define VIEW_SET_MARK_SIG(n) b32 n(Application_Links *app, View_ID view_id, Buffer_Seek seek)
|
||||
|
@ -249,6 +251,7 @@ typedef VIEW_GET_BUFFER_SIG(View_Get_Buffer_Function);
|
|||
typedef VIEW_GET_CURSOR_POS_SIG(View_Get_Cursor_Pos_Function);
|
||||
typedef VIEW_GET_MARK_POS_SIG(View_Get_Mark_Pos_Function);
|
||||
typedef VIEW_GET_PREFERRED_X_SIG(View_Get_Preferred_X_Function);
|
||||
typedef VIEW_SET_PREFERRED_X_SIG(View_Set_Preferred_X_Function);
|
||||
typedef VIEW_GET_SCREEN_RECT_SIG(View_Get_Screen_Rect_Function);
|
||||
typedef VIEW_GET_PANEL_SIG(View_Get_Panel_Function);
|
||||
typedef PANEL_GET_VIEW_SIG(Panel_Get_View_Function);
|
||||
|
@ -270,6 +273,7 @@ typedef VIEW_GET_SETTING_SIG(View_Get_Setting_Function);
|
|||
typedef VIEW_SET_SETTING_SIG(View_Set_Setting_Function);
|
||||
typedef VIEW_GET_MANAGED_SCOPE_SIG(View_Get_Managed_Scope_Function);
|
||||
typedef BUFFER_COMPUTE_CURSOR_SIG(Buffer_Compute_Cursor_Function);
|
||||
typedef VIEW_COMPUTE_CURSOR_SIG(View_Compute_Cursor_Function);
|
||||
typedef VIEW_SET_CURSOR_SIG(View_Set_Cursor_Function);
|
||||
typedef VIEW_SET_BUFFER_SCROLL_SIG(View_Set_Buffer_Scroll_Function);
|
||||
typedef VIEW_SET_BASIC_SCROLL_SIG(View_Set_Basic_Scroll_Function);
|
||||
|
@ -435,6 +439,7 @@ View_Get_Buffer_Function *view_get_buffer;
|
|||
View_Get_Cursor_Pos_Function *view_get_cursor_pos;
|
||||
View_Get_Mark_Pos_Function *view_get_mark_pos;
|
||||
View_Get_Preferred_X_Function *view_get_preferred_x;
|
||||
View_Set_Preferred_X_Function *view_set_preferred_x;
|
||||
View_Get_Screen_Rect_Function *view_get_screen_rect;
|
||||
View_Get_Panel_Function *view_get_panel;
|
||||
Panel_Get_View_Function *panel_get_view;
|
||||
|
@ -456,6 +461,7 @@ View_Get_Setting_Function *view_get_setting;
|
|||
View_Set_Setting_Function *view_set_setting;
|
||||
View_Get_Managed_Scope_Function *view_get_managed_scope;
|
||||
Buffer_Compute_Cursor_Function *buffer_compute_cursor;
|
||||
View_Compute_Cursor_Function *view_compute_cursor;
|
||||
View_Set_Cursor_Function *view_set_cursor;
|
||||
View_Set_Buffer_Scroll_Function *view_set_buffer_scroll;
|
||||
View_Set_Basic_Scroll_Function *view_set_basic_scroll;
|
||||
|
@ -620,6 +626,7 @@ View_Get_Buffer_Function *view_get_buffer_;
|
|||
View_Get_Cursor_Pos_Function *view_get_cursor_pos_;
|
||||
View_Get_Mark_Pos_Function *view_get_mark_pos_;
|
||||
View_Get_Preferred_X_Function *view_get_preferred_x_;
|
||||
View_Set_Preferred_X_Function *view_set_preferred_x_;
|
||||
View_Get_Screen_Rect_Function *view_get_screen_rect_;
|
||||
View_Get_Panel_Function *view_get_panel_;
|
||||
Panel_Get_View_Function *panel_get_view_;
|
||||
|
@ -641,6 +648,7 @@ View_Get_Setting_Function *view_get_setting_;
|
|||
View_Set_Setting_Function *view_set_setting_;
|
||||
View_Get_Managed_Scope_Function *view_get_managed_scope_;
|
||||
Buffer_Compute_Cursor_Function *buffer_compute_cursor_;
|
||||
View_Compute_Cursor_Function *view_compute_cursor_;
|
||||
View_Set_Cursor_Function *view_set_cursor_;
|
||||
View_Set_Buffer_Scroll_Function *view_set_buffer_scroll_;
|
||||
View_Set_Basic_Scroll_Function *view_set_basic_scroll_;
|
||||
|
@ -813,6 +821,7 @@ app_links->view_get_buffer_ = View_Get_Buffer;\
|
|||
app_links->view_get_cursor_pos_ = View_Get_Cursor_Pos;\
|
||||
app_links->view_get_mark_pos_ = View_Get_Mark_Pos;\
|
||||
app_links->view_get_preferred_x_ = View_Get_Preferred_X;\
|
||||
app_links->view_set_preferred_x_ = View_Set_Preferred_X;\
|
||||
app_links->view_get_screen_rect_ = View_Get_Screen_Rect;\
|
||||
app_links->view_get_panel_ = View_Get_Panel;\
|
||||
app_links->panel_get_view_ = Panel_Get_View;\
|
||||
|
@ -834,6 +843,7 @@ app_links->view_get_setting_ = View_Get_Setting;\
|
|||
app_links->view_set_setting_ = View_Set_Setting;\
|
||||
app_links->view_get_managed_scope_ = View_Get_Managed_Scope;\
|
||||
app_links->buffer_compute_cursor_ = Buffer_Compute_Cursor;\
|
||||
app_links->view_compute_cursor_ = View_Compute_Cursor;\
|
||||
app_links->view_set_cursor_ = View_Set_Cursor;\
|
||||
app_links->view_set_buffer_scroll_ = View_Set_Buffer_Scroll;\
|
||||
app_links->view_set_basic_scroll_ = View_Set_Basic_Scroll;\
|
||||
|
@ -998,6 +1008,7 @@ static Buffer_ID view_get_buffer(Application_Links *app, View_ID view_id, Access
|
|||
static i64 view_get_cursor_pos(Application_Links *app, View_ID view_id){return(app->view_get_cursor_pos(app, view_id));}
|
||||
static i64 view_get_mark_pos(Application_Links *app, View_ID view_id){return(app->view_get_mark_pos(app, view_id));}
|
||||
static f32 view_get_preferred_x(Application_Links *app, View_ID view_id){return(app->view_get_preferred_x(app, view_id));}
|
||||
static b32 view_set_preferred_x(Application_Links *app, View_ID view_id, f32 x){return(app->view_set_preferred_x(app, view_id, x));}
|
||||
static Rect_f32 view_get_screen_rect(Application_Links *app, View_ID view_id){return(app->view_get_screen_rect(app, view_id));}
|
||||
static Panel_ID view_get_panel(Application_Links *app, View_ID view_id){return(app->view_get_panel(app, view_id));}
|
||||
static View_ID panel_get_view(Application_Links *app, Panel_ID panel_id){return(app->panel_get_view(app, panel_id));}
|
||||
|
@ -1019,7 +1030,8 @@ static b32 view_get_setting(Application_Links *app, View_ID view_id, View_Settin
|
|||
static b32 view_set_setting(Application_Links *app, View_ID view_id, View_Setting_ID setting, i32 value){return(app->view_set_setting(app, view_id, setting, value));}
|
||||
static Managed_Scope view_get_managed_scope(Application_Links *app, View_ID view_id){return(app->view_get_managed_scope(app, view_id));}
|
||||
static Buffer_Cursor buffer_compute_cursor(Application_Links *app, Buffer_ID buffer, Buffer_Seek seek){return(app->buffer_compute_cursor(app, buffer, seek));}
|
||||
static b32 view_set_cursor(Application_Links *app, View_ID view_id, Buffer_Seek seek, b32 set_preferred_x){return(app->view_set_cursor(app, view_id, seek, set_preferred_x));}
|
||||
static Buffer_Cursor view_compute_cursor(Application_Links *app, View_ID view_id, Buffer_Seek seek){return(app->view_compute_cursor(app, view_id, seek));}
|
||||
static b32 view_set_cursor(Application_Links *app, View_ID view_id, Buffer_Seek seek){return(app->view_set_cursor(app, view_id, seek));}
|
||||
static b32 view_set_buffer_scroll(Application_Links *app, View_ID view_id, Buffer_Scroll scroll){return(app->view_set_buffer_scroll(app, view_id, scroll));}
|
||||
static b32 view_set_basic_scroll(Application_Links *app, View_ID view_id, Basic_Scroll scroll){return(app->view_set_basic_scroll(app, view_id, scroll));}
|
||||
static b32 view_set_mark(Application_Links *app, View_ID view_id, Buffer_Seek seek){return(app->view_set_mark(app, view_id, seek));}
|
||||
|
@ -1183,6 +1195,7 @@ static Buffer_ID view_get_buffer(Application_Links *app, View_ID view_id, Access
|
|||
static i64 view_get_cursor_pos(Application_Links *app, View_ID view_id){return(app->view_get_cursor_pos_(app, view_id));}
|
||||
static i64 view_get_mark_pos(Application_Links *app, View_ID view_id){return(app->view_get_mark_pos_(app, view_id));}
|
||||
static f32 view_get_preferred_x(Application_Links *app, View_ID view_id){return(app->view_get_preferred_x_(app, view_id));}
|
||||
static b32 view_set_preferred_x(Application_Links *app, View_ID view_id, f32 x){return(app->view_set_preferred_x_(app, view_id, x));}
|
||||
static Rect_f32 view_get_screen_rect(Application_Links *app, View_ID view_id){return(app->view_get_screen_rect_(app, view_id));}
|
||||
static Panel_ID view_get_panel(Application_Links *app, View_ID view_id){return(app->view_get_panel_(app, view_id));}
|
||||
static View_ID panel_get_view(Application_Links *app, Panel_ID panel_id){return(app->panel_get_view_(app, panel_id));}
|
||||
|
@ -1204,7 +1217,8 @@ static b32 view_get_setting(Application_Links *app, View_ID view_id, View_Settin
|
|||
static b32 view_set_setting(Application_Links *app, View_ID view_id, View_Setting_ID setting, i32 value){return(app->view_set_setting_(app, view_id, setting, value));}
|
||||
static Managed_Scope view_get_managed_scope(Application_Links *app, View_ID view_id){return(app->view_get_managed_scope_(app, view_id));}
|
||||
static Buffer_Cursor buffer_compute_cursor(Application_Links *app, Buffer_ID buffer, Buffer_Seek seek){return(app->buffer_compute_cursor_(app, buffer, seek));}
|
||||
static b32 view_set_cursor(Application_Links *app, View_ID view_id, Buffer_Seek seek, b32 set_preferred_x){return(app->view_set_cursor_(app, view_id, seek, set_preferred_x));}
|
||||
static Buffer_Cursor view_compute_cursor(Application_Links *app, View_ID view_id, Buffer_Seek seek){return(app->view_compute_cursor_(app, view_id, seek));}
|
||||
static b32 view_set_cursor(Application_Links *app, View_ID view_id, Buffer_Seek seek){return(app->view_set_cursor_(app, view_id, seek));}
|
||||
static b32 view_set_buffer_scroll(Application_Links *app, View_ID view_id, Buffer_Scroll scroll){return(app->view_set_buffer_scroll_(app, view_id, scroll));}
|
||||
static b32 view_set_basic_scroll(Application_Links *app, View_ID view_id, Basic_Scroll scroll){return(app->view_set_basic_scroll_(app, view_id, scroll));}
|
||||
static b32 view_set_mark(Application_Links *app, View_ID view_id, Buffer_Seek seek){return(app->view_set_mark_(app, view_id, seek));}
|
||||
|
|
|
@ -293,87 +293,87 @@ static Command_Metadata fcoder_metacmd_table[233] = {
|
|||
{ PROC_LINKS(click_set_cursor_if_lbutton, 0), "click_set_cursor_if_lbutton", 27, "If the mouse left button is pressed, sets the cursor position to the mouse position.", 84, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 247 },
|
||||
{ PROC_LINKS(click_set_mark, 0), "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 261 },
|
||||
{ PROC_LINKS(mouse_wheel_scroll, 0), "mouse_wheel_scroll", 18, "Reads the scroll wheel value from the mouse state and scrolls accordingly.", 74, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 273 },
|
||||
{ PROC_LINKS(move_up, 0), "move_up", 7, "Moves the cursor up one line.", 29, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 335 },
|
||||
{ PROC_LINKS(move_down, 0), "move_down", 9, "Moves the cursor down one line.", 31, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 341 },
|
||||
{ PROC_LINKS(move_up_10, 0), "move_up_10", 10, "Moves the cursor up ten lines.", 30, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 347 },
|
||||
{ PROC_LINKS(move_down_10, 0), "move_down_10", 12, "Moves the cursor down ten lines.", 32, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 353 },
|
||||
{ PROC_LINKS(move_down_textual, 0), "move_down_textual", 17, "Moves down to the next line of actual text, regardless of line wrapping.", 72, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 359 },
|
||||
{ PROC_LINKS(page_up, 0), "page_up", 7, "Scrolls the view up one view height and moves the cursor up one view height.", 76, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 369 },
|
||||
{ PROC_LINKS(page_down, 0), "page_down", 9, "Scrolls the view down one view height and moves the cursor down one view height.", 80, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 377 },
|
||||
{ PROC_LINKS(move_up_to_blank_line, 0), "move_up_to_blank_line", 21, "Seeks the cursor up to the next blank line.", 43, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 406 },
|
||||
{ PROC_LINKS(move_down_to_blank_line, 0), "move_down_to_blank_line", 23, "Seeks the cursor down to the next blank line.", 45, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 412 },
|
||||
{ PROC_LINKS(move_up_to_blank_line_skip_whitespace, 0), "move_up_to_blank_line_skip_whitespace", 37, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 418 },
|
||||
{ PROC_LINKS(move_down_to_blank_line_skip_whitespace, 0), "move_down_to_blank_line_skip_whitespace", 39, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 424 },
|
||||
{ PROC_LINKS(move_up_to_blank_line_end, 0), "move_up_to_blank_line_end", 25, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 430 },
|
||||
{ PROC_LINKS(move_down_to_blank_line_end, 0), "move_down_to_blank_line_end", 27, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 436 },
|
||||
{ PROC_LINKS(move_left, 0), "move_left", 9, "Moves the cursor one character to the left.", 43, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 447 },
|
||||
{ PROC_LINKS(move_right, 0), "move_right", 10, "Moves the cursor one character to the right.", 44, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 459 },
|
||||
{ PROC_LINKS(move_right_whitespace_boundary, 0), "move_right_whitespace_boundary", 30, "Seek right for the next boundary between whitespace and non-whitespace.", 71, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 481 },
|
||||
{ PROC_LINKS(move_left_whitespace_boundary, 0), "move_left_whitespace_boundary", 29, "Seek left for the next boundary between whitespace and non-whitespace.", 70, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 489 },
|
||||
{ PROC_LINKS(move_right_token_boundary, 0), "move_right_token_boundary", 25, "Seek right for the next end of a token.", 39, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 497 },
|
||||
{ PROC_LINKS(move_left_token_boundary, 0), "move_left_token_boundary", 24, "Seek left for the next beginning of a token.", 44, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 505 },
|
||||
{ PROC_LINKS(move_right_whitespace_or_token_boundary, 0), "move_right_whitespace_or_token_boundary", 39, "Seek right for the next end of a token or boundary between whitespace and non-whitespace.", 89, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 513 },
|
||||
{ PROC_LINKS(move_left_whitespace_or_token_boundary, 0), "move_left_whitespace_or_token_boundary", 38, "Seek left for the next end of a token or boundary between whitespace and non-whitespace.", 88, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 521 },
|
||||
{ PROC_LINKS(move_right_alpha_numeric_boundary, 0), "move_right_alpha_numeric_boundary", 33, "Seek right for boundary between alphanumeric characters and non-alphanumeric characters.", 88, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 529 },
|
||||
{ PROC_LINKS(move_left_alpha_numeric_boundary, 0), "move_left_alpha_numeric_boundary", 32, "Seek left for boundary between alphanumeric characters and non-alphanumeric characters.", 87, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 537 },
|
||||
{ PROC_LINKS(move_right_alpha_numeric_or_camel_boundary, 0), "move_right_alpha_numeric_or_camel_boundary", 42, "Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 107, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 545 },
|
||||
{ PROC_LINKS(move_left_alpha_numeric_or_camel_boundary, 0), "move_left_alpha_numeric_or_camel_boundary", 41, "Seek left for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 106, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 553 },
|
||||
{ PROC_LINKS(select_all, 0), "select_all", 10, "Puts the cursor at the top of the file, and the mark at the bottom of the file.", 79, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 574 },
|
||||
{ PROC_LINKS(to_uppercase, 0), "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 587 },
|
||||
{ PROC_LINKS(to_lowercase, 0), "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 600 },
|
||||
{ PROC_LINKS(clean_all_lines, 0), "clean_all_lines", 15, "Removes trailing whitespace from all lines in the current buffer.", 65, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 613 },
|
||||
{ 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, 647 },
|
||||
{ PROC_LINKS(close_panel, 0), "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 655 },
|
||||
{ PROC_LINKS(show_scrollbar, 0), "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 664 },
|
||||
{ PROC_LINKS(hide_scrollbar, 0), "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 671 },
|
||||
{ PROC_LINKS(show_filebar, 0), "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 678 },
|
||||
{ PROC_LINKS(hide_filebar, 0), "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 685 },
|
||||
{ PROC_LINKS(toggle_filebar, 0), "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 692 },
|
||||
{ PROC_LINKS(toggle_line_wrap, 0), "toggle_line_wrap", 16, "Toggles the current buffer's line wrapping status.", 50, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 701 },
|
||||
{ PROC_LINKS(toggle_fps_meter, 0), "toggle_fps_meter", 16, "Toggles the visibility of the FPS performance meter", 51, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 711 },
|
||||
{ PROC_LINKS(increase_line_wrap, 0), "increase_line_wrap", 18, "Increases the current buffer's width for line wrapping.", 55, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 717 },
|
||||
{ PROC_LINKS(decrease_line_wrap, 0), "decrease_line_wrap", 18, "Decrases the current buffer's width for line wrapping.", 54, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 727 },
|
||||
{ PROC_LINKS(increase_face_size, 0), "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 737 },
|
||||
{ PROC_LINKS(decrease_face_size, 0), "decrease_face_size", 18, "Decrease the size of the face used by the current buffer.", 57, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 748 },
|
||||
{ PROC_LINKS(mouse_wheel_change_face_size, 0), "mouse_wheel_change_face_size", 28, "Reads the state of the mouse wheel and uses it to either increase or decrease the face size.", 92, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 759 },
|
||||
{ PROC_LINKS(toggle_virtual_whitespace, 0), "toggle_virtual_whitespace", 25, "Toggles the current buffer's virtual whitespace status.", 55, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 776 },
|
||||
{ PROC_LINKS(toggle_show_whitespace, 0), "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 786 },
|
||||
{ PROC_LINKS(toggle_line_numbers, 0), "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 795 },
|
||||
{ PROC_LINKS(eol_dosify, 0), "eol_dosify", 10, "Puts the buffer in DOS line ending mode.", 40, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 801 },
|
||||
{ PROC_LINKS(eol_nixify, 0), "eol_nixify", 10, "Puts the buffer in NIX line ending mode.", 40, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 809 },
|
||||
{ PROC_LINKS(exit_4coder, 0), "exit_4coder", 11, "Attempts to close 4coder.", 25, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 817 },
|
||||
{ PROC_LINKS(goto_line, 0), "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 825 },
|
||||
{ PROC_LINKS(search, 0), "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1036 },
|
||||
{ PROC_LINKS(reverse_search, 0), "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1042 },
|
||||
{ PROC_LINKS(search_identifier, 0), "search_identifier", 17, "Begins an incremental search down through the current buffer for the word or token under the cursor.", 100, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1048 },
|
||||
{ PROC_LINKS(reverse_search_identifier, 0), "reverse_search_identifier", 25, "Begins an incremental search up through the current buffer for the word or token under the cursor.", 98, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1059 },
|
||||
{ PROC_LINKS(replace_in_range, 0), "replace_in_range", 16, "Queries the user for a needle and string. Replaces all occurences of needle with string in the range between cursor and the mark in the active buffer.", 150, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1110 },
|
||||
{ PROC_LINKS(replace_in_buffer, 0), "replace_in_buffer", 17, "Queries the user for a needle and string. Replaces all occurences of needle with string in the active buffer.", 109, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1119 },
|
||||
{ PROC_LINKS(replace_in_all_buffers, 0), "replace_in_all_buffers", 22, "Queries the user for a needle and string. Replaces all occurences of needle with string in all editable buffers.", 112, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1128 },
|
||||
{ PROC_LINKS(query_replace, 0), "query_replace", 13, "Queries the user for two strings, and incrementally replaces every occurence of the first string with the second string.", 120, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1216 },
|
||||
{ PROC_LINKS(query_replace_identifier, 0), "query_replace_identifier", 24, "Queries the user for a string, and incrementally replace every occurence of the word or token found at the cursor with the specified string.", 140, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1236 },
|
||||
{ PROC_LINKS(query_replace_selection, 0), "query_replace_selection", 23, "Queries the user for a string, and incrementally replace every occurence of the string found in the selected range with the specified string.", 141, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1252 },
|
||||
{ PROC_LINKS(save_all_dirty_buffers, 0), "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1287 },
|
||||
{ PROC_LINKS(delete_file_query, 0), "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1312 },
|
||||
{ PROC_LINKS(save_to_query, 0), "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1350 },
|
||||
{ PROC_LINKS(rename_file_query, 0), "rename_file_query", 17, "Queries the user for a new name and renames the file of the current buffer, altering the buffer's name too.", 107, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1385 },
|
||||
{ PROC_LINKS(make_directory_query, 0), "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1425 },
|
||||
{ PROC_LINKS(move_line_up, 0), "move_line_up", 12, "Swaps the line under the cursor with the line above it, and moves the cursor up with it.", 88, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1458 },
|
||||
{ PROC_LINKS(move_line_down, 0), "move_line_down", 14, "Swaps the line under the cursor with the line below it, and moves the cursor down with it.", 90, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1464 },
|
||||
{ PROC_LINKS(duplicate_line, 0), "duplicate_line", 14, "Create a copy of the line on which the cursor sits.", 51, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1470 },
|
||||
{ PROC_LINKS(delete_line, 0), "delete_line", 11, "Delete the line the on which the cursor sits.", 45, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1484 },
|
||||
{ PROC_LINKS(open_file_in_quotes, 0), "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1549 },
|
||||
{ PROC_LINKS(open_matching_file_cpp, 0), "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1581 },
|
||||
{ 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, 1594 },
|
||||
{ PROC_LINKS(swap_buffers_between_panels, 0), "swap_buffers_between_panels", 27, "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, 1606 },
|
||||
{ PROC_LINKS(kill_buffer, 0), "kill_buffer", 11, "Kills the current buffer.", 25, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1642 },
|
||||
{ PROC_LINKS(save, 0), "save", 4, "Saves the current buffer.", 25, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1650 },
|
||||
{ PROC_LINKS(reopen, 0), "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1662 },
|
||||
{ PROC_LINKS(undo, 0), "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1720 },
|
||||
{ PROC_LINKS(redo, 0), "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1733 },
|
||||
{ PROC_LINKS(undo_all_buffers, 0), "undo_all_buffers", 16, "Advances backward through the undo history in the buffer containing the most recent regular edit.", 97, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1747 },
|
||||
{ PROC_LINKS(redo_all_buffers, 0), "redo_all_buffers", 16, "Advances forward through the undo history in the buffer containing the most recent regular edit.", 96, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1821 },
|
||||
{ PROC_LINKS(open_in_other, 0), "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1924 },
|
||||
{ PROC_LINKS(move_up, 0), "move_up", 7, "Moves the cursor up one line.", 29, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 334 },
|
||||
{ PROC_LINKS(move_down, 0), "move_down", 9, "Moves the cursor down one line.", 31, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 340 },
|
||||
{ PROC_LINKS(move_up_10, 0), "move_up_10", 10, "Moves the cursor up ten lines.", 30, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 346 },
|
||||
{ PROC_LINKS(move_down_10, 0), "move_down_10", 12, "Moves the cursor down ten lines.", 32, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 352 },
|
||||
{ PROC_LINKS(move_down_textual, 0), "move_down_textual", 17, "Moves down to the next line of actual text, regardless of line wrapping.", 72, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 358 },
|
||||
{ PROC_LINKS(page_up, 0), "page_up", 7, "Scrolls the view up one view height and moves the cursor up one view height.", 76, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 368 },
|
||||
{ PROC_LINKS(page_down, 0), "page_down", 9, "Scrolls the view down one view height and moves the cursor down one view height.", 80, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 376 },
|
||||
{ PROC_LINKS(move_up_to_blank_line, 0), "move_up_to_blank_line", 21, "Seeks the cursor up to the next blank line.", 43, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 405 },
|
||||
{ PROC_LINKS(move_down_to_blank_line, 0), "move_down_to_blank_line", 23, "Seeks the cursor down to the next blank line.", 45, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 411 },
|
||||
{ PROC_LINKS(move_up_to_blank_line_skip_whitespace, 0), "move_up_to_blank_line_skip_whitespace", 37, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 417 },
|
||||
{ PROC_LINKS(move_down_to_blank_line_skip_whitespace, 0), "move_down_to_blank_line_skip_whitespace", 39, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 423 },
|
||||
{ PROC_LINKS(move_up_to_blank_line_end, 0), "move_up_to_blank_line_end", 25, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 429 },
|
||||
{ PROC_LINKS(move_down_to_blank_line_end, 0), "move_down_to_blank_line_end", 27, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 435 },
|
||||
{ PROC_LINKS(move_left, 0), "move_left", 9, "Moves the cursor one character to the left.", 43, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 441 },
|
||||
{ PROC_LINKS(move_right, 0), "move_right", 10, "Moves the cursor one character to the right.", 44, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 453 },
|
||||
{ PROC_LINKS(move_right_whitespace_boundary, 0), "move_right_whitespace_boundary", 30, "Seek right for the next boundary between whitespace and non-whitespace.", 71, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 475 },
|
||||
{ PROC_LINKS(move_left_whitespace_boundary, 0), "move_left_whitespace_boundary", 29, "Seek left for the next boundary between whitespace and non-whitespace.", 70, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 483 },
|
||||
{ PROC_LINKS(move_right_token_boundary, 0), "move_right_token_boundary", 25, "Seek right for the next end of a token.", 39, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 491 },
|
||||
{ PROC_LINKS(move_left_token_boundary, 0), "move_left_token_boundary", 24, "Seek left for the next beginning of a token.", 44, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 499 },
|
||||
{ PROC_LINKS(move_right_whitespace_or_token_boundary, 0), "move_right_whitespace_or_token_boundary", 39, "Seek right for the next end of a token or boundary between whitespace and non-whitespace.", 89, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 507 },
|
||||
{ PROC_LINKS(move_left_whitespace_or_token_boundary, 0), "move_left_whitespace_or_token_boundary", 38, "Seek left for the next end of a token or boundary between whitespace and non-whitespace.", 88, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 515 },
|
||||
{ PROC_LINKS(move_right_alpha_numeric_boundary, 0), "move_right_alpha_numeric_boundary", 33, "Seek right for boundary between alphanumeric characters and non-alphanumeric characters.", 88, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 523 },
|
||||
{ PROC_LINKS(move_left_alpha_numeric_boundary, 0), "move_left_alpha_numeric_boundary", 32, "Seek left for boundary between alphanumeric characters and non-alphanumeric characters.", 87, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 531 },
|
||||
{ PROC_LINKS(move_right_alpha_numeric_or_camel_boundary, 0), "move_right_alpha_numeric_or_camel_boundary", 42, "Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 107, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 539 },
|
||||
{ PROC_LINKS(move_left_alpha_numeric_or_camel_boundary, 0), "move_left_alpha_numeric_or_camel_boundary", 41, "Seek left for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 106, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 547 },
|
||||
{ PROC_LINKS(select_all, 0), "select_all", 10, "Puts the cursor at the top of the file, and the mark at the bottom of the file.", 79, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 568 },
|
||||
{ PROC_LINKS(to_uppercase, 0), "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 581 },
|
||||
{ PROC_LINKS(to_lowercase, 0), "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 594 },
|
||||
{ PROC_LINKS(clean_all_lines, 0), "clean_all_lines", 15, "Removes trailing whitespace from all lines in the current buffer.", 65, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 607 },
|
||||
{ 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, 641 },
|
||||
{ PROC_LINKS(close_panel, 0), "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 649 },
|
||||
{ PROC_LINKS(show_scrollbar, 0), "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 658 },
|
||||
{ PROC_LINKS(hide_scrollbar, 0), "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 665 },
|
||||
{ PROC_LINKS(show_filebar, 0), "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 672 },
|
||||
{ PROC_LINKS(hide_filebar, 0), "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 679 },
|
||||
{ PROC_LINKS(toggle_filebar, 0), "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 686 },
|
||||
{ PROC_LINKS(toggle_line_wrap, 0), "toggle_line_wrap", 16, "Toggles the current buffer's line wrapping status.", 50, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 695 },
|
||||
{ PROC_LINKS(toggle_fps_meter, 0), "toggle_fps_meter", 16, "Toggles the visibility of the FPS performance meter", 51, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 705 },
|
||||
{ PROC_LINKS(increase_line_wrap, 0), "increase_line_wrap", 18, "Increases the current buffer's width for line wrapping.", 55, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 711 },
|
||||
{ PROC_LINKS(decrease_line_wrap, 0), "decrease_line_wrap", 18, "Decrases the current buffer's width for line wrapping.", 54, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 721 },
|
||||
{ PROC_LINKS(increase_face_size, 0), "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 731 },
|
||||
{ PROC_LINKS(decrease_face_size, 0), "decrease_face_size", 18, "Decrease the size of the face used by the current buffer.", 57, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 742 },
|
||||
{ PROC_LINKS(mouse_wheel_change_face_size, 0), "mouse_wheel_change_face_size", 28, "Reads the state of the mouse wheel and uses it to either increase or decrease the face size.", 92, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 753 },
|
||||
{ PROC_LINKS(toggle_virtual_whitespace, 0), "toggle_virtual_whitespace", 25, "Toggles the current buffer's virtual whitespace status.", 55, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 770 },
|
||||
{ PROC_LINKS(toggle_show_whitespace, 0), "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 780 },
|
||||
{ PROC_LINKS(toggle_line_numbers, 0), "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 789 },
|
||||
{ PROC_LINKS(eol_dosify, 0), "eol_dosify", 10, "Puts the buffer in DOS line ending mode.", 40, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 795 },
|
||||
{ PROC_LINKS(eol_nixify, 0), "eol_nixify", 10, "Puts the buffer in NIX line ending mode.", 40, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 803 },
|
||||
{ PROC_LINKS(exit_4coder, 0), "exit_4coder", 11, "Attempts to close 4coder.", 25, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 811 },
|
||||
{ PROC_LINKS(goto_line, 0), "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 819 },
|
||||
{ PROC_LINKS(search, 0), "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1030 },
|
||||
{ PROC_LINKS(reverse_search, 0), "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1036 },
|
||||
{ PROC_LINKS(search_identifier, 0), "search_identifier", 17, "Begins an incremental search down through the current buffer for the word or token under the cursor.", 100, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1042 },
|
||||
{ PROC_LINKS(reverse_search_identifier, 0), "reverse_search_identifier", 25, "Begins an incremental search up through the current buffer for the word or token under the cursor.", 98, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1053 },
|
||||
{ PROC_LINKS(replace_in_range, 0), "replace_in_range", 16, "Queries the user for a needle and string. Replaces all occurences of needle with string in the range between cursor and the mark in the active buffer.", 150, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1104 },
|
||||
{ PROC_LINKS(replace_in_buffer, 0), "replace_in_buffer", 17, "Queries the user for a needle and string. Replaces all occurences of needle with string in the active buffer.", 109, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1113 },
|
||||
{ PROC_LINKS(replace_in_all_buffers, 0), "replace_in_all_buffers", 22, "Queries the user for a needle and string. Replaces all occurences of needle with string in all editable buffers.", 112, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1122 },
|
||||
{ PROC_LINKS(query_replace, 0), "query_replace", 13, "Queries the user for two strings, and incrementally replaces every occurence of the first string with the second string.", 120, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1210 },
|
||||
{ PROC_LINKS(query_replace_identifier, 0), "query_replace_identifier", 24, "Queries the user for a string, and incrementally replace every occurence of the word or token found at the cursor with the specified string.", 140, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1230 },
|
||||
{ PROC_LINKS(query_replace_selection, 0), "query_replace_selection", 23, "Queries the user for a string, and incrementally replace every occurence of the string found in the selected range with the specified string.", 141, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1246 },
|
||||
{ PROC_LINKS(save_all_dirty_buffers, 0), "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1281 },
|
||||
{ PROC_LINKS(delete_file_query, 0), "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1306 },
|
||||
{ PROC_LINKS(save_to_query, 0), "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1344 },
|
||||
{ PROC_LINKS(rename_file_query, 0), "rename_file_query", 17, "Queries the user for a new name and renames the file of the current buffer, altering the buffer's name too.", 107, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1379 },
|
||||
{ PROC_LINKS(make_directory_query, 0), "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1419 },
|
||||
{ PROC_LINKS(move_line_up, 0), "move_line_up", 12, "Swaps the line under the cursor with the line above it, and moves the cursor up with it.", 88, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1452 },
|
||||
{ PROC_LINKS(move_line_down, 0), "move_line_down", 14, "Swaps the line under the cursor with the line below it, and moves the cursor down with it.", 90, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1458 },
|
||||
{ PROC_LINKS(duplicate_line, 0), "duplicate_line", 14, "Create a copy of the line on which the cursor sits.", 51, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1464 },
|
||||
{ PROC_LINKS(delete_line, 0), "delete_line", 11, "Delete the line the on which the cursor sits.", 45, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1478 },
|
||||
{ PROC_LINKS(open_file_in_quotes, 0), "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1543 },
|
||||
{ PROC_LINKS(open_matching_file_cpp, 0), "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1575 },
|
||||
{ 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, 1588 },
|
||||
{ PROC_LINKS(swap_buffers_between_panels, 0), "swap_buffers_between_panels", 27, "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, 1600 },
|
||||
{ PROC_LINKS(kill_buffer, 0), "kill_buffer", 11, "Kills the current buffer.", 25, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1636 },
|
||||
{ PROC_LINKS(save, 0), "save", 4, "Saves the current buffer.", 25, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1644 },
|
||||
{ PROC_LINKS(reopen, 0), "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1656 },
|
||||
{ PROC_LINKS(undo, 0), "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1714 },
|
||||
{ PROC_LINKS(redo, 0), "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1727 },
|
||||
{ PROC_LINKS(undo_all_buffers, 0), "undo_all_buffers", 16, "Advances backward through the undo history in the buffer containing the most recent regular edit.", 97, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1741 },
|
||||
{ PROC_LINKS(redo_all_buffers, 0), "redo_all_buffers", 16, "Advances forward through the undo history in the buffer containing the most recent regular edit.", 96, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1815 },
|
||||
{ PROC_LINKS(open_in_other, 0), "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1918 },
|
||||
{ PROC_LINKS(lister__quit, 0), "lister__quit", 12, "A lister mode command that quits the list without executing any actions.", 72, "w:\\4ed\\code\\4coder_lists.cpp", 28, 8 },
|
||||
{ PROC_LINKS(lister__activate, 0), "lister__activate", 16, "A lister mode command that activates the list's action on the highlighted item.", 79, "w:\\4ed\\code\\4coder_lists.cpp", 28, 15 },
|
||||
{ PROC_LINKS(lister__write_character, 0), "lister__write_character", 23, "A lister mode command that dispatches to the lister's write character handler.", 78, "w:\\4ed\\code\\4coder_lists.cpp", 28, 30 },
|
||||
|
|
|
@ -408,11 +408,6 @@ buffer_seek_character_class_change_0_1(Application_Links *app, Buffer_ID buffer,
|
|||
|
||||
////////////////////////////////
|
||||
|
||||
internal Buffer_Cursor
|
||||
view_compute_cursor(Application_Links *app, View_ID view, Buffer_Seek seek){
|
||||
return(buffer_compute_cursor(app, view_get_buffer(app, view, AccessAll), seek));
|
||||
}
|
||||
|
||||
internal i64
|
||||
view_pos_from_xy(Application_Links *app, View_ID view, Vec2_f32 p){
|
||||
Buffer_ID buffer = view_get_buffer(app, view, AccessProtected);
|
||||
|
@ -446,6 +441,14 @@ view_zero_scroll(Application_Links *app, View_ID view){
|
|||
}
|
||||
}
|
||||
|
||||
internal void
|
||||
view_set_cursor_and_preferred_x(Application_Links *app, View_ID view, Buffer_Seek seek){
|
||||
view_set_cursor(app, view, seek);
|
||||
Buffer_Cursor cursor = view_compute_cursor(app, view, seek);
|
||||
Vec2_f32 p = view_relative_xy_of_pos(app, view, cursor.line, cursor.pos);
|
||||
view_set_preferred_x(app, view, p.x);
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
internal Range_i64
|
||||
|
@ -470,12 +473,12 @@ set_view_range(Application_Links *app, View_ID view, Range_i64 range){
|
|||
i64 c = view_get_cursor_pos(app, view);
|
||||
i64 m = view_get_mark_pos(app, view);
|
||||
if (c < m){
|
||||
view_set_cursor(app, view, seek_pos(range.min), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(range.min));
|
||||
view_set_mark(app, view, seek_pos(range.max));
|
||||
}
|
||||
else{
|
||||
view_set_mark(app, view, seek_pos(range.min));
|
||||
view_set_cursor(app, view, seek_pos(range.max), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(range.max));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1291,7 +1294,7 @@ internal void
|
|||
move_past_lead_whitespace(Application_Links *app, View_ID view, Buffer_ID buffer){
|
||||
i64 pos = view_get_cursor_pos(app, view);
|
||||
i64 new_pos = get_pos_past_lead_whitespace(app, buffer, pos);
|
||||
view_set_cursor(app, view, seek_pos(new_pos), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(new_pos));
|
||||
}
|
||||
|
||||
internal void
|
||||
|
|
|
@ -440,7 +440,7 @@ goto_next_filtered_jump(Application_Links *app, Marker_List *list, View_ID jump_
|
|||
if (!skip_this){
|
||||
goto_jump_in_order(app, list, jump_view, location);
|
||||
i64 updated_line = get_line_from_list(app, list, list_index);
|
||||
view_set_cursor(app, jump_view, seek_line_col(updated_line, 1), true);
|
||||
view_set_cursor_and_preferred_x(app, jump_view, seek_line_col(updated_line, 1));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -538,7 +538,7 @@ CUSTOM_DOC("If a buffer containing jump locations has been locked in, goes to th
|
|||
if (get_jump_from_list(app, jump_state.list, list_index, &location)){
|
||||
goto_jump_in_order(app, jump_state.list, jump_state.view, location);
|
||||
i64 updated_line = get_line_from_list(app, jump_state.list, list_index);
|
||||
view_set_cursor(app, jump_state.view, seek_line_col(updated_line, 1), true);
|
||||
view_set_cursor_and_preferred_x(app, jump_state.view, seek_line_col(updated_line, 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -240,7 +240,7 @@ set_view_to_location(Application_Links *app, View_ID view, Buffer_ID buffer, Buf
|
|||
if (current_buffer != buffer){
|
||||
view_set_buffer(app, view, buffer, 0);
|
||||
}
|
||||
view_set_cursor(app, view, seek, true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -37,7 +37,7 @@ CUSTOM_DOC("Increment an integer under the cursor by one.")
|
|||
Scratch_Block scratch(app);
|
||||
String_Const_u8 str = push_u8_stringf(scratch, "%d", number.x + 1);
|
||||
buffer_replace_range(app, buffer, number.range, str);
|
||||
view_set_cursor(app, view, seek_pos(number.range.start + str.size - 1), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(number.range.start + str.size - 1));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -52,7 +52,7 @@ CUSTOM_DOC("Decrement an integer under the cursor by one.")
|
|||
Scratch_Block scratch(app);
|
||||
String_Const_u8 str = push_u8_stringf(scratch, "%d", number.x - 1);
|
||||
buffer_replace_range(app, buffer, number.range, str);
|
||||
view_set_cursor(app, view, seek_pos(number.range.start + str.size - 1), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(number.range.start + str.size - 1));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -224,7 +224,7 @@ miblo_time_stamp_alter(Application_Links *app, i32 unit_type, i32 amt){
|
|||
Miblo_Timestamp inc_timestamp = increment_timestamp(timestamp.time, unit_type, amt);
|
||||
String_Const_u8 str = timestamp_to_string(scratch, inc_timestamp);
|
||||
buffer_replace_range(app, buffer, timestamp.range, str);
|
||||
view_set_cursor(app, view, seek_pos(timestamp.range.start + str.size - 1), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(timestamp.range.start + str.size - 1));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -346,7 +346,7 @@ CUSTOM_DOC("Finds the scope enclosed by '{' '}' surrounding the cursor and puts
|
|||
i64 pos = view_get_cursor_pos(app, view);
|
||||
Range_i64 range = {};
|
||||
if (find_scope_range(app, buffer, pos, &range, FindScope_Brace)){
|
||||
view_set_cursor(app, view, seek_pos(range.first), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(range.first));
|
||||
view_set_mark(app, view, seek_pos(range.end));
|
||||
view_set_to_region(app, view, range.first, range.end);
|
||||
no_mark_snap_to_cursor(app, view);
|
||||
|
@ -364,7 +364,7 @@ CUSTOM_DOC("Finds the first scope started by '{' after the cursor and puts the c
|
|||
i64 bottom = 0;
|
||||
if (find_next_scope(app, buffer, start_pos, FindScope_Brace, &top)){
|
||||
if (find_scope_bottom(app, buffer, top, FindScope_EndOfToken|FindScope_Brace, &bottom)){
|
||||
view_set_cursor(app, view, seek_pos(top), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(top));
|
||||
view_set_mark(app, view, seek_pos(bottom));
|
||||
view_set_to_region(app, view, top, bottom);
|
||||
no_mark_snap_to_cursor(app, view);
|
||||
|
@ -383,7 +383,7 @@ CUSTOM_DOC("Finds the first scope started by '{' before the cursor and puts the
|
|||
i64 bottom = 0;
|
||||
if (find_prev_scope(app, buffer, start_pos, FindScope_Brace, &top)){
|
||||
if (find_scope_bottom(app, buffer, top, FindScope_EndOfToken|FindScope_Brace, &bottom)){
|
||||
view_set_cursor(app, view, seek_pos(top), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(top));
|
||||
view_set_mark(app, view, seek_pos(bottom));
|
||||
view_set_to_region(app, view, top, bottom);
|
||||
no_mark_snap_to_cursor(app, view);
|
||||
|
@ -441,7 +441,7 @@ place_begin_and_end_on_own_lines(Application_Links *app, char *begin, char *end)
|
|||
String_Const_u8 str = push_u8_stringf(scratch, "%s\n\n%s", begin, end);
|
||||
buffer_replace_range(app, buffer, range, str);
|
||||
i64 center_pos = range.min + cstring_length(begin) + 1;
|
||||
view_set_cursor(app, view, seek_pos(center_pos), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(center_pos));
|
||||
view_set_mark(app, view, seek_pos(center_pos));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -424,7 +424,7 @@ CUSTOM_DOC("Iteratively tries completing the word to the left of the cursor with
|
|||
|
||||
buffer_replace_range(app, buffer, state.range, str);
|
||||
state.range.max = state.range.min + str.size;
|
||||
view_set_cursor(app, view, seek_pos(state.range.max), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(state.range.max));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ seek_pos_of_textual_line(Application_Links *app, Side side){
|
|||
Buffer_ID buffer = view_get_buffer(app, view, AccessProtected);
|
||||
i64 pos = view_get_cursor_pos(app, view);
|
||||
i64 new_pos = get_line_side_pos_from_pos(app, buffer, pos, side);
|
||||
view_set_cursor(app, view, seek_pos(new_pos), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(new_pos));
|
||||
no_mark_snap_to_cursor_if_shift(app, view);
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@ seek_pos_of_visual_line(Application_Links *app, Side side){
|
|||
Vec2_f32 p = view_relative_xy_of_pos(app, view, cursor.line, pos);
|
||||
p.x = (side == Side_Min)?(0.f):(max_f32);
|
||||
i64 new_pos = view_pos_at_relative_xy(app, view, cursor.line, p);
|
||||
view_set_cursor(app, view, seek_pos(new_pos), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(new_pos));
|
||||
no_mark_snap_to_cursor_if_shift(app, view);
|
||||
}
|
||||
|
||||
|
@ -54,7 +54,7 @@ CUSTOM_COMMAND_SIG(goto_beginning_of_file)
|
|||
CUSTOM_DOC("Sets the cursor to the beginning of the file.")
|
||||
{
|
||||
View_ID view = get_active_view(app, AccessProtected);
|
||||
view_set_cursor(app, view, seek_pos(0), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(0));
|
||||
no_mark_snap_to_cursor_if_shift(app, view);
|
||||
}
|
||||
|
||||
|
@ -64,7 +64,7 @@ CUSTOM_DOC("Sets the cursor to the end of the file.")
|
|||
View_ID view = get_active_view(app, AccessProtected);
|
||||
Buffer_ID buffer_id = view_get_buffer(app, view, AccessProtected);
|
||||
i32 size = (i32)buffer_get_size(app, buffer_id);
|
||||
view_set_cursor(app, view, seek_pos(size), true);
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(size));
|
||||
no_mark_snap_to_cursor_if_shift(app, view);
|
||||
}
|
||||
|
||||
|
|
7
4ed.cpp
7
4ed.cpp
|
@ -52,8 +52,8 @@ app_coroutine_handle_request(Models *models, Coroutine *co, u32 *vals){
|
|||
case AppCoroutineRequest_NewFontFace:
|
||||
{
|
||||
Face_Description *description = ((Face_Description**)vals)[0];
|
||||
Face_ID face_id = font_set_new_face(&models->font_set, description);
|
||||
result = coroutine_run(&models->coroutines, co, &face_id, vals);
|
||||
Face *face = font_set_new_face(&models->font_set, description);
|
||||
result = coroutine_run(&models->coroutines, co, &face->id, vals);
|
||||
}break;
|
||||
|
||||
case AppCoroutineRequest_ModifyFace:
|
||||
|
@ -925,7 +925,8 @@ App_Init_Sig(app_init){
|
|||
description.font.file_name = string_u8_litexpr("liberation-mono.ttf");
|
||||
description.font.in_4coder_font_folder = true;
|
||||
description.parameters.pt_size = 12;
|
||||
models->global_font_id = font_set_new_face(&models->font_set, &description);
|
||||
Face *new_face = font_set_new_face(&models->font_set, &description);
|
||||
models->global_face_id = new_face->id;
|
||||
}
|
||||
app_hardcode_default_style(models);
|
||||
|
||||
|
|
|
@ -391,7 +391,10 @@ Buffer_Line_Y_Difference(Application_Links *app, Buffer_ID buffer_id, f32 width,
|
|||
Editing_File *file = imp_get_file(models, buffer_id);
|
||||
f32 result = {};
|
||||
if (api_check_buffer(file)){
|
||||
result = file_line_y_difference(models, file, width, face_id, line_a, line_b);
|
||||
Face *face = font_set_face_from_id(&models->font_set, face_id);
|
||||
if (face != 0){
|
||||
result = file_line_y_difference(models, file, width, face, line_a, line_b);
|
||||
}
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
@ -402,7 +405,10 @@ Buffer_Line_Shift_Y(Application_Links *app, Buffer_ID buffer_id, f32 width, Face
|
|||
Editing_File *file = imp_get_file(models, buffer_id);
|
||||
Line_Shift_Vertical result = {};
|
||||
if (api_check_buffer(file)){
|
||||
result = file_line_shift_y(models, file, width, face_id, line, y_shift);
|
||||
Face *face = font_set_face_from_id(&models->font_set, face_id);
|
||||
if (face != 0){
|
||||
result = file_line_shift_y(models, file, width, face, line, y_shift);
|
||||
}
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
@ -413,7 +419,10 @@ Buffer_Pos_At_Relative_XY(Application_Links *app, Buffer_ID buffer_id, f32 width
|
|||
Editing_File *file = imp_get_file(models, buffer_id);
|
||||
i64 result = -1;
|
||||
if (api_check_buffer(file)){
|
||||
result = file_pos_at_relative_xy(models, file, width, face_id, base_line, relative_xy);
|
||||
Face *face = font_set_face_from_id(&models->font_set, face_id);
|
||||
if (face != 0){
|
||||
result = file_pos_at_relative_xy(models, file, width, face, base_line, relative_xy);
|
||||
}
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
@ -425,7 +434,10 @@ Buffer_Relative_XY_Of_Pos(Application_Links *app, Buffer_ID buffer_id, f32 width
|
|||
Editing_File *file = imp_get_file(models, buffer_id);
|
||||
Vec2_f32 result = {};
|
||||
if (api_check_buffer(file)){
|
||||
result = file_relative_xy_of_pos(models, file, width, face_id, base_line, pos);
|
||||
Face *face = font_set_face_from_id(&models->font_set, face_id);
|
||||
if (face != 0){
|
||||
result = file_relative_xy_of_pos(models, file, width, face, base_line, pos);
|
||||
}
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
@ -437,7 +449,10 @@ Buffer_Relative_Character_From_Pos(Application_Links *app, Buffer_ID buffer_id,
|
|||
Editing_File *file = imp_get_file(models, buffer_id);
|
||||
i64 result = {};
|
||||
if (api_check_buffer(file)){
|
||||
result = file_relative_character_from_pos(models, file, width, face_id, base_line, pos);
|
||||
Face *face = font_set_face_from_id(&models->font_set, face_id);
|
||||
if (face != 0){
|
||||
result = file_relative_character_from_pos(models, file, width, face, base_line, pos);
|
||||
}
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
@ -449,7 +464,10 @@ Buffer_Pos_From_Relative_Character(Application_Links *app, Buffer_ID buffer_id,
|
|||
Editing_File *file = imp_get_file(models, buffer_id);
|
||||
i64 result = -1;
|
||||
if (api_check_buffer(file)){
|
||||
result = file_pos_from_relative_character(models, file, width, face_id, base_line, relative_character);
|
||||
Face *face = font_set_face_from_id(&models->font_set, face_id);
|
||||
if (face != 0){
|
||||
result = file_pos_from_relative_character(models, file, width, face, base_line, relative_character);
|
||||
}
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
@ -1299,6 +1317,18 @@ View_Get_Preferred_X(Application_Links *app, View_ID view_id){
|
|||
return(result);
|
||||
}
|
||||
|
||||
API_EXPORT b32
|
||||
View_Set_Preferred_X(Application_Links *app, View_ID view_id, f32 x){
|
||||
Models *models = (Models*)app->cmd_context;
|
||||
View *view = imp_get_view(models, view_id);
|
||||
b32 result = false;
|
||||
if (api_check_view(view)){
|
||||
view->preferred_x = x;
|
||||
result = true;
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
API_EXPORT Rect_f32
|
||||
View_Get_Screen_Rect(Application_Links *app, View_ID view_id){
|
||||
Models *models = (Models*)app->cmd_context;
|
||||
|
@ -1673,8 +1703,19 @@ Buffer_Compute_Cursor(Application_Links *app, Buffer_ID buffer, Buffer_Seek seek
|
|||
return(result);
|
||||
}
|
||||
|
||||
API_EXPORT Buffer_Cursor
|
||||
View_Compute_Cursor(Application_Links *app, View_ID view_id, Buffer_Seek seek){
|
||||
Models *models = (Models*)app->cmd_context;
|
||||
View *view = imp_get_view(models, view_id);
|
||||
Buffer_Cursor result = {};
|
||||
if (api_check_view(view)){
|
||||
result = view_compute_cursor(view, seek);
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
API_EXPORT b32
|
||||
View_Set_Cursor(Application_Links *app, View_ID view_id, Buffer_Seek seek, b32 set_preferred_x)
|
||||
View_Set_Cursor(Application_Links *app, View_ID view_id, Buffer_Seek seek)
|
||||
{
|
||||
Models *models = (Models*)app->cmd_context;
|
||||
View *view = imp_get_view(models, view_id);
|
||||
|
@ -1684,14 +1725,7 @@ View_Set_Cursor(Application_Links *app, View_ID view_id, Buffer_Seek seek, b32 s
|
|||
Assert(file != 0);
|
||||
if (api_check_buffer(file)){
|
||||
Buffer_Cursor cursor = file_compute_cursor(file, seek);
|
||||
f32 preferred_x = 0.f;
|
||||
if (!set_preferred_x){
|
||||
preferred_x = view->preferred_x;
|
||||
}
|
||||
view_set_cursor(models, view, cursor.pos);
|
||||
if (!set_preferred_x){
|
||||
view->preferred_x = preferred_x;
|
||||
}
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
|
@ -2403,10 +2437,10 @@ Set_Global_Face(Application_Links *app, Face_ID id, b32 apply_to_all_buffers)
|
|||
Face *face = font_set_face_from_id(&models->font_set, id);
|
||||
if (face != 0){
|
||||
if (apply_to_all_buffers){
|
||||
global_set_font_and_update_files(system, models, id);
|
||||
global_set_font_and_update_files(system, models, face);
|
||||
}
|
||||
else{
|
||||
models->global_font_id = id;
|
||||
models->global_face_id = face->id;
|
||||
}
|
||||
did_change = true;
|
||||
}
|
||||
|
@ -2592,9 +2626,10 @@ Buffer_Set_Face(Application_Links *app, Buffer_ID buffer_id, Face_ID id)
|
|||
|
||||
b32 did_change = false;
|
||||
if (api_check_buffer(file)){
|
||||
if (font_set_face_from_id(&models->font_set, id) != 0){
|
||||
Face *face = font_set_face_from_id(&models->font_set, id);
|
||||
if (face != 0){
|
||||
file->settings.face_id = face->id;
|
||||
did_change = true;
|
||||
file_set_font(models->system, models, file, id);
|
||||
}
|
||||
}
|
||||
return(did_change);
|
||||
|
@ -2641,11 +2676,11 @@ Get_Face_ID(Application_Links *app, Buffer_ID buffer_id)
|
|||
if (buffer_id != 0){
|
||||
Editing_File *file = imp_get_file(models, buffer_id);
|
||||
if (api_check_buffer(file)){
|
||||
result = file->settings.font_id;
|
||||
result = file->settings.face_id;
|
||||
}
|
||||
}
|
||||
else{
|
||||
result = models->global_font_id;
|
||||
result = models->global_face_id;
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
@ -2665,7 +2700,8 @@ Try_Create_New_Face(Application_Links *app, Face_Description *description)
|
|||
result = *(Face_ID*)(coroutine->in);
|
||||
}
|
||||
else{
|
||||
result = font_set_new_face(&models->font_set, description);
|
||||
Face *new_face = font_set_new_face(&models->font_set, description);
|
||||
result = new_face->id;
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
@ -2695,8 +2731,10 @@ API_EXPORT b32
|
|||
Try_Release_Face(Application_Links *app, Face_ID id, Face_ID replacement_id)
|
||||
{
|
||||
Models *models = (Models*)app->cmd_context;
|
||||
b32 success = release_font_and_update_files(models->system, models, id, replacement_id);
|
||||
return(success);
|
||||
Font_Set *font_set = &models->font_set;
|
||||
Face *face = font_set_face_from_id(font_set, id);
|
||||
Face *replacement = font_set_face_from_id(font_set, replacement_id);
|
||||
return(release_font_and_update(models->system, models, face, replacement));
|
||||
}
|
||||
|
||||
API_EXPORT void
|
||||
|
@ -2982,7 +3020,7 @@ Text_Layout_Create(Application_Links *app, Buffer_ID buffer_id, Rect_f32 rect, B
|
|||
if (api_check_buffer(file)){
|
||||
Scratch_Block scratch(app);
|
||||
Arena arena = make_arena_models(models);
|
||||
Face_ID face_id = file->settings.font_id;
|
||||
Face *face = file_get_face(models, file);
|
||||
|
||||
Gap_Buffer *buffer = &file->state.buffer;
|
||||
|
||||
|
@ -2993,7 +3031,7 @@ Text_Layout_Create(Application_Links *app, Buffer_ID buffer_id, Rect_f32 rect, B
|
|||
f32 y = -buffer_point.pixel_shift.y;
|
||||
for (;line_number <= line_count;
|
||||
line_number += 1){
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, dim.x, face_id, line_number);
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, dim.x, face, line_number);
|
||||
f32 next_y = y + line.height;
|
||||
if (next_y >= dim.y){
|
||||
break;
|
||||
|
@ -3049,13 +3087,13 @@ Text_Layout_Line_On_Screen(Application_Links *app, Text_Layout_ID layout_id, i64
|
|||
if (api_check_buffer(file)){
|
||||
Rect_f32 rect = layout->rect;
|
||||
f32 width = rect_width(rect);
|
||||
Face_ID face_id = file->settings.font_id;
|
||||
Face *face = file_get_face(models, file);
|
||||
|
||||
f32 top = 0.f;
|
||||
f32 bot = 0.f;
|
||||
for (i64 line_number_it = layout->visible_line_number_range.first;;
|
||||
line_number_it += 1){
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, face_id, line_number_it);
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, face, line_number_it);
|
||||
bot += line.height;
|
||||
if (line_number_it == line_number){
|
||||
break;
|
||||
|
@ -3090,13 +3128,13 @@ Text_Layout_Character_On_Screen(Application_Links *app, Text_Layout_ID layout_id
|
|||
|
||||
Rect_f32 rect = layout->rect;
|
||||
f32 width = rect_width(rect);
|
||||
Face_ID face_id = file->settings.font_id;
|
||||
Face *face = file_get_face(models, file);
|
||||
|
||||
f32 y = 0.f;
|
||||
Buffer_Layout_Item_List line = {};
|
||||
for (i64 line_number_it = layout->visible_line_number_range.first;;
|
||||
line_number_it += 1){
|
||||
line = file_get_line_layout(models, file, width, face_id, line_number_it);
|
||||
line = file_get_line_layout(models, file, width, face, line_number_it);
|
||||
if (line_number_it == line_number){
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -42,7 +42,7 @@ struct Models{
|
|||
App_Settings settings;
|
||||
App_State state;
|
||||
|
||||
Face_ID global_font_id;
|
||||
Face_ID global_face_id;
|
||||
|
||||
Mapping mapping;
|
||||
Command_Binding prev_command;
|
||||
|
|
|
@ -143,8 +143,7 @@ edit_fix_markers(Models *models, Editing_File *file, Edit edit){
|
|||
buffer_unsort_cursors( cursors, cursor_count);
|
||||
buffer_unsort_cursors(r_cursors, r_cursor_count);
|
||||
|
||||
Face *face = font_set_face_from_id(&models->font_set, file->settings.font_id);
|
||||
Assert(face != 0);
|
||||
Face *face = file_get_face(models, file);
|
||||
|
||||
cursor_count = 0;
|
||||
r_cursor_count = 0;
|
||||
|
|
117
4ed_file.cpp
117
4ed_file.cpp
|
@ -51,6 +51,11 @@ file_edit_positions_pop(Editing_File *file){
|
|||
|
||||
////////////////////////////////
|
||||
|
||||
internal Face*
|
||||
file_get_face(Models *models, Editing_File *file){
|
||||
return(font_set_face_from_id(&models->font_set, file->settings.face_id));
|
||||
}
|
||||
|
||||
internal u32
|
||||
file_get_access_flags(Editing_File *file){
|
||||
u32 flags = 0;
|
||||
|
@ -223,10 +228,7 @@ file_create_from_string(Models *models, Editing_File *file, String_Const_u8 val,
|
|||
file_clear_dirty_flags(file);
|
||||
file->attributes = attributes;
|
||||
|
||||
Face_ID font_id = models->global_font_id;
|
||||
file->settings.font_id = font_id;
|
||||
Face *face = font_set_face_from_id(&models->font_set, font_id);
|
||||
Assert(face != 0);
|
||||
file->settings.face_id = models->global_face_id;
|
||||
|
||||
buffer_measure_starts(scratch, &file->state.buffer);
|
||||
|
||||
|
@ -315,41 +317,36 @@ file_get_managed_scope(Editing_File *file){
|
|||
////////////////////////////////
|
||||
|
||||
internal Buffer_Layout_Item_List
|
||||
file_get_line_layout(Models *models, Editing_File *file, f32 width, Face_ID face_id, i64 line_number){
|
||||
file_get_line_layout(Models *models, Editing_File *file, f32 width, Face *face, i64 line_number){
|
||||
Buffer_Layout_Item_List result = {};
|
||||
|
||||
i64 line_count = buffer_line_count(&file->state.buffer);
|
||||
if (1 <= line_number && line_number <= line_count){
|
||||
// TODO(allen): optimization: most places that CALL this do so in a LOOP, which could HOIST
|
||||
// this font_set_face_from_id call OUTSIDE of the LOOP.
|
||||
Face *face = font_set_face_from_id(&models->font_set, face_id);
|
||||
if (face != 0){
|
||||
Line_Layout_Key key = {};
|
||||
key.face_id = face_id;
|
||||
key.face_version_number = face->version_number;
|
||||
key.width = width;
|
||||
key.line_number = line_number;
|
||||
|
||||
Data key_data = make_data_struct(&key);
|
||||
|
||||
Buffer_Layout_Item_List *list = 0;
|
||||
|
||||
Table_Lookup lookup = table_lookup(&file->state.line_layout_table, key_data);
|
||||
if (lookup.found_match){
|
||||
u64 val = 0;
|
||||
table_read(&file->state.line_layout_table, lookup, &val);
|
||||
list = (Buffer_Layout_Item_List*)IntAsPtr(val);
|
||||
}
|
||||
else{
|
||||
list = push_array(&file->state.cached_layouts_arena, Buffer_Layout_Item_List, 1);
|
||||
Interval_i64 line_range = buffer_get_pos_range_from_line_number(&file->state.buffer, line_number);
|
||||
*list = buffer_layout(&models->mem.arena, &file->state.cached_layouts_arena,
|
||||
&file->state.buffer, line_range, face, width);
|
||||
key_data = push_data_copy(&file->state.cached_layouts_arena, key_data);
|
||||
table_insert(&file->state.line_layout_table, key_data, (u64)PtrAsInt(list));
|
||||
}
|
||||
block_copy_struct(&result, list);
|
||||
Line_Layout_Key key = {};
|
||||
key.face_id = face->id;
|
||||
key.face_version_number = face->version_number;
|
||||
key.width = width;
|
||||
key.line_number = line_number;
|
||||
|
||||
Data key_data = make_data_struct(&key);
|
||||
|
||||
Buffer_Layout_Item_List *list = 0;
|
||||
|
||||
Table_Lookup lookup = table_lookup(&file->state.line_layout_table, key_data);
|
||||
if (lookup.found_match){
|
||||
u64 val = 0;
|
||||
table_read(&file->state.line_layout_table, lookup, &val);
|
||||
list = (Buffer_Layout_Item_List*)IntAsPtr(val);
|
||||
}
|
||||
else{
|
||||
list = push_array(&file->state.cached_layouts_arena, Buffer_Layout_Item_List, 1);
|
||||
Interval_i64 line_range = buffer_get_pos_range_from_line_number(&file->state.buffer, line_number);
|
||||
*list = buffer_layout(&models->mem.arena, &file->state.cached_layouts_arena,
|
||||
&file->state.buffer, line_range, face, width);
|
||||
key_data = push_data_copy(&file->state.cached_layouts_arena, key_data);
|
||||
table_insert(&file->state.line_layout_table, key_data, (u64)PtrAsInt(list));
|
||||
}
|
||||
block_copy_struct(&result, list);
|
||||
}
|
||||
|
||||
return(result);
|
||||
|
@ -362,7 +359,7 @@ file_clear_layout_cache(Editing_File *file){
|
|||
}
|
||||
|
||||
internal Line_Shift_Vertical
|
||||
file_line_shift_y(Models *models, Editing_File *file, f32 width, Face_ID face_id, i64 line_number, f32 y_delta){
|
||||
file_line_shift_y(Models *models, Editing_File *file, f32 width, Face *face, i64 line_number, f32 y_delta){
|
||||
Line_Shift_Vertical result = {};
|
||||
|
||||
f32 line_y = 0.f;
|
||||
|
@ -382,7 +379,7 @@ file_line_shift_y(Models *models, Editing_File *file, f32 width, Face_ID face_id
|
|||
line_number = 1;
|
||||
break;
|
||||
}
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, face_id, line_number);
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, face, line_number);
|
||||
line_y -= line.height;
|
||||
}
|
||||
if (!has_result){
|
||||
|
@ -395,7 +392,7 @@ file_line_shift_y(Models *models, Editing_File *file, f32 width, Face_ID face_id
|
|||
b32 has_result = false;
|
||||
i64 line_count = buffer_line_count(&file->state.buffer);
|
||||
for (;;line_number += 1){
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, face_id, line_number);
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, face, line_number);
|
||||
f32 next_y = line_y + line.height;
|
||||
if (y_delta < next_y){
|
||||
has_result = true;
|
||||
|
@ -418,12 +415,12 @@ file_line_shift_y(Models *models, Editing_File *file, f32 width, Face_ID face_id
|
|||
}
|
||||
|
||||
internal f32
|
||||
file_line_y_difference(Models *models, Editing_File *file, f32 width, Face_ID face_id, i64 line_a, i64 line_b){
|
||||
file_line_y_difference(Models *models, Editing_File *file, f32 width, Face *face, i64 line_a, i64 line_b){
|
||||
f32 result = 0.f;
|
||||
if (line_a != line_b){
|
||||
Interval_i64 line_range = Ii64(line_a, line_b);
|
||||
for (i64 i = line_range.min; i < line_range.max; i += 1){
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, face_id, i);
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, face, i);
|
||||
result += line.height;
|
||||
}
|
||||
if (line_a < line_b){
|
||||
|
@ -434,25 +431,25 @@ file_line_y_difference(Models *models, Editing_File *file, f32 width, Face_ID fa
|
|||
}
|
||||
|
||||
internal i64
|
||||
file_pos_at_relative_xy(Models *models, Editing_File *file, f32 width, Face_ID face_id, i64 base_line, Vec2_f32 relative_xy){
|
||||
Line_Shift_Vertical shift = file_line_shift_y(models, file, width, face_id, base_line, relative_xy.y);
|
||||
file_pos_at_relative_xy(Models *models, Editing_File *file, f32 width, Face *face, i64 base_line, Vec2_f32 relative_xy){
|
||||
Line_Shift_Vertical shift = file_line_shift_y(models, file, width, face, base_line, relative_xy.y);
|
||||
relative_xy.y -= shift.y_delta;
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, face_id, shift.line);
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, face, shift.line);
|
||||
return(buffer_layout_nearest_pos_to_xy(line, relative_xy));
|
||||
}
|
||||
|
||||
internal Vec2_f32
|
||||
file_relative_xy_of_pos(Models *models, Editing_File *file, f32 width, Face_ID face_id, i64 base_line, i64 pos){
|
||||
file_relative_xy_of_pos(Models *models, Editing_File *file, f32 width, Face *face, i64 base_line, i64 pos){
|
||||
i64 line_number = buffer_get_line_index(&file->state.buffer, pos) + 1;
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, face_id, line_number);
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, face, line_number);
|
||||
Vec2_f32 result = buffer_layout_xy_center_of_pos(line, pos);
|
||||
result.y += file_line_y_difference(models, file, width, face_id, line_number, base_line);
|
||||
result.y += file_line_y_difference(models, file, width, face, line_number, base_line);
|
||||
return(result);
|
||||
}
|
||||
|
||||
internal Buffer_Point
|
||||
file_normalize_buffer_point(Models *models, Editing_File *file, f32 width, Face_ID face_id, Buffer_Point point){
|
||||
Line_Shift_Vertical shift = file_line_shift_y(models, file, width, face_id, point.line_number, point.pixel_shift.y);
|
||||
file_normalize_buffer_point(Models *models, Editing_File *file, f32 width, Face *face, Buffer_Point point){
|
||||
Line_Shift_Vertical shift = file_line_shift_y(models, file, width, face, point.line_number, point.pixel_shift.y);
|
||||
point.line_number = shift.line;
|
||||
point.pixel_shift.y -= shift.y_delta;
|
||||
point.pixel_shift.x = clamp_bot(0.f, point.pixel_shift.x);
|
||||
|
@ -461,15 +458,15 @@ file_normalize_buffer_point(Models *models, Editing_File *file, f32 width, Face_
|
|||
}
|
||||
|
||||
internal Vec2_f32
|
||||
file_buffer_point_difference(Models *models, Editing_File *file, f32 width, Face_ID face_id, Buffer_Point a, Buffer_Point b){
|
||||
f32 y_difference = file_line_y_difference(models, file, width, face_id, a.line_number, b.line_number);
|
||||
file_buffer_point_difference(Models *models, Editing_File *file, f32 width, Face *face, Buffer_Point a, Buffer_Point b){
|
||||
f32 y_difference = file_line_y_difference(models, file, width, face, a.line_number, b.line_number);
|
||||
Vec2_f32 result = a.pixel_shift - b.pixel_shift;
|
||||
result.y += y_difference;
|
||||
return(result);
|
||||
}
|
||||
|
||||
internal Line_Shift_Character
|
||||
file_line_shift_characters(Models *models, Editing_File *file, f32 width, Face_ID face_id, i64 line_number, i64 character_delta){
|
||||
file_line_shift_characters(Models *models, Editing_File *file, f32 width, Face *face, i64 line_number, i64 character_delta){
|
||||
Line_Shift_Character result = {};
|
||||
|
||||
i64 line_character = 0;
|
||||
|
@ -489,7 +486,7 @@ file_line_shift_characters(Models *models, Editing_File *file, f32 width, Face_I
|
|||
line_number = 1;
|
||||
break;
|
||||
}
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, face_id, line_number);
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, face, line_number);
|
||||
line_character -= line.character_count;
|
||||
}
|
||||
if (!has_result){
|
||||
|
@ -502,7 +499,7 @@ file_line_shift_characters(Models *models, Editing_File *file, f32 width, Face_I
|
|||
b32 has_result = false;
|
||||
i64 line_count = buffer_line_count(&file->state.buffer);
|
||||
for (;;line_number += 1){
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, face_id, line_number);
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, face, line_number);
|
||||
i64 next_character = line_character + line.character_count;
|
||||
if (character_delta < next_character){
|
||||
has_result = true;
|
||||
|
@ -525,12 +522,12 @@ file_line_shift_characters(Models *models, Editing_File *file, f32 width, Face_I
|
|||
}
|
||||
|
||||
internal i64
|
||||
file_line_character_difference(Models *models, Editing_File *file, f32 width, Face_ID face_id, i64 line_a, i64 line_b){
|
||||
file_line_character_difference(Models *models, Editing_File *file, f32 width, Face *face, i64 line_a, i64 line_b){
|
||||
i64 result = 0;
|
||||
if (line_a != line_b){
|
||||
Interval_i64 line_range = Ii64(line_a, line_b);
|
||||
for (i64 i = line_range.min; i < line_range.max; i += 1){
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, face_id, i);
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, face, i);
|
||||
result += line.character_count;
|
||||
}
|
||||
if (line_a < line_b){
|
||||
|
@ -541,19 +538,19 @@ file_line_character_difference(Models *models, Editing_File *file, f32 width, Fa
|
|||
}
|
||||
|
||||
internal i64
|
||||
file_pos_from_relative_character(Models *models, Editing_File *file, f32 width, Face_ID face_id, i64 base_line, i64 relative_character){
|
||||
Line_Shift_Character shift = file_line_shift_characters(models, file, width, face_id, base_line, relative_character);
|
||||
file_pos_from_relative_character(Models *models, Editing_File *file, f32 width, Face *face, i64 base_line, i64 relative_character){
|
||||
Line_Shift_Character shift = file_line_shift_characters(models, file, width, face, base_line, relative_character);
|
||||
relative_character -= shift.character_delta;
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, face_id, shift.line);
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, face, shift.line);
|
||||
return(buffer_layout_get_pos_at_character(line, relative_character));
|
||||
}
|
||||
|
||||
internal i64
|
||||
file_relative_character_from_pos(Models *models, Editing_File *file, f32 width, Face_ID face_id, i64 base_line, i64 pos){
|
||||
file_relative_character_from_pos(Models *models, Editing_File *file, f32 width, Face *face, i64 base_line, i64 pos){
|
||||
i64 line_number = buffer_get_line_index(&file->state.buffer, pos) + 1;
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, face_id, line_number);
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, face, line_number);
|
||||
i64 result = buffer_layout_character_from_pos(line, pos);
|
||||
result += file_line_character_difference(models, file, width, face_id, line_number, base_line);
|
||||
result += file_line_character_difference(models, file, width, face, line_number, base_line);
|
||||
return(result);
|
||||
}
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ struct Editing_File_Settings{
|
|||
i32 base_map_id;
|
||||
Parse_Context_ID parse_context_id;
|
||||
b32 dos_write_mode;
|
||||
Face_ID font_id;
|
||||
Face_ID face_id;
|
||||
b8 tokens_exist;
|
||||
b8 tokens_without_strings;
|
||||
b8 is_initialized;
|
||||
|
|
|
@ -75,23 +75,22 @@ font_set_init(System_Functions *system, Font_Set *set){
|
|||
set->id_to_slot_table = make_table_u64_u64(set->arena.base_allocator, 40);
|
||||
}
|
||||
|
||||
internal Face_ID
|
||||
internal Face*
|
||||
font_set_new_face(Font_Set *set, Face_Description *description){
|
||||
Face_ID result = 0;
|
||||
Arena arena = make_arena_system(set->system);
|
||||
Face *face = set->system->font_make_face(&arena, description);
|
||||
if (face != 0){
|
||||
Font_Face_Slot *slot = font_set__alloc_face_slot(set);
|
||||
slot->arena = arena;
|
||||
slot->face = face;
|
||||
result = font_set__alloc_face_id(set);
|
||||
face->id = result;
|
||||
table_insert(&set->id_to_slot_table, result, (u64)slot);
|
||||
Face_ID new_id = font_set__alloc_face_id(set);
|
||||
face->id = new_id;
|
||||
table_insert(&set->id_to_slot_table, new_id, (u64)slot);
|
||||
}
|
||||
else{
|
||||
linalloc_clear(&arena);
|
||||
}
|
||||
return(result);
|
||||
return(face);
|
||||
}
|
||||
|
||||
internal Font_Face_Slot*
|
||||
|
|
|
@ -226,14 +226,6 @@ draw_font_glyph(Render_Target *target, Face *face, u32 codepoint, f32 x, f32 y,
|
|||
draw__write_vertices_in_current_group(target, vertices, 6);
|
||||
}
|
||||
|
||||
internal void
|
||||
draw_font_glyph(Render_Target *target, Font_Set *font_set, Face_ID face_id, u32 codepoint, f32 x, f32 y, u32 color, u32 flags){
|
||||
Face *face = font_set_face_from_id(font_set, face_id);
|
||||
if (face != 0){
|
||||
draw_font_glyph(target, face, codepoint, x, y, color, flags);
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
internal void
|
||||
|
|
|
@ -88,8 +88,7 @@ text_layout_render(Models *models, Text_Layout *layout){
|
|||
Arena *scratch = &models->mem.arena;
|
||||
Render_Target *target = models->target;
|
||||
Color_Table color_table = models->color_table;
|
||||
Font_Set *font_set = &models->font_set;
|
||||
Face_ID font_id = file->settings.font_id;
|
||||
Face *face = file_get_face(models, file);
|
||||
f32 width = rect_width(layout->rect);
|
||||
|
||||
u32 special_color = color_table.vals[Stag_Special_Character];
|
||||
|
@ -100,7 +99,7 @@ text_layout_render(Models *models, Text_Layout *layout){
|
|||
i64 line_number = layout->visible_line_number_range.min;
|
||||
i64 line_number_last = layout->visible_line_number_range.max;
|
||||
for (;line_number <= line_number_last; line_number += 1){
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, font_id, line_number);
|
||||
Buffer_Layout_Item_List line = file_get_line_layout(models, file, width, face, line_number);
|
||||
for (Buffer_Layout_Item_Block *block = line.first;
|
||||
block != 0;
|
||||
block = block->next){
|
||||
|
@ -127,7 +126,7 @@ text_layout_render(Models *models, Text_Layout *layout){
|
|||
}
|
||||
|
||||
Vec2_f32 p = item->rect.p0 + shift_p;
|
||||
draw_font_glyph(target, font_set, font_id, item->codepoint, p.x, p.y, color, GlyphFlag_None);
|
||||
draw_font_glyph(target, face, item->codepoint, p.x, p.y, color, GlyphFlag_None);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
86
4ed_view.cpp
86
4ed_view.cpp
|
@ -123,7 +123,7 @@ view_height(Models *models, View *view){
|
|||
internal Buffer_Layout_Item_List
|
||||
view_get_line_layout(Models *models, View *view, i64 line_number){
|
||||
Editing_File *file = view->file;
|
||||
Face_ID face = file->settings.font_id;
|
||||
Face *face = file_get_face(models, file);
|
||||
f32 width = view_width(models, view);
|
||||
return(file_get_line_layout(models, file, width, face, line_number));
|
||||
}
|
||||
|
@ -131,7 +131,7 @@ view_get_line_layout(Models *models, View *view, i64 line_number){
|
|||
internal Line_Shift_Vertical
|
||||
view_line_shift_y(Models *models, View *view, i64 line_number, f32 y_delta){
|
||||
Editing_File *file = view->file;
|
||||
Face_ID face = file->settings.font_id;
|
||||
Face *face = file_get_face(models, file);
|
||||
f32 width = view_width(models, view);
|
||||
return(file_line_shift_y(models, file, width, face, line_number, y_delta));
|
||||
}
|
||||
|
@ -139,7 +139,7 @@ view_line_shift_y(Models *models, View *view, i64 line_number, f32 y_delta){
|
|||
internal f32
|
||||
view_line_y_difference(Models *models, View *view, i64 line_a, i64 line_b){
|
||||
Editing_File *file = view->file;
|
||||
Face_ID face = file->settings.font_id;
|
||||
Face *face = file_get_face(models, file);
|
||||
f32 width = view_width(models, view);
|
||||
return(file_line_y_difference(models, file, width, face, line_a, line_b));
|
||||
}
|
||||
|
@ -147,7 +147,7 @@ view_line_y_difference(Models *models, View *view, i64 line_a, i64 line_b){
|
|||
internal i64
|
||||
view_pos_at_relative_xy(Models *models, View *view, i64 base_line, Vec2_f32 relative_xy){
|
||||
Editing_File *file = view->file;
|
||||
Face_ID face = file->settings.font_id;
|
||||
Face *face = file_get_face(models, file);
|
||||
f32 width = view_width(models, view);
|
||||
return(file_pos_at_relative_xy(models, file, width, face, base_line, relative_xy));
|
||||
}
|
||||
|
@ -155,7 +155,7 @@ view_pos_at_relative_xy(Models *models, View *view, i64 base_line, Vec2_f32 rela
|
|||
internal Vec2_f32
|
||||
view_relative_xy_of_pos(Models *models, View *view, i64 base_line, i64 pos){
|
||||
Editing_File *file = view->file;
|
||||
Face_ID face = file->settings.font_id;
|
||||
Face *face = file_get_face(models, file);
|
||||
f32 width = view_width(models, view);
|
||||
return(file_relative_xy_of_pos(models, file, width, face, base_line, pos));
|
||||
}
|
||||
|
@ -163,7 +163,7 @@ view_relative_xy_of_pos(Models *models, View *view, i64 base_line, i64 pos){
|
|||
internal Buffer_Point
|
||||
view_normalize_buffer_point(Models *models, View *view, Buffer_Point point){
|
||||
Editing_File *file = view->file;
|
||||
Face_ID face = file->settings.font_id;
|
||||
Face *face = file_get_face(models, file);
|
||||
f32 width = view_width(models, view);
|
||||
return(file_normalize_buffer_point(models, file, width, face, point));
|
||||
}
|
||||
|
@ -171,7 +171,7 @@ view_normalize_buffer_point(Models *models, View *view, Buffer_Point point){
|
|||
internal Vec2_f32
|
||||
view_buffer_point_difference(Models *models, View *view, Buffer_Point a, Buffer_Point b){
|
||||
Editing_File *file = view->file;
|
||||
Face_ID face = file->settings.font_id;
|
||||
Face *face = file_get_face(models, file);
|
||||
f32 width = view_width(models, view);
|
||||
return(file_buffer_point_difference(models, file, width, face, a, b));
|
||||
}
|
||||
|
@ -188,7 +188,7 @@ view_move_buffer_point(Models *models, View *view, Buffer_Point buffer_point, Ve
|
|||
internal Line_Shift_Character
|
||||
view_line_shift_characters(Models *models, View *view, i64 line_number, i64 character_delta){
|
||||
Editing_File *file = view->file;
|
||||
Face_ID face = file->settings.font_id;
|
||||
Face *face = file_get_face(models, file);
|
||||
f32 width = view_width(models, view);
|
||||
return(file_line_shift_characters(models, file, width, face, line_number, character_delta));
|
||||
}
|
||||
|
@ -196,7 +196,7 @@ view_line_shift_characters(Models *models, View *view, i64 line_number, i64 char
|
|||
internal i64
|
||||
view_line_character_difference(Models *models, View *view, i64 line_a, i64 line_b){
|
||||
Editing_File *file = view->file;
|
||||
Face_ID face = file->settings.font_id;
|
||||
Face *face = file_get_face(models, file);
|
||||
f32 width = view_width(models, view);
|
||||
return(file_line_character_difference(models, file, width, face, line_a, line_b));
|
||||
}
|
||||
|
@ -204,7 +204,7 @@ view_line_character_difference(Models *models, View *view, i64 line_a, i64 line_
|
|||
internal i64
|
||||
view_pos_from_relative_character(Models *models, View *view, i64 base_line, i64 relative_character){
|
||||
Editing_File *file = view->file;
|
||||
Face_ID face = file->settings.font_id;
|
||||
Face *face = file_get_face(models, file);
|
||||
f32 width = view_width(models, view);
|
||||
return(file_pos_from_relative_character(models, file, width, face, base_line, relative_character));
|
||||
}
|
||||
|
@ -212,11 +212,17 @@ view_pos_from_relative_character(Models *models, View *view, i64 base_line, i64
|
|||
internal i64
|
||||
view_relative_character_from_pos(Models *models, View *view, i64 base_line, i64 pos){
|
||||
Editing_File *file = view->file;
|
||||
Face_ID face = file->settings.font_id;
|
||||
Face *face = file_get_face(models, file);
|
||||
f32 width = view_width(models, view);
|
||||
return(file_relative_character_from_pos(models, file, width, face, base_line, pos));
|
||||
}
|
||||
|
||||
internal Buffer_Cursor
|
||||
view_compute_cursor(View *view, Buffer_Seek seek){
|
||||
Editing_File *file = view->file;
|
||||
return(file_compute_cursor(file, seek));
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
internal Interval_f32
|
||||
|
@ -247,16 +253,15 @@ view_safety_margin(f32 view_width, f32 acceptable_y_height, f32 line_height, f32
|
|||
internal b32
|
||||
view_move_view_to_cursor(Models *models, View *view, Buffer_Scroll *scroll){
|
||||
Editing_File *file = view->file;
|
||||
Face_ID face_id = file->settings.font_id;
|
||||
Face *face = file_get_face(models, file);
|
||||
Rect_f32 rect = view_get_buffer_rect(models, view);
|
||||
Vec2_f32 view_dim = rect_dim(rect);
|
||||
|
||||
File_Edit_Positions edit_pos = view_get_edit_pos(view);
|
||||
Vec2_f32 p = file_relative_xy_of_pos(models, file, view_dim.x, face_id, scroll->target.line_number,
|
||||
Vec2_f32 p = file_relative_xy_of_pos(models, file, view_dim.x, face, scroll->target.line_number,
|
||||
edit_pos.cursor_pos);
|
||||
p -= scroll->target.pixel_shift;
|
||||
|
||||
Face *face = font_set_face_from_id(&models->font_set, face_id);
|
||||
f32 line_height = face->height;
|
||||
f32 typical_advance = face->typical_advance;
|
||||
Interval_f32 acceptable_y = view_acceptable_y(view_dim.y, line_height);
|
||||
|
@ -286,14 +291,13 @@ view_move_view_to_cursor(Models *models, View *view, Buffer_Scroll *scroll){
|
|||
internal b32
|
||||
view_move_cursor_to_view(Models *models, View *view, Buffer_Scroll scroll, i64 *pos_in_out, f32 preferred_x){
|
||||
Editing_File *file = view->file;
|
||||
Face_ID face_id = file->settings.font_id;
|
||||
Face *face = file_get_face(models, file);
|
||||
Rect_f32 rect = view_get_buffer_rect(models, view);
|
||||
Vec2_f32 view_dim = rect_dim(rect);
|
||||
|
||||
Vec2_f32 p = file_relative_xy_of_pos(models, file, view_dim.x, face_id, scroll.target.line_number, *pos_in_out);
|
||||
Vec2_f32 p = file_relative_xy_of_pos(models, file, view_dim.x, face, scroll.target.line_number, *pos_in_out);
|
||||
p -= scroll.target.pixel_shift;
|
||||
|
||||
Face *face = font_set_face_from_id(&models->font_set, face_id);
|
||||
f32 line_height = face->height;
|
||||
Interval_f32 acceptable_y = view_acceptable_y(view_dim.y, line_height);
|
||||
Vec2_f32 safety = view_safety_margin(view_dim.x, range_size(acceptable_y),
|
||||
|
@ -313,28 +317,17 @@ view_move_cursor_to_view(Models *models, View *view, Buffer_Scroll scroll, i64 *
|
|||
b32 result = false;
|
||||
if (adjusted_y){
|
||||
p += scroll.target.pixel_shift;
|
||||
*pos_in_out = file_pos_at_relative_xy(models, file, view_dim.x, face_id, scroll.target.line_number, p);
|
||||
*pos_in_out = file_pos_at_relative_xy(models, file, view_dim.x, face, scroll.target.line_number, p);
|
||||
result = true;
|
||||
}
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
internal void
|
||||
view_set_preferred_x_to_current_position(Models *models, View *view){
|
||||
view->preferred_x = 0.f;
|
||||
#if 0
|
||||
File_Edit_Positions edit_pos = view_get_edit_pos(view);
|
||||
Full_Cursor cursor = file_compute_cursor(models, view->file, seek_pos(edit_pos.cursor_pos));
|
||||
view_set_preferred_x(view, cursor);
|
||||
#endif
|
||||
}
|
||||
|
||||
internal void
|
||||
view_set_cursor(Models *models, View *view, i64 pos){
|
||||
File_Edit_Positions edit_pos = view_get_edit_pos(view);
|
||||
file_edit_positions_set_cursor(&edit_pos, pos);
|
||||
view->preferred_x = 0.f;
|
||||
view_set_edit_pos(view, edit_pos);
|
||||
Buffer_Scroll scroll = edit_pos.scroll;
|
||||
if (view_move_view_to_cursor(models, view, &scroll)){
|
||||
|
@ -390,10 +383,9 @@ view_set_file(System_Functions *system, Models *models, View *view, Editing_File
|
|||
File_Edit_Positions edit_pos = file_edit_positions_pop(file);
|
||||
view_set_edit_pos(view, edit_pos);
|
||||
view->mark = edit_pos.cursor_pos;
|
||||
view_set_preferred_x_to_current_position(models, view);
|
||||
|
||||
Face *face = font_set_face_from_id(&models->font_set, file->settings.font_id);
|
||||
Assert(face != 0);
|
||||
Buffer_Cursor cursor = view_compute_cursor(view, seek_pos(edit_pos.cursor_pos));
|
||||
Vec2_f32 p = view_relative_xy_of_pos(models, view, cursor.line, edit_pos.cursor_pos);
|
||||
view->preferred_x = p.x;
|
||||
|
||||
models->layout.panel_state_dirty = true;
|
||||
}
|
||||
|
@ -430,38 +422,32 @@ adjust_views_looking_at_file_to_new_cursor(System_Functions *system, Models *mod
|
|||
}
|
||||
|
||||
internal void
|
||||
file_set_font(System_Functions *system, Models *models, Editing_File *file, Face_ID font_id){
|
||||
file->settings.font_id = font_id;
|
||||
}
|
||||
|
||||
internal void
|
||||
global_set_font_and_update_files(System_Functions *system, Models *models, Face_ID font_id){
|
||||
global_set_font_and_update_files(System_Functions *system, Models *models, Face *new_global_face){
|
||||
for (Node *node = models->working_set.active_file_sentinel.next;
|
||||
node != &models->working_set.active_file_sentinel;
|
||||
node = node->next){
|
||||
Editing_File *file = CastFromMember(Editing_File, main_chain_node, node);
|
||||
file_set_font(system, models, file, font_id);
|
||||
file->settings.face_id = new_global_face->id;
|
||||
}
|
||||
models->global_font_id = font_id;
|
||||
models->global_face_id = new_global_face->id;
|
||||
}
|
||||
|
||||
internal b32
|
||||
release_font_and_update_files(System_Functions *system, Models *models, Face_ID font_id, Face_ID replacement_id){
|
||||
release_font_and_update(System_Functions *system, Models *models, Face *face, Face *replacement_face){
|
||||
b32 success = false;
|
||||
if (font_set_release_face(&models->font_set, font_id)){
|
||||
Face *face = font_set_face_from_id(&models->font_set, replacement_id);
|
||||
if (face == 0){
|
||||
replacement_id = font_set_get_fallback_face(&models->font_set);
|
||||
Assert(font_set_face_from_id(&models->font_set, replacement_id) != 0);
|
||||
}
|
||||
Assert(replacement_face != 0 && replacement_face != face);
|
||||
if (font_set_release_face(&models->font_set, face->id)){
|
||||
for (Node *node = models->working_set.active_file_sentinel.next;
|
||||
node != &models->working_set.active_file_sentinel;
|
||||
node = node->next){
|
||||
Editing_File *file = CastFromMember(Editing_File, main_chain_node, node);
|
||||
if (file->settings.font_id == font_id){
|
||||
file_set_font(system, models, file, replacement_id);
|
||||
if (file->settings.face_id == face->id){
|
||||
file->settings.face_id = replacement_face->id;
|
||||
}
|
||||
}
|
||||
if (models->global_face_id == face->id){
|
||||
models->global_face_id = replacement_face->id;
|
||||
}
|
||||
success = true;
|
||||
}
|
||||
return(success);
|
||||
|
|
80
4ed_view.h
80
4ed_view.h
|
@ -13,8 +13,8 @@
|
|||
#define FRED_VIEW_H
|
||||
|
||||
struct View{
|
||||
struct View *next;
|
||||
struct View *prev;
|
||||
View *next;
|
||||
View *prev;
|
||||
struct Panel *panel;
|
||||
b32 in_use;
|
||||
|
||||
|
@ -25,10 +25,6 @@ struct View{
|
|||
i64 mark;
|
||||
f32 preferred_x;
|
||||
|
||||
// TODO(allen): ELIMINATE THESE
|
||||
i32 temp_view_top_left_pos;
|
||||
i32 temp_view_top_left_target_pos;
|
||||
|
||||
b8 new_scroll_target;
|
||||
|
||||
b8 ui_mode;
|
||||
|
@ -52,78 +48,6 @@ struct Live_Views{
|
|||
i32 max;
|
||||
};
|
||||
|
||||
enum{
|
||||
GROW_FAILED,
|
||||
GROW_NOT_NEEDED,
|
||||
GROW_SUCCESS,
|
||||
};
|
||||
|
||||
struct Wrap_Indent_Pair{
|
||||
i32 wrap_position;
|
||||
f32 line_shift;
|
||||
};
|
||||
|
||||
struct Potential_Wrap_Indent_Pair{
|
||||
i32 wrap_position;
|
||||
f32 line_shift;
|
||||
|
||||
f32 wrap_x;
|
||||
i32 wrappable_score;
|
||||
|
||||
b32 adjust_top_to_this;
|
||||
};
|
||||
|
||||
struct Shift_Information{
|
||||
i32 start;
|
||||
i32 end;
|
||||
i32 amount;
|
||||
};
|
||||
|
||||
struct File_Bar{
|
||||
Vec2 pos;
|
||||
Vec2 text_shift;
|
||||
i32_Rect rect;
|
||||
Face_ID font_id;
|
||||
};
|
||||
|
||||
#if 0
|
||||
struct Style_Color_Edit{
|
||||
Style_Tag target;
|
||||
Style_Tag fore;
|
||||
Style_Tag back;
|
||||
String_Const_u8 text;
|
||||
};
|
||||
#endif
|
||||
|
||||
struct Single_Line_Input_Step{
|
||||
b8 hit_newline;
|
||||
b8 hit_ctrl_newline;
|
||||
b8 hit_a_character;
|
||||
b8 hit_backspace;
|
||||
b8 hit_esc;
|
||||
b8 made_a_change;
|
||||
b8 did_command;
|
||||
b8 no_file_match;
|
||||
};
|
||||
|
||||
enum Single_Line_Input_Type{
|
||||
SINGLE_LINE_STRING,
|
||||
SINGLE_LINE_FILE
|
||||
};
|
||||
|
||||
struct Single_Line_Mode{
|
||||
Single_Line_Input_Type type;
|
||||
String_Const_u8 *string;
|
||||
Hot_Directory *hot_directory;
|
||||
b32 fast_folder_select;
|
||||
};
|
||||
|
||||
struct View_Step_Result{
|
||||
b32 animating;
|
||||
b32 consume_keys;
|
||||
b32 consume_esc;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
// BOTTOM
|
||||
|
|
Loading…
Reference in New Issue