diff options
author | Leo Tenenbaum <pommicket@gmail.com> | 2021-01-29 21:53:37 -0500 |
---|---|---|
committer | Leo Tenenbaum <pommicket@gmail.com> | 2021-01-29 21:53:37 -0500 |
commit | 3cc173dd38e85c751bb1a9f9288ebe974e567ba4 (patch) | |
tree | fa822005135b515307c223e3154c9b03f61203d7 /main.c | |
parent | 90ffcaad047caa55e65a6bf858a7b976e062007a (diff) |
ctrl+pageup/down to switch between tabs
Diffstat (limited to 'main.c')
-rw-r--r-- | main.c | 95 |
1 files changed, 2 insertions, 93 deletions
@@ -44,6 +44,7 @@ no_warn_end #include "buffer.c" #include "ted-base.c" #include "ui.c" +#include "node.c" #include "command.c" #include "config.c" #include "menu.c" @@ -74,98 +75,6 @@ static Rect error_box_rect(Ted *ted) { V2(menu_get_width(ted), 3 * char_height + 2 * padding)); } -static void node_switch_to_tab(Ted *ted, Node *node, u16 new_tab_index) { - node->active_tab = new_tab_index; - if (node == ted->active_node) { - // switch active buffer - assert(node->tabs); - u16 buffer_idx = node->tabs[new_tab_index]; - ted->active_buffer = &ted->buffers[buffer_idx]; - } -} - -static void node_frame(Ted *ted, Node *node, Rect r) { - if (node->tabs) { - bool is_active = node == ted->active_node; - Settings const *settings = &ted->settings; - u32 const *colors = settings->colors; - Font *font = ted->font; - - u16 buffer_index = node->tabs[node->active_tab]; - float tab_bar_height = 20; - - Rect tab_bar_rect = r; - tab_bar_rect.size.y = tab_bar_height; - - { // tab bar - u16 ntabs = (u16)arr_len(node->tabs); - float tab_width = r.size.x / ntabs; - for (u16 c = 0; c < ted->nmouse_clicks[SDL_BUTTON_LEFT]; ++c) { - v2 click = ted->mouse_clicks[SDL_BUTTON_LEFT][c]; - if (rect_contains_point(tab_bar_rect, click)) { - u16 tab_index = (u16)((click.x - r.pos.x) / tab_width); - node_switch_to_tab(ted, node, tab_index); - } - } - for (u16 i = 0; i < ntabs; ++i) { - TextBuffer *buffer = &ted->buffers[node->tabs[i]]; - char tab_title[256]; - char const *path = buffer_get_filename(buffer); - char const *filename = path_filename(path); - Rect tab_rect = rect(V2(r.pos.x + tab_width * i, r.pos.y), V2(tab_width, tab_bar_height)); - glBegin(GL_QUADS); - gl_color_rgba(colors[COLOR_BORDER]); - - // tab border - rect_render_border(tab_rect, 1); - if (i == node->active_tab) { - // highlight active tab - gl_color_rgba(colors[is_active ? COLOR_ACTIVE_TAB_HL : COLOR_HL]); - rect_render(tab_rect); - } - glEnd(); - - // tab title - { - char const *surround = buffer_unsaved_changes(buffer) ? "*" : ""; - strbuf_printf(tab_title, "%s%s%s", surround, filename, surround); - } - gl_color_rgba(colors[COLOR_TEXT]); - TextRenderState text_state = text_render_state_default; - text_state.max_x = rect_x2(tab_rect); - text_render_with_state(font, &text_state, tab_title, tab_rect.pos.x, tab_rect.pos.y); - - } - } - - TextBuffer *buffer = &ted->buffers[buffer_index]; - Rect buffer_rect = rect_translate(r, V2(0, tab_bar_height)); - buffer_render(buffer, buffer_rect); - } else { - -#if 0 - // @TODO: test this - // this node is a split - Node *a = &ted->nodes[node->split_a]; - Node *b = &ted->nodes[node->split_b]; - Rect r1 = r, r2 = r; - if (node->vertical_split) { - float split_pos = r.size.y * node->split_pos; - r1.size.y = split_pos; - r2.pos.y += split_pos; - r2.size.y = r.size.y - split_pos; - } else { - float split_pos = r.size.x * node->split_pos; - r1.size.x = split_pos; - r2.pos.x += split_pos; - r2.size.x = r.size.x - split_pos; - } - node_render(ted, a, r1); - node_render(ted, b, r2); -#endif - } -} - #if _WIN32 INT WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, INT nCmdShow) { @@ -191,7 +100,7 @@ int main(int argc, char **argv) { setlocale(LC_ALL, ""); // allow unicode // read command-line arguments - char const *starting_filename = "Untitled"; + char const *starting_filename = TED_UNTITLED; switch (argc) { case 0: case 1: break; case 2: |