summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--node.c15
-rw-r--r--ted.c12
-rw-r--r--ted.h2
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