diff options
Diffstat (limited to 'text.lua')
-rw-r--r-- | text.lua | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/text.lua b/text.lua index 63c559d..4ccd874 100644 --- a/text.lua +++ b/text.lua @@ -22,29 +22,35 @@ function Text.draw(State, line_index, y, startpos) local screen_line = Text.screen_line(line, line_cache, i) --? print('text.draw:', screen_line, 'at', line_index,pos, 'after', x,y) local frag_len = utf8.len(screen_line) - -- render fragment + -- render any highlights if State.selection1.line then local lo, hi = Text.clip_selection(State, line_index, pos, pos+frag_len) Text.draw_highlight(State, line, State.left,y, pos, lo,hi) end - App.color(Text_color) - App.screen.print(screen_line, State.left,y) - -- render cursor if necessary if line_index == State.cursor1.line then - if pos <= State.cursor1.pos and pos + frag_len >= State.cursor1.pos then - if State.search_term then - local data = State.lines[State.cursor1.line].data - local cursor_offset = Text.offset(data, State.cursor1.pos) - if data:sub(cursor_offset, cursor_offset+#State.search_term-1) == State.search_term then - local lo_px = Text.draw_highlight(State, line, State.left,y, pos, State.cursor1.pos, State.cursor1.pos+utf8.len(State.search_term)) - App.color(Text_color) - love.graphics.print(State.search_term, State.left+lo_px,y) - end - else + -- render search highlight or cursor + if State.search_term then + local data = State.lines[State.cursor1.line].data + local cursor_offset = Text.offset(data, State.cursor1.pos) + if data:sub(cursor_offset, cursor_offset+#State.search_term-1) == State.search_term then + local save_selection = State.selection1 + State.selection1 = {line=line_index, pos=State.cursor1.pos+utf8.len(State.search_term)} + local lo, hi = Text.clip_selection(State, line_index, pos, pos+frag_len) + Text.draw_highlight(State, line, State.left,y, pos, lo,hi) + State.selection1 = save_selection + end + else + if pos <= State.cursor1.pos and pos + frag_len > State.cursor1.pos then + Text.pretend_draw_cursor(State, State.left+Text.x(screen_line, State.cursor1.pos-pos+1), y) + elseif pos + frag_len == State.cursor1.pos then + -- Keep pretend cursor_x/cursor_y in sync with upstream. Text.pretend_draw_cursor(State, State.left+Text.x(screen_line, State.cursor1.pos-pos+1), y) end end end + -- render fragment + App.color(Text_color) + App.screen.print(screen_line, State.left,y) y = y + State.line_height if y >= App.screen.height then break |