Remove View_Summary from core API

This commit is contained in:
Allen Webster 2019-04-05 14:56:58 -07:00
parent 18b755c626
commit 3911eb2197
9 changed files with 188 additions and 144 deletions

View File

@ -646,41 +646,6 @@ STRUCT Marker{
}; };
/* DOC(View_Summary acts as a handle to a view and describes the state of the view.)
DOC_SEE(Access_Flag)
DOC_SEE(Full_Cursor)
DOC_SEE(GUI_Scroll_Vars) */
STRUCT View_Summary{
/* DOC(This field indicates whether the View_Summary describes a view that is open in 4coder. When this field is false the summary is referred to as a "null summary". ) */
b32 exists;
/* DOC(This field is the id of the associated view. If this is a null summary then view_id is 0. ) */
i32 view_id;
/* DOC(Then this is the id of the buffer this view currently sees.) */
i32 buffer_id;
/* DOC(This field contains flags describing the protection status of the view.) */
Access_Flag lock_flags;
/* DOC(This describes the position of the cursor.) */
Full_Cursor cursor;
/* DOC(This describes the position of the mark.) */
Full_Cursor mark;
/* DOC(This is the x position that is maintained in vertical navigation.) */
float preferred_x;
/* DOC(This specifies the height of a line rendered in the view.) */
float line_height;
/* DOC(This indicates that the view is set to render with unwrapped lines.) */
b32 unwrapped_lines;
/* DOC(This indicates that the view is set to highlight white space.) */
b32 show_whitespace;
/* DOC(This describes the screen position in which this view is displayed.) */
i32_Rect view_region;
/* DOC(TODO) */
i32_Rect render_region;
/* DOC(This describes the scrolling position inside the view.) */
GUI_Scroll_Vars scroll_vars;
};
/* DOC(The enumeration of types of managed objects.) */ /* DOC(The enumeration of types of managed objects.) */
ENUM(i32, Managed_Object_Type) ENUM(i32, Managed_Object_Type)
{ {
@ -830,8 +795,8 @@ STRUCT Query_Bar_Ptr_Array{
i32 count; i32 count;
}; };
TYPEDEF_FUNC void UI_Quit_Function_Type(struct Application_Links *app, View_Summary view); TYPEDEF_FUNC void UI_Quit_Function_Type(struct Application_Links *app, View_ID view);
#define UI_QUIT_FUNCTION(name) void name(struct Application_Links *app, View_Summary view) #define UI_QUIT_FUNCTION(name) void name(struct Application_Links *app, View_ID view)
/* /*
DOC(Theme_Color stores a style tag/color pair, for the purpose of setting and getting colors in the theme.) DOC(Theme_Color stores a style tag/color pair, for the purpose of setting and getting colors in the theme.)

View File

@ -57,6 +57,42 @@ get_buffer_summary(Application_Links *app, Buffer_ID buffer_id, Access_Flag acce
return(result); return(result);
} }
static b32
get_view_summary(Application_Links *app, View_ID view_id, Access_Flag access, View_Summary *view){
b32 result = false;
if (view_exists(app, view_id)){
Buffer_ID buffer = 0;
if (view_get_buffer(app, view_id, access, &buffer)){
result = true;
Face_ID face_id = 0;
get_face_id(app, buffer, &face_id);
Face_Metrics metrics = {};
get_face_metrics(app, face_id, &metrics);
view->exists = true;
view->view_id = view_id;
view->line_height = metrics.line_height;
buffer_get_setting(app, buffer, BufferSetting_WrapLine, &view->unwrapped_lines);
view->unwrapped_lines = !view->unwrapped_lines;
view_get_setting(app, view_id, ViewSetting_ShowWhitespace, &view->show_whitespace);
view->buffer_id = buffer;
i32 pos = 0;
view_get_mark_pos(app, view_id, &pos);
view_compute_cursor(app, view_id, seek_pos(pos), &view->mark);
view_get_cursor_pos(app, view_id, &pos);
view_compute_cursor(app, view_id, seek_pos(pos), &view->cursor);
view_get_preferred_x(app, view_id, &view->preferred_x);
Rect_f32 screen_rect = {};
view_get_screen_rect(app, view_id, &screen_rect);
view->view_region = screen_rect;
view->render_region = f32R(0.f, 0.f, rect_width(screen_rect), rect_height(screen_rect));
view_get_scroll_vars(app, view_id, &view->scroll_vars);
}
}
return(result);
}
static b32 static b32
exec_system_command(Application_Links *app, View_Summary *view, Buffer_Identifier buffer_id, exec_system_command(Application_Links *app, View_Summary *view, Buffer_Identifier buffer_id,
char *path, int32_t path_len, char *command, i32 command_len, Command_Line_Interface_Flag flags){ char *path, int32_t path_len, char *command, i32 command_len, Command_Line_Interface_Flag flags){

View File

@ -65,6 +65,41 @@ STRUCT Buffer_Summary{
b32 unwrapped_lines; b32 unwrapped_lines;
}; };
/* DOC(View_Summary acts as a handle to a view and describes the state of the view.)
DOC_SEE(Access_Flag)
DOC_SEE(Full_Cursor)
DOC_SEE(GUI_Scroll_Vars) */
STRUCT View_Summary{
/* DOC(This field indicates whether the View_Summary describes a view that is open in 4coder. When this field is false the summary is referred to as a "null summary". ) */
b32 exists;
/* DOC(This field is the id of the associated view. If this is a null summary then view_id is 0. ) */
i32 view_id;
/* DOC(Then this is the id of the buffer this view currently sees.) */
i32 buffer_id;
/* DOC(This field contains flags describing the protection status of the view.) */
Access_Flag lock_flags;
/* DOC(This describes the position of the cursor.) */
Full_Cursor cursor;
/* DOC(This describes the position of the mark.) */
Full_Cursor mark;
/* DOC(This is the x position that is maintained in vertical navigation.) */
f32 preferred_x;
/* DOC(This specifies the height of a line rendered in the view.) */
f32 line_height;
/* DOC(This indicates that the view is set to render with unwrapped lines.) */
b32 unwrapped_lines;
/* DOC(This indicates that the view is set to highlight white space.) */
b32 show_whitespace;
/* DOC(This describes the screen position in which this view is displayed.) */
Rect_f32 view_region;
/* DOC(TODO) */
Rect_f32 render_region;
/* DOC(This describes the scrolling position inside the view.) */
GUI_Scroll_Vars scroll_vars;
};
#endif #endif
// BOTTOM // BOTTOM

View File

@ -377,7 +377,7 @@ default_buffer_render_caller(Application_Links *app, Frame_Info frame_info, View
} }
{ {
Rect_f32 r_cursor = f32R(view.render_region); Rect_f32 r_cursor = view.render_region;
// NOTE(allen): Filebar // NOTE(allen): Filebar
{ {
@ -724,7 +724,7 @@ default_buffer_render_caller(Application_Links *app, Frame_Info frame_info, View
history_animation_dt[wrapped_index] = frame_info.animation_dt; history_animation_dt[wrapped_index] = frame_info.animation_dt;
history_frame_index[wrapped_index] = frame_info.index; history_frame_index[wrapped_index] = frame_info.index;
Rect_f32 hud_rect = f32R(view.render_region); Rect_f32 hud_rect = view.render_region;
hud_rect.y0 = hud_rect.y1 - view.line_height*(f32)(history_depth); hud_rect.y0 = hud_rect.y1 - view.line_height*(f32)(history_depth);
draw_rectangle(app, hud_rect, 0xFF000000); draw_rectangle(app, hud_rect, 0xFF000000);
draw_rectangle_outline(app, hud_rect, 0xFFFFFFFF); draw_rectangle_outline(app, hud_rect, 0xFFFFFFFF);
@ -860,7 +860,7 @@ static void
default_ui_render_caller(Application_Links *app, View_ID view_id, Face_ID face_id){ default_ui_render_caller(Application_Links *app, View_ID view_id, Face_ID face_id){
View_Summary view = {}; View_Summary view = {};
if (get_view_summary(app, view_id, AccessAll, &view)){ if (get_view_summary(app, view_id, AccessAll, &view)){
Rect_f32 rect_f32 = f32R(view.render_region); Rect_f32 rect_f32 = view.render_region;
default_ui_render_caller(app, view_id, rect_f32, face_id); default_ui_render_caller(app, view_id, rect_f32, face_id);
} }
} }
@ -868,7 +868,7 @@ static void
default_ui_render_caller(Application_Links *app, View_ID view_id){ default_ui_render_caller(Application_Links *app, View_ID view_id){
View_Summary view = {}; View_Summary view = {};
if (get_view_summary(app, view_id, AccessAll, &view)){ if (get_view_summary(app, view_id, AccessAll, &view)){
Rect_f32 rect_f32 = f32R(view.render_region); Rect_f32 rect_f32 = view.render_region;
Buffer_ID buffer_id = 0; Buffer_ID buffer_id = 0;
view_get_buffer(app, view_id, AccessAll, &buffer_id); view_get_buffer(app, view_id, AccessAll, &buffer_id);
Face_ID face_id = 0; Face_ID face_id = 0;
@ -942,7 +942,7 @@ HOOK_SIG(default_view_adjust){
get_view_next(app, &view, AccessAll)){ get_view_next(app, &view, AccessAll)){
Buffer_ID buffer = 0; Buffer_ID buffer = 0;
view_get_buffer(app, view.view_id, AccessAll, &buffer); view_get_buffer(app, view.view_id, AccessAll, &buffer);
i32 view_width = view.render_region.x1 - view.render_region.x0; f32 view_width = view.render_region.x1 - view.render_region.x0;
Face_ID face_id = get_default_font_for_view(app, view.view_id); Face_ID face_id = get_default_font_for_view(app, view.view_id);
f32 em = get_string_advance(app, face_id, make_lit_string("m")); f32 em = get_string_advance(app, face_id, make_lit_string("m"));

View File

@ -43,11 +43,12 @@
#include "4coder_scope_commands.h" #include "4coder_scope_commands.h"
#include "4coder_combined_write_commands.h" #include "4coder_combined_write_commands.h"
#include "4coder_buffer_seek_constructors.cpp"
#include "4coder_hash_functions.cpp"
#include "4coder_api_transition_30_31.cpp" #include "4coder_api_transition_30_31.cpp"
#include "4coder_hash_functions.cpp"
#include "4coder_default_framework_variables.cpp" #include "4coder_default_framework_variables.cpp"
#include "4coder_buffer_seek_constructors.cpp"
#include "4coder_helper.cpp" #include "4coder_helper.cpp"
#include "4coder_fancy.cpp" #include "4coder_fancy.cpp"
#include "4coder_ui_helper.cpp" #include "4coder_ui_helper.cpp"

View File

@ -47,11 +47,14 @@ struct Application_Links;
#define BUFFER_GET_FILE_ATTRIBUTES_SIG(n) b32 n(Application_Links *app, Buffer_ID buffer_id, File_Attributes *attributes_out) #define BUFFER_GET_FILE_ATTRIBUTES_SIG(n) b32 n(Application_Links *app, Buffer_ID buffer_id, File_Attributes *attributes_out)
#define GET_VIEW_NEXT_SIG(n) b32 n(Application_Links *app, View_ID view_id, Access_Flag access, View_ID *view_id_out) #define GET_VIEW_NEXT_SIG(n) b32 n(Application_Links *app, View_ID view_id, Access_Flag access, View_ID *view_id_out)
#define GET_VIEW_PREV_SIG(n) b32 n(Application_Links *app, View_ID view_id, Access_Flag access, View_ID *view_id_out) #define GET_VIEW_PREV_SIG(n) b32 n(Application_Links *app, View_ID view_id, Access_Flag access, View_ID *view_id_out)
#define GET_VIEW_SUMMARY_SIG(n) b32 n(Application_Links *app, View_ID view_id, Access_Flag access, View_Summary *view_summary_out)
#define GET_ACTIVE_VIEW_SIG(n) b32 n(Application_Links *app, Access_Flag access, View_ID *view_id_out) #define GET_ACTIVE_VIEW_SIG(n) b32 n(Application_Links *app, Access_Flag access, View_ID *view_id_out)
#define GET_ACTIVE_PANEL_SIG(n) b32 n(Application_Links *app, Panel_ID *panel_id_out) #define GET_ACTIVE_PANEL_SIG(n) b32 n(Application_Links *app, Panel_ID *panel_id_out)
#define VIEW_EXISTS_SIG(n) b32 n(Application_Links *app, View_ID view_id)
#define VIEW_GET_BUFFER_SIG(n) b32 n(Application_Links *app, View_ID view_id, Access_Flag access, Buffer_ID *buffer_id_out) #define VIEW_GET_BUFFER_SIG(n) b32 n(Application_Links *app, View_ID view_id, Access_Flag access, Buffer_ID *buffer_id_out)
#define VIEW_GET_CURSOR_POS_SIG(n) b32 n(Application_Links *app, View_ID view_id, i32 *pos_out) #define VIEW_GET_CURSOR_POS_SIG(n) b32 n(Application_Links *app, View_ID view_id, i32 *pos_out)
#define VIEW_GET_MARK_POS_SIG(n) b32 n(Application_Links *app, View_ID view_id, i32 *pos_out)
#define VIEW_GET_PREFERRED_X_SIG(n) b32 n(Application_Links *app, View_ID view_id, f32 *preferred_x_out)
#define VIEW_GET_SCREEN_RECT_SIG(n) b32 n(Application_Links *app, View_ID view_id, Rect_f32 *rect_out)
#define VIEW_GET_PANEL_SIG(n) b32 n(Application_Links *app, View_ID view_id, Panel_ID *panel_id_out) #define VIEW_GET_PANEL_SIG(n) b32 n(Application_Links *app, View_ID view_id, Panel_ID *panel_id_out)
#define PANEL_GET_VIEW_SIG(n) b32 n(Application_Links *app, Panel_ID panel_id, View_ID *view_id_out) #define PANEL_GET_VIEW_SIG(n) b32 n(Application_Links *app, Panel_ID panel_id, View_ID *view_id_out)
#define PANEL_IS_SPLIT_SIG(n) b32 n(Application_Links *app, Panel_ID panel_id) #define PANEL_IS_SPLIT_SIG(n) b32 n(Application_Links *app, Panel_ID panel_id)
@ -229,11 +232,14 @@ typedef BUFFER_REOPEN_SIG(Buffer_Reopen_Function);
typedef BUFFER_GET_FILE_ATTRIBUTES_SIG(Buffer_Get_File_Attributes_Function); typedef BUFFER_GET_FILE_ATTRIBUTES_SIG(Buffer_Get_File_Attributes_Function);
typedef GET_VIEW_NEXT_SIG(Get_View_Next_Function); typedef GET_VIEW_NEXT_SIG(Get_View_Next_Function);
typedef GET_VIEW_PREV_SIG(Get_View_Prev_Function); typedef GET_VIEW_PREV_SIG(Get_View_Prev_Function);
typedef GET_VIEW_SUMMARY_SIG(Get_View_Summary_Function);
typedef GET_ACTIVE_VIEW_SIG(Get_Active_View_Function); typedef GET_ACTIVE_VIEW_SIG(Get_Active_View_Function);
typedef GET_ACTIVE_PANEL_SIG(Get_Active_Panel_Function); typedef GET_ACTIVE_PANEL_SIG(Get_Active_Panel_Function);
typedef VIEW_EXISTS_SIG(View_Exists_Function);
typedef VIEW_GET_BUFFER_SIG(View_Get_Buffer_Function); typedef VIEW_GET_BUFFER_SIG(View_Get_Buffer_Function);
typedef VIEW_GET_CURSOR_POS_SIG(View_Get_Cursor_Pos_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_GET_SCREEN_RECT_SIG(View_Get_Screen_Rect_Function);
typedef VIEW_GET_PANEL_SIG(View_Get_Panel_Function); typedef VIEW_GET_PANEL_SIG(View_Get_Panel_Function);
typedef PANEL_GET_VIEW_SIG(Panel_Get_View_Function); typedef PANEL_GET_VIEW_SIG(Panel_Get_View_Function);
typedef PANEL_IS_SPLIT_SIG(Panel_Is_Split_Function); typedef PANEL_IS_SPLIT_SIG(Panel_Is_Split_Function);
@ -413,11 +419,14 @@ Buffer_Reopen_Function *buffer_reopen;
Buffer_Get_File_Attributes_Function *buffer_get_file_attributes; Buffer_Get_File_Attributes_Function *buffer_get_file_attributes;
Get_View_Next_Function *get_view_next; Get_View_Next_Function *get_view_next;
Get_View_Prev_Function *get_view_prev; Get_View_Prev_Function *get_view_prev;
Get_View_Summary_Function *get_view_summary;
Get_Active_View_Function *get_active_view; Get_Active_View_Function *get_active_view;
Get_Active_Panel_Function *get_active_panel; Get_Active_Panel_Function *get_active_panel;
View_Exists_Function *view_exists;
View_Get_Buffer_Function *view_get_buffer; View_Get_Buffer_Function *view_get_buffer;
View_Get_Cursor_Pos_Function *view_get_cursor_pos; 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_Get_Screen_Rect_Function *view_get_screen_rect;
View_Get_Panel_Function *view_get_panel; View_Get_Panel_Function *view_get_panel;
Panel_Get_View_Function *panel_get_view; Panel_Get_View_Function *panel_get_view;
Panel_Is_Split_Function *panel_is_split; Panel_Is_Split_Function *panel_is_split;
@ -596,11 +605,14 @@ Buffer_Reopen_Function *buffer_reopen_;
Buffer_Get_File_Attributes_Function *buffer_get_file_attributes_; Buffer_Get_File_Attributes_Function *buffer_get_file_attributes_;
Get_View_Next_Function *get_view_next_; Get_View_Next_Function *get_view_next_;
Get_View_Prev_Function *get_view_prev_; Get_View_Prev_Function *get_view_prev_;
Get_View_Summary_Function *get_view_summary_;
Get_Active_View_Function *get_active_view_; Get_Active_View_Function *get_active_view_;
Get_Active_Panel_Function *get_active_panel_; Get_Active_Panel_Function *get_active_panel_;
View_Exists_Function *view_exists_;
View_Get_Buffer_Function *view_get_buffer_; View_Get_Buffer_Function *view_get_buffer_;
View_Get_Cursor_Pos_Function *view_get_cursor_pos_; 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_Get_Screen_Rect_Function *view_get_screen_rect_;
View_Get_Panel_Function *view_get_panel_; View_Get_Panel_Function *view_get_panel_;
Panel_Get_View_Function *panel_get_view_; Panel_Get_View_Function *panel_get_view_;
Panel_Is_Split_Function *panel_is_split_; Panel_Is_Split_Function *panel_is_split_;
@ -787,11 +799,14 @@ app_links->buffer_reopen_ = Buffer_Reopen;\
app_links->buffer_get_file_attributes_ = Buffer_Get_File_Attributes;\ app_links->buffer_get_file_attributes_ = Buffer_Get_File_Attributes;\
app_links->get_view_next_ = Get_View_Next;\ app_links->get_view_next_ = Get_View_Next;\
app_links->get_view_prev_ = Get_View_Prev;\ app_links->get_view_prev_ = Get_View_Prev;\
app_links->get_view_summary_ = Get_View_Summary;\
app_links->get_active_view_ = Get_Active_View;\ app_links->get_active_view_ = Get_Active_View;\
app_links->get_active_panel_ = Get_Active_Panel;\ app_links->get_active_panel_ = Get_Active_Panel;\
app_links->view_exists_ = View_Exists;\
app_links->view_get_buffer_ = View_Get_Buffer;\ app_links->view_get_buffer_ = View_Get_Buffer;\
app_links->view_get_cursor_pos_ = View_Get_Cursor_Pos;\ 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_get_screen_rect_ = View_Get_Screen_Rect;\
app_links->view_get_panel_ = View_Get_Panel;\ app_links->view_get_panel_ = View_Get_Panel;\
app_links->panel_get_view_ = Panel_Get_View;\ app_links->panel_get_view_ = Panel_Get_View;\
app_links->panel_is_split_ = Panel_Is_Split;\ app_links->panel_is_split_ = Panel_Is_Split;\
@ -970,11 +985,14 @@ static b32 buffer_reopen(Application_Links *app, Buffer_ID buffer_id, Buffer_Reo
static b32 buffer_get_file_attributes(Application_Links *app, Buffer_ID buffer_id, File_Attributes *attributes_out){return(app->buffer_get_file_attributes(app, buffer_id, attributes_out));} static b32 buffer_get_file_attributes(Application_Links *app, Buffer_ID buffer_id, File_Attributes *attributes_out){return(app->buffer_get_file_attributes(app, buffer_id, attributes_out));}
static b32 get_view_next(Application_Links *app, View_ID view_id, Access_Flag access, View_ID *view_id_out){return(app->get_view_next(app, view_id, access, view_id_out));} static b32 get_view_next(Application_Links *app, View_ID view_id, Access_Flag access, View_ID *view_id_out){return(app->get_view_next(app, view_id, access, view_id_out));}
static b32 get_view_prev(Application_Links *app, View_ID view_id, Access_Flag access, View_ID *view_id_out){return(app->get_view_prev(app, view_id, access, view_id_out));} static b32 get_view_prev(Application_Links *app, View_ID view_id, Access_Flag access, View_ID *view_id_out){return(app->get_view_prev(app, view_id, access, view_id_out));}
static b32 get_view_summary(Application_Links *app, View_ID view_id, Access_Flag access, View_Summary *view_summary_out){return(app->get_view_summary(app, view_id, access, view_summary_out));}
static b32 get_active_view(Application_Links *app, Access_Flag access, View_ID *view_id_out){return(app->get_active_view(app, access, view_id_out));} static b32 get_active_view(Application_Links *app, Access_Flag access, View_ID *view_id_out){return(app->get_active_view(app, access, view_id_out));}
static b32 get_active_panel(Application_Links *app, Panel_ID *panel_id_out){return(app->get_active_panel(app, panel_id_out));} static b32 get_active_panel(Application_Links *app, Panel_ID *panel_id_out){return(app->get_active_panel(app, panel_id_out));}
static b32 view_exists(Application_Links *app, View_ID view_id){return(app->view_exists(app, view_id));}
static b32 view_get_buffer(Application_Links *app, View_ID view_id, Access_Flag access, Buffer_ID *buffer_id_out){return(app->view_get_buffer(app, view_id, access, buffer_id_out));} static b32 view_get_buffer(Application_Links *app, View_ID view_id, Access_Flag access, Buffer_ID *buffer_id_out){return(app->view_get_buffer(app, view_id, access, buffer_id_out));}
static b32 view_get_cursor_pos(Application_Links *app, View_ID view_id, i32 *pos_out){return(app->view_get_cursor_pos(app, view_id, pos_out));} static b32 view_get_cursor_pos(Application_Links *app, View_ID view_id, i32 *pos_out){return(app->view_get_cursor_pos(app, view_id, pos_out));}
static b32 view_get_mark_pos(Application_Links *app, View_ID view_id, i32 *pos_out){return(app->view_get_mark_pos(app, view_id, pos_out));}
static b32 view_get_preferred_x(Application_Links *app, View_ID view_id, f32 *preferred_x_out){return(app->view_get_preferred_x(app, view_id, preferred_x_out));}
static b32 view_get_screen_rect(Application_Links *app, View_ID view_id, Rect_f32 *rect_out){return(app->view_get_screen_rect(app, view_id, rect_out));}
static b32 view_get_panel(Application_Links *app, View_ID view_id, Panel_ID *panel_id_out){return(app->view_get_panel(app, view_id, panel_id_out));} static b32 view_get_panel(Application_Links *app, View_ID view_id, Panel_ID *panel_id_out){return(app->view_get_panel(app, view_id, panel_id_out));}
static b32 panel_get_view(Application_Links *app, Panel_ID panel_id, View_ID *view_id_out){return(app->panel_get_view(app, panel_id, view_id_out));} static b32 panel_get_view(Application_Links *app, Panel_ID panel_id, View_ID *view_id_out){return(app->panel_get_view(app, panel_id, view_id_out));}
static b32 panel_is_split(Application_Links *app, Panel_ID panel_id){return(app->panel_is_split(app, panel_id));} static b32 panel_is_split(Application_Links *app, Panel_ID panel_id){return(app->panel_is_split(app, panel_id));}
@ -1153,11 +1171,14 @@ static b32 buffer_reopen(Application_Links *app, Buffer_ID buffer_id, Buffer_Reo
static b32 buffer_get_file_attributes(Application_Links *app, Buffer_ID buffer_id, File_Attributes *attributes_out){return(app->buffer_get_file_attributes_(app, buffer_id, attributes_out));} static b32 buffer_get_file_attributes(Application_Links *app, Buffer_ID buffer_id, File_Attributes *attributes_out){return(app->buffer_get_file_attributes_(app, buffer_id, attributes_out));}
static b32 get_view_next(Application_Links *app, View_ID view_id, Access_Flag access, View_ID *view_id_out){return(app->get_view_next_(app, view_id, access, view_id_out));} static b32 get_view_next(Application_Links *app, View_ID view_id, Access_Flag access, View_ID *view_id_out){return(app->get_view_next_(app, view_id, access, view_id_out));}
static b32 get_view_prev(Application_Links *app, View_ID view_id, Access_Flag access, View_ID *view_id_out){return(app->get_view_prev_(app, view_id, access, view_id_out));} static b32 get_view_prev(Application_Links *app, View_ID view_id, Access_Flag access, View_ID *view_id_out){return(app->get_view_prev_(app, view_id, access, view_id_out));}
static b32 get_view_summary(Application_Links *app, View_ID view_id, Access_Flag access, View_Summary *view_summary_out){return(app->get_view_summary_(app, view_id, access, view_summary_out));}
static b32 get_active_view(Application_Links *app, Access_Flag access, View_ID *view_id_out){return(app->get_active_view_(app, access, view_id_out));} static b32 get_active_view(Application_Links *app, Access_Flag access, View_ID *view_id_out){return(app->get_active_view_(app, access, view_id_out));}
static b32 get_active_panel(Application_Links *app, Panel_ID *panel_id_out){return(app->get_active_panel_(app, panel_id_out));} static b32 get_active_panel(Application_Links *app, Panel_ID *panel_id_out){return(app->get_active_panel_(app, panel_id_out));}
static b32 view_exists(Application_Links *app, View_ID view_id){return(app->view_exists_(app, view_id));}
static b32 view_get_buffer(Application_Links *app, View_ID view_id, Access_Flag access, Buffer_ID *buffer_id_out){return(app->view_get_buffer_(app, view_id, access, buffer_id_out));} static b32 view_get_buffer(Application_Links *app, View_ID view_id, Access_Flag access, Buffer_ID *buffer_id_out){return(app->view_get_buffer_(app, view_id, access, buffer_id_out));}
static b32 view_get_cursor_pos(Application_Links *app, View_ID view_id, i32 *pos_out){return(app->view_get_cursor_pos_(app, view_id, pos_out));} static b32 view_get_cursor_pos(Application_Links *app, View_ID view_id, i32 *pos_out){return(app->view_get_cursor_pos_(app, view_id, pos_out));}
static b32 view_get_mark_pos(Application_Links *app, View_ID view_id, i32 *pos_out){return(app->view_get_mark_pos_(app, view_id, pos_out));}
static b32 view_get_preferred_x(Application_Links *app, View_ID view_id, f32 *preferred_x_out){return(app->view_get_preferred_x_(app, view_id, preferred_x_out));}
static b32 view_get_screen_rect(Application_Links *app, View_ID view_id, Rect_f32 *rect_out){return(app->view_get_screen_rect_(app, view_id, rect_out));}
static b32 view_get_panel(Application_Links *app, View_ID view_id, Panel_ID *panel_id_out){return(app->view_get_panel_(app, view_id, panel_id_out));} static b32 view_get_panel(Application_Links *app, View_ID view_id, Panel_ID *panel_id_out){return(app->view_get_panel_(app, view_id, panel_id_out));}
static b32 panel_get_view(Application_Links *app, Panel_ID panel_id, View_ID *view_id_out){return(app->panel_get_view_(app, panel_id, view_id_out));} static b32 panel_get_view(Application_Links *app, Panel_ID panel_id, View_ID *view_id_out){return(app->panel_get_view_(app, panel_id, view_id_out));}
static b32 panel_is_split(Application_Links *app, Panel_ID panel_id){return(app->panel_is_split_(app, panel_id));} static b32 panel_is_split(Application_Links *app, Panel_ID panel_id){return(app->panel_is_split_(app, panel_id));}

View File

@ -18,7 +18,7 @@ CUSTOM_DOC("A lister mode command that activates the list's action on the highli
Partition *scratch = &global_part; Partition *scratch = &global_part;
Heap *heap = &global_heap; Heap *heap = &global_heap;
View_Summary view = get_active_view(app, AccessAll); View_Summary view = get_active_view(app, AccessAll);
Lister_State *state = view_get_lister_state(&view); Lister_State *state = view_get_lister_state(view.view_id);
if (state->initialized){ if (state->initialized){
void *user_data = 0; void *user_data = 0;
if (0 <= state->raw_item_index && state->raw_item_index < state->lister.data.options.count){ if (0 <= state->raw_item_index && state->raw_item_index < state->lister.data.options.count){
@ -32,7 +32,7 @@ CUSTOM_COMMAND_SIG(lister__write_character)
CUSTOM_DOC("A lister mode command that dispatches to the lister's write character handler.") CUSTOM_DOC("A lister mode command that dispatches to the lister's write character handler.")
{ {
View_Summary view = get_active_view(app, AccessAll); View_Summary view = get_active_view(app, AccessAll);
Lister_State *state = view_get_lister_state(&view); Lister_State *state = view_get_lister_state(view.view_id);
if (state->lister.data.handlers.write_character != 0){ if (state->lister.data.handlers.write_character != 0){
state->lister.data.handlers.write_character(app); state->lister.data.handlers.write_character(app);
} }
@ -42,7 +42,7 @@ CUSTOM_COMMAND_SIG(lister__backspace_text_field)
CUSTOM_DOC("A lister mode command that dispatches to the lister's backspace text field handler.") CUSTOM_DOC("A lister mode command that dispatches to the lister's backspace text field handler.")
{ {
View_Summary view = get_active_view(app, AccessAll); View_Summary view = get_active_view(app, AccessAll);
Lister_State *state = view_get_lister_state(&view); Lister_State *state = view_get_lister_state(view.view_id);
if (state->lister.data.handlers.backspace != 0){ if (state->lister.data.handlers.backspace != 0){
state->lister.data.handlers.backspace(app); state->lister.data.handlers.backspace(app);
} }
@ -52,7 +52,7 @@ CUSTOM_COMMAND_SIG(lister__move_up)
CUSTOM_DOC("A lister mode command that dispatches to the lister's navigate up handler.") CUSTOM_DOC("A lister mode command that dispatches to the lister's navigate up handler.")
{ {
View_Summary view = get_active_view(app, AccessAll); View_Summary view = get_active_view(app, AccessAll);
Lister_State *state = view_get_lister_state(&view); Lister_State *state = view_get_lister_state(view.view_id);
if (state->lister.data.handlers.navigate_up != 0){ if (state->lister.data.handlers.navigate_up != 0){
state->lister.data.handlers.navigate_up(app); state->lister.data.handlers.navigate_up(app);
} }
@ -62,7 +62,7 @@ CUSTOM_COMMAND_SIG(lister__move_down)
CUSTOM_DOC("A lister mode command that dispatches to the lister's navigate down handler.") CUSTOM_DOC("A lister mode command that dispatches to the lister's navigate down handler.")
{ {
View_Summary view = get_active_view(app, AccessAll); View_Summary view = get_active_view(app, AccessAll);
Lister_State *state = view_get_lister_state(&view); Lister_State *state = view_get_lister_state(view.view_id);
if (state->lister.data.handlers.navigate_down != 0){ if (state->lister.data.handlers.navigate_down != 0){
state->lister.data.handlers.navigate_down(app); state->lister.data.handlers.navigate_down(app);
} }
@ -77,7 +77,7 @@ CUSTOM_DOC("A lister mode command that scrolls the list in response to the mouse
Mouse_State mouse = get_mouse_state(app); Mouse_State mouse = get_mouse_state(app);
scroll.target_y += mouse.wheel; scroll.target_y += mouse.wheel;
view_set_scroll(app, &view, scroll); view_set_scroll(app, &view, scroll);
Lister_State *state = view_get_lister_state(&view); Lister_State *state = view_get_lister_state(view.view_id);
if (state->initialized){ if (state->initialized){
lister_update_ui(app, scratch, &view, state); lister_update_ui(app, scratch, &view, state);
} }
@ -88,7 +88,7 @@ CUSTOM_DOC("A lister mode command that beings a click interaction with a list it
{ {
Partition *scratch = &global_part; Partition *scratch = &global_part;
View_Summary view = get_active_view(app, AccessAll); View_Summary view = get_active_view(app, AccessAll);
Lister_State *state = view_get_lister_state(&view); Lister_State *state = view_get_lister_state(view.view_id);
if (state->initialized){ if (state->initialized){
UI_Item clicked = lister_get_clicked_item(app, view.view_id, scratch); UI_Item clicked = lister_get_clicked_item(app, view.view_id, scratch);
state->hot_user_data = clicked.user_data; state->hot_user_data = clicked.user_data;
@ -101,7 +101,7 @@ CUSTOM_DOC("A lister mode command that ends a click interaction with a list item
Partition *scratch = &global_part; Partition *scratch = &global_part;
Heap *heap = &global_heap; Heap *heap = &global_heap;
View_Summary view = get_active_view(app, AccessAll); View_Summary view = get_active_view(app, AccessAll);
Lister_State *state = view_get_lister_state(&view); Lister_State *state = view_get_lister_state(view.view_id);
if (state->initialized && state->hot_user_data != 0){ if (state->initialized && state->hot_user_data != 0){
UI_Item clicked = lister_get_clicked_item(app, view.view_id, scratch); UI_Item clicked = lister_get_clicked_item(app, view.view_id, scratch);
if (state->hot_user_data == clicked.user_data){ if (state->hot_user_data == clicked.user_data){
@ -116,7 +116,7 @@ CUSTOM_DOC("A lister mode command that updates the lists UI data.")
{ {
Partition *scratch = &global_part; Partition *scratch = &global_part;
View_Summary view = get_active_view(app, AccessAll); View_Summary view = get_active_view(app, AccessAll);
Lister_State *state = view_get_lister_state(&view); Lister_State *state = view_get_lister_state(view.view_id);
if (state->initialized){ if (state->initialized){
lister_update_ui(app, scratch, &view, state); lister_update_ui(app, scratch, &view, state);
} }
@ -127,7 +127,7 @@ CUSTOM_DOC("A lister mode command that inserts a new character to the text field
{ {
Partition *scratch = &global_part; Partition *scratch = &global_part;
View_Summary view = get_active_view(app, AccessAll); View_Summary view = get_active_view(app, AccessAll);
Lister_State *state = view_get_lister_state(&view); Lister_State *state = view_get_lister_state(view.view_id);
if (state->initialized){ if (state->initialized){
User_Input in = get_command_input(app); User_Input in = get_command_input(app);
u8 character[4]; u8 character[4];
@ -147,7 +147,7 @@ CUSTOM_DOC("A lister mode command that backspaces one character from the text fi
{ {
Partition *scratch = &global_part; Partition *scratch = &global_part;
View_Summary view = get_active_view(app, AccessAll); View_Summary view = get_active_view(app, AccessAll);
Lister_State *state = view_get_lister_state(&view); Lister_State *state = view_get_lister_state(view.view_id);
if (state->initialized){ if (state->initialized){
backspace_utf8(&state->lister.data.text_field); backspace_utf8(&state->lister.data.text_field);
backspace_utf8(&state->lister.data.key_string); backspace_utf8(&state->lister.data.key_string);
@ -162,7 +162,7 @@ CUSTOM_DOC("A lister mode command that moves the highlighted item one up in the
{ {
Partition *scratch = &global_part; Partition *scratch = &global_part;
View_Summary view = get_active_view(app, AccessAll); View_Summary view = get_active_view(app, AccessAll);
Lister_State *state = view_get_lister_state(&view); Lister_State *state = view_get_lister_state(view.view_id);
if (state->initialized){ if (state->initialized){
state->item_index = state->item_index - 1; state->item_index = state->item_index - 1;
if (state->item_index < 0){ if (state->item_index < 0){
@ -178,7 +178,7 @@ CUSTOM_DOC("A lister mode command that moves the highlighted item one down in th
{ {
Partition *scratch = &global_part; Partition *scratch = &global_part;
View_Summary view = get_active_view(app, AccessAll); View_Summary view = get_active_view(app, AccessAll);
Lister_State *state = view_get_lister_state(&view); Lister_State *state = view_get_lister_state(view.view_id);
if (state->initialized){ if (state->initialized){
state->item_index = state->item_index + 1; state->item_index = state->item_index + 1;
if (state->item_index > state->item_count_after_filter - 1){ if (state->item_index > state->item_count_after_filter - 1){
@ -194,7 +194,7 @@ CUSTOM_DOC("A lister mode command that inserts a character into the text field o
{ {
Partition *scratch = &global_part; Partition *scratch = &global_part;
View_Summary view = get_active_view(app, AccessAll); View_Summary view = get_active_view(app, AccessAll);
Lister_State *state = view_get_lister_state(&view); Lister_State *state = view_get_lister_state(view.view_id);
if (state->initialized){ if (state->initialized){
User_Input in = get_command_input(app); User_Input in = get_command_input(app);
u8 character[4]; u8 character[4];
@ -219,7 +219,7 @@ CUSTOM_DOC("A lister mode command that backspaces one character from the text fi
{ {
Partition *scratch = &global_part; Partition *scratch = &global_part;
View_Summary view = get_active_view(app, AccessAll); View_Summary view = get_active_view(app, AccessAll);
Lister_State *state = view_get_lister_state(&view); Lister_State *state = view_get_lister_state(view.view_id);
if (state->initialized){ if (state->initialized){
if (state->lister.data.text_field.size > 0){ if (state->lister.data.text_field.size > 0){
char last_char = state->lister.data.text_field.str[state->lister.data.text_field.size - 1]; char last_char = state->lister.data.text_field.str[state->lister.data.text_field.size - 1];
@ -259,7 +259,7 @@ CUSTOM_DOC("A lister mode command that handles input for the fixed sure to kill
Partition *scratch = &global_part; Partition *scratch = &global_part;
Heap *heap = &global_heap; Heap *heap = &global_heap;
View_Summary view = get_active_view(app, AccessAll); View_Summary view = get_active_view(app, AccessAll);
Lister_State *state = view_get_lister_state(&view); Lister_State *state = view_get_lister_state(view.view_id);
if (state->initialized){ if (state->initialized){
User_Input in = get_command_input(app); User_Input in = get_command_input(app);
u8 character[4]; u8 character[4];
@ -316,7 +316,7 @@ begin_integrated_lister__with_refresh_handler(Application_Links *app, char *quer
Heap *heap = &global_heap; Heap *heap = &global_heap;
view_begin_ui_mode(app, view); view_begin_ui_mode(app, view);
view_set_setting(app, view, ViewSetting_UICommandMap, default_lister_ui_map); view_set_setting(app, view, ViewSetting_UICommandMap, default_lister_ui_map);
Lister_State *state = view_get_lister_state(view); Lister_State *state = view_get_lister_state(view->view_id);
init_lister_state(app, state, heap); init_lister_state(app, state, heap);
lister_first_init(app, &state->lister, user_data, user_data_size); lister_first_init(app, &state->lister, user_data, user_data_size);
lister_set_query_string(&state->lister.data, query_string); lister_set_query_string(&state->lister.data, query_string);
@ -354,7 +354,7 @@ begin_integrated_lister__basic_list(Application_Links *app, char *query_string,
Heap *heap = &global_heap; Heap *heap = &global_heap;
view_begin_ui_mode(app, view); view_begin_ui_mode(app, view);
view_set_setting(app, view, ViewSetting_UICommandMap, default_lister_ui_map); view_set_setting(app, view, ViewSetting_UICommandMap, default_lister_ui_map);
Lister_State *state = view_get_lister_state(view); Lister_State *state = view_get_lister_state(view->view_id);
init_lister_state(app, state, heap); init_lister_state(app, state, heap);
lister_first_init(app, &state->lister, user_data, user_data_size); lister_first_init(app, &state->lister, user_data, user_data_size);
for (i32 i = 0; i < option_count; i += 1){ for (i32 i = 0; i < option_count; i += 1){
@ -377,7 +377,7 @@ begin_integrated_lister__with_fixed_options(Application_Links *app, char *query_
Heap *heap = &global_heap; Heap *heap = &global_heap;
view_begin_ui_mode(app, view); view_begin_ui_mode(app, view);
view_set_setting(app, view, ViewSetting_UICommandMap, default_lister_ui_map); view_set_setting(app, view, ViewSetting_UICommandMap, default_lister_ui_map);
Lister_State *state = view_get_lister_state(view); Lister_State *state = view_get_lister_state(view->view_id);
init_lister_state(app, state, heap); init_lister_state(app, state, heap);
lister_first_init(app, &state->lister, user_data, user_data_size); lister_first_init(app, &state->lister, user_data, user_data_size);
for (i32 i = 0; i < option_count; i += 1){ for (i32 i = 0; i < option_count; i += 1){
@ -423,7 +423,7 @@ begin_integrated_lister__theme_list(Application_Links *app, char *query_string,
Heap *heap = &global_heap; Heap *heap = &global_heap;
view_begin_ui_mode(app, view); view_begin_ui_mode(app, view);
view_set_setting(app, view, ViewSetting_UICommandMap, default_lister_ui_map); view_set_setting(app, view, ViewSetting_UICommandMap, default_lister_ui_map);
Lister_State *state = view_get_lister_state(view); Lister_State *state = view_get_lister_state(view->view_id);
init_lister_state(app, state, heap); init_lister_state(app, state, heap);
lister_first_init(app, &state->lister, user_data, user_data_size); lister_first_init(app, &state->lister, user_data, user_data_size);
state->lister.data.theme_list = true; state->lister.data.theme_list = true;

View File

@ -260,12 +260,13 @@ panel_space_from_view_space(Vec2_i32 p, Vec2_i32 scroll_p){
//////////////////////////////// ////////////////////////////////
// TODO(allen): VIEW_16_LIMIT
Lister_State global_lister_state_[16] = {}; Lister_State global_lister_state_[16] = {};
Lister_State *global_lister_state = global_lister_state_ - 1; Lister_State *global_lister_state = global_lister_state_ - 1;
static Lister_State* static Lister_State*
view_get_lister_state(View_Summary *view){ view_get_lister_state(View_ID view){
return(&global_lister_state[view->view_id]); return(&global_lister_state[view]);
} }
static i32 static i32
@ -292,9 +293,9 @@ init_lister_state(Application_Links *app, Lister_State *state, Heap *heap){
} }
UI_QUIT_FUNCTION(lister_quit_function){ UI_QUIT_FUNCTION(lister_quit_function){
Lister_State *state = view_get_lister_state(&view); Lister_State *state = view_get_lister_state(view);
state->initialized = false; state->initialized = false;
view_clear_ui_data(app, view.view_id); view_clear_ui_data(app, view);
} }
static UI_Item static UI_Item
@ -348,7 +349,7 @@ lister_update_ui(Application_Links *app, Partition *scratch, View_Summary *view,
b32 is_theme_list = state->lister.data.theme_list; b32 is_theme_list = state->lister.data.theme_list;
i32 x0 = 0; i32 x0 = 0;
i32 x1 = rect_width(view->view_region); i32 x1 = (i32)(rect_width(view->view_region));
i32 line_height = lister_get_line_height(view); i32 line_height = lister_get_line_height(view);
i32 block_height = lister_get_block_height(line_height, is_theme_list); i32 block_height = lister_get_block_height(line_height, is_theme_list);
i32 text_field_height = lister_get_text_field_height(view); i32 text_field_height = lister_get_text_field_height(view);

View File

@ -16,52 +16,12 @@ access_test(u32 lock_flags, u32 access_flags){
return((lock_flags & ~access_flags) == 0); return((lock_flags & ~access_flags) == 0);
} }
internal void
fill_view_summary(System_Functions *system, View_Summary *view, View *vptr, Live_Views *live_set, Working_Set *working_set){
block_zero_struct(view);
if (vptr->in_use){
Assert(vptr->file != 0);
view->exists = true;
view->view_id = (i32)(vptr - live_set->views) + 1;
view->line_height = (f32)(vptr->line_height);
view->unwrapped_lines = vptr->file->settings.unwrapped_lines;
view->show_whitespace = vptr->show_whitespace;
view->lock_flags = view_get_access_flags(vptr);
view->buffer_id = vptr->file->id.id;
File_Edit_Positions edit_pos = view_get_edit_pos(vptr);
view->mark = file_compute_cursor(system, vptr->file, seek_pos(vptr->mark));
view->cursor = file_compute_cursor(system, vptr->file, seek_pos(edit_pos.cursor_pos));
view->preferred_x = vptr->preferred_x;
Rect_i32 region = vptr->panel->rect_inner;
view->view_region = region;
view->render_region = i32R(0, 0, rect_width(region), rect_height(region));
if (vptr->ui_mode){
view->scroll_vars = vptr->ui_scroll;
}
else{
view->scroll_vars = edit_pos.scroll;
}
}
}
internal void
fill_view_summary(System_Functions *system, View_Summary *view, View *vptr, Models *models){
fill_view_summary(system, view, vptr, &models->live_set, &models->working_set);
}
internal void internal void
view_quit_ui(System_Functions *system, Models *models, View *view){ view_quit_ui(System_Functions *system, Models *models, View *view){
Assert(view != 0); Assert(view != 0);
view->ui_mode = false; view->ui_mode = false;
if (view->ui_quit != 0){ if (view->ui_quit != 0){
View_Summary view_summary = {}; view->ui_quit(&models->app_links, view_get_id(&models->live_set, view));
fill_view_summary(system, &view_summary, view, models);
view->ui_quit(&models->app_links, view_summary);
} }
} }
@ -1807,11 +1767,11 @@ get_view_prev__inner(Layout *layout, View *view){
API_EXPORT b32 API_EXPORT b32
Get_View_Next(Application_Links *app, View_ID view_id, Access_Flag access, View_ID *view_id_out) Get_View_Next(Application_Links *app, View_ID view_id, Access_Flag access, View_ID *view_id_out)
/* /*
DOC_PARAM(view, The View_Summary pointed to by view is iterated to the next view or to a null summary if this is the last view.) DOC_PARAM(view, The pointed to by view is iterated to the next view or to a null summary if this is the last view.)
DOC_PARAM(access, The access parameter determines what levels of protection this call can access. The view outputted will be the next view that is accessible.) DOC_PARAM(access, The access parameter determines what levels of protection this call can access. The view outputted will be the next view that is accessible.)
DOC DOC
( (
This call steps a View_Summary to the next view in the global view order. This call steps a to the next view in the global view order.
If the view outputted does not exist, the loop is finished. If the view outputted does not exist, the loop is finished.
Views should not be closed or opened durring a view loop. Views should not be closed or opened durring a view loop.
@ -1855,26 +1815,6 @@ Get_View_Prev(Application_Links *app, View_ID view_id, Access_Flag access, View_
return(result); return(result);
} }
// TODO(allen): redocument
API_EXPORT b32
Get_View_Summary(Application_Links *app, View_ID view_id, Access_Flag access, View_Summary *view_summary_out)
/*
DOC_PARAM(view_id, The view_id specifies the view to try to get.)
DOC_PARAM(access, The access parameter determines what levels of protection this call can access.)
DOC_RETURN(This call returns a summary that describes the indicated view if it is open and accessible.)
DOC_SEE(Access_Flag)
*/{
Models *models = (Models*)app->cmd_context;
System_Functions *system = models->system;
View *view = imp_get_view(models, view_id);
b32 result = false;
if (view_api_check_view(view, access)){
fill_view_summary(system, view_summary_out, view, models);
result = true;
}
return(result);
}
// TODO(allen): redocument // TODO(allen): redocument
API_EXPORT b32 API_EXPORT b32
Get_Active_View(Application_Links *app, Access_Flag access, View_ID *view_id_out) Get_Active_View(Application_Links *app, Access_Flag access, View_ID *view_id_out)
@ -1913,6 +1853,17 @@ Get_Active_Panel(Application_Links *app, Panel_ID *panel_id_out){
return(result); return(result);
} }
API_EXPORT b32
View_Exists(Application_Links *app, View_ID view_id){
Models *models = (Models*)app->cmd_context;
View *view = imp_get_view(models, view_id);
b32 result = false;
if (view_api_check_view(view)){
result = true;
}
return(result);
}
API_EXPORT b32 API_EXPORT b32
View_Get_Buffer(Application_Links *app, View_ID view_id, Access_Flag access, Buffer_ID *buffer_id_out){ View_Get_Buffer(Application_Links *app, View_ID view_id, Access_Flag access, Buffer_ID *buffer_id_out){
Models *models = (Models*)app->cmd_context; Models *models = (Models*)app->cmd_context;
@ -1941,13 +1892,48 @@ View_Get_Cursor_Pos(Application_Links *app, View_ID view_id, i32 *pos_out){
return(result); return(result);
} }
API_EXPORT b32
View_Get_Mark_Pos(Application_Links *app, View_ID view_id, i32 *pos_out){
Models *models = (Models*)app->cmd_context;
View *view = imp_get_view(models, view_id);
b32 result = false;
if (view_api_check_view(view)){
*pos_out = view->mark;
result = true;
}
return(result);
}
API_EXPORT b32
View_Get_Preferred_X(Application_Links *app, View_ID view_id, f32 *preferred_x_out){
Models *models = (Models*)app->cmd_context;
View *view = imp_get_view(models, view_id);
b32 result = false;
if (view_api_check_view(view)){
*preferred_x_out = view->preferred_x;
result = true;
}
return(result);
}
API_EXPORT b32
View_Get_Screen_Rect(Application_Links *app, View_ID view_id, Rect_f32 *rect_out){
Models *models = (Models*)app->cmd_context;
b32 result = false;
View *view = imp_get_view(models, view_id);
if (view_api_check_view(view)){
*rect_out = f32R(view->panel->rect_full);
result = true;
}
return(result);
}
API_EXPORT b32 API_EXPORT b32
View_Get_Panel(Application_Links *app, View_ID view_id, Panel_ID *panel_id_out){ View_Get_Panel(Application_Links *app, View_ID view_id, Panel_ID *panel_id_out){
Models *models = (Models*)app->cmd_context; Models *models = (Models*)app->cmd_context;
Layout *layout = &models->layout; Layout *layout = &models->layout;
b32 result = false; b32 result = false;
View *view = imp_get_view(models, view_id); View *view = imp_get_view(models, view_id);
*panel_id_out = 0;
if (view_api_check_view(view)){ if (view_api_check_view(view)){
Panel *panel = view->panel; Panel *panel = view->panel;
*panel_id_out = panel_get_id(layout, panel); *panel_id_out = panel_get_id(layout, panel);
@ -1961,7 +1947,6 @@ Panel_Get_View(Application_Links *app, Panel_ID panel_id, View_ID *view_id_out){
Models *models = (Models*)app->cmd_context; Models *models = (Models*)app->cmd_context;
b32 result = false; b32 result = false;
Panel *panel = imp_get_panel(models, panel_id); Panel *panel = imp_get_panel(models, panel_id);
*view_id_out = 0;
if (panel_api_check_panel(panel)){ if (panel_api_check_panel(panel)){
if (panel->kind == PanelKind_Final){ if (panel->kind == PanelKind_Final){
View *view = panel->view; View *view = panel->view;