diff options
-rw-r--r-- | node.c | 15 | ||||
-rw-r--r-- | ted.c | 12 | ||||
-rw-r--r-- | ted.h | 2 |
3 files changed, 19 insertions, 10 deletions
@@ -281,6 +281,21 @@ bool node_tab_close(Ted *ted, Node *node, u32 index) { } } +bool node_pixels_to_buffer_pos(Node *node, vec2 wpos, TextBuffer **pbuffer, BufferPos *ppos) { + if (!node) return false; + if (node->tabs) { + TextBuffer *buffer = node->tabs[node->active_tab]; + if (buffer_pixels_to_pos(buffer, wpos, ppos)) { + *pbuffer = buffer; + return true; + } + return false; + } else { + return node_pixels_to_buffer_pos(node->split_a, wpos, pbuffer, ppos) + || node_pixels_to_buffer_pos(node->split_b, wpos, pbuffer, ppos); + } +} + void node_frame(Ted *ted, Node *node, Rect r) { const Settings *settings = ted_active_settings(ted); if (node->tabs) { @@ -826,16 +826,8 @@ void ted_press_key(Ted *ted, SDL_Keycode keycode, SDL_Keymod modifier) { } bool ted_get_mouse_buffer_pos(Ted *ted, TextBuffer **pbuffer, BufferPos *ppos) { - arr_foreach_ptr(ted->buffers, TextBufferPtr, pbuf) { - TextBuffer *buffer = *pbuf; - BufferPos pos = {0}; - if (buffer_pixels_to_pos(buffer, ted_mouse_pos(ted), &pos)) { - if (ppos) *ppos = pos; - if (pbuffer) *pbuffer = buffer; - return true; - } - } - return false; + if (!arr_len(ted->nodes)) return false; + return node_pixels_to_buffer_pos(ted->nodes[0], ted_mouse_pos(ted), pbuffer, ppos); } void ted_flash_error_cursor(Ted *ted) { @@ -1063,6 +1063,8 @@ void node_split(Ted *ted, Node *node, bool vertical); void node_split_switch(Ted *ted); /// swap the two sides of the current split. void node_split_swap(Ted *ted); +/// convert pixel position to buffer position, only considering visible buffers. +bool node_pixels_to_buffer_pos(Node *node, vec2 wpos, TextBuffer **pbuffer, BufferPos *ppos); // === session.c === /// store ted session |