From 4d7533828738401b76bab5be2e22f0d4a69e30b1 Mon Sep 17 00:00:00 2001 From: pommicket Date: Wed, 5 Mar 2025 19:41:00 -0500 Subject: Fix IDE hover --- node.c | 15 +++++++++++++++ ted.c | 12 ++---------- ted.h | 2 ++ 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/node.c b/node.c index 8f32087..4ea724a 100644 --- a/node.c +++ b/node.c @@ -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) { diff --git a/ted.c b/ted.c index 0765898..7cddd68 100644 --- a/ted.c +++ b/ted.c @@ -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) { diff --git a/ted.h b/ted.h index f35b27d..da4144e 100644 --- a/ted.h +++ b/ted.h @@ -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 -- cgit v1.2.3