From 503d5101b5f8232ad9221763f6b4e26c4eae42a3 Mon Sep 17 00:00:00 2001 From: rxi Date: Sat, 18 Apr 2020 15:24:45 +0100 Subject: [PATCH] Reorganising of DocView's draw functions * Renamed `draw_line_body` => `draw_line_main` * Renamed `draw_gutter_text` => `draw_line_gutter` * Added `draw_line_text` for *just* the line text --- data/core/commandview.lua | 2 +- data/core/docview.lua | 24 +++++++++++++++--------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/data/core/commandview.lua b/data/core/commandview.lua index 2a0c93a0..d1677412 100644 --- a/data/core/commandview.lua +++ b/data/core/commandview.lua @@ -204,7 +204,7 @@ function CommandView:draw_line_highlight() end -function CommandView:draw_gutter_text(idx, x, y) +function CommandView:draw_line_gutter(idx, x, y) local yoffset = self:get_line_text_y_offset() local pos = self.position local color = common.lerp(style.text, style.accent, self.gutter_text_brightness / 100) diff --git a/data/core/docview.lua b/data/core/docview.lua index 2203e5f9..bb6e42ff 100644 --- a/data/core/docview.lua +++ b/data/core/docview.lua @@ -340,11 +340,22 @@ end function DocView:draw_line_text(idx, x, y) local cl = self:get_cached_line(idx) + local tx, ty = x, y + self:get_line_text_y_offset() + local font = self:get_font() + for _, type, text in highlighter.each_token(cl.tokens) do + local color = style.syntax[type] + tx = renderer.draw_text(font, text, tx, ty, color) + end +end + + +function DocView:draw_line_body(idx, x, y) local line, col = self.doc:get_selection() -- draw selection if it overlaps this line local line1, col1, line2, col2 = self.doc:get_selection(true) if idx >= line1 and idx <= line2 then + local cl = self:get_cached_line(idx) if line1 ~= idx then col1 = 1 end if line2 ~= idx then col2 = #cl.text + 1 end local x1 = x + self:get_col_x_offset(idx, col1) @@ -360,12 +371,7 @@ function DocView:draw_line_text(idx, x, y) end -- draw line's text - local tx, ty = x, y + self:get_line_text_y_offset() - local font = self:get_font() - for _, type, text in highlighter.each_token(cl.tokens) do - local color = style.syntax[type] - tx = renderer.draw_text(font, text, tx, ty, color) - end + self:draw_line_text(idx, x, y) -- draw caret if it overlaps this line if line == idx and core.active_view == self @@ -378,7 +384,7 @@ function DocView:draw_line_text(idx, x, y) end -function DocView:draw_gutter_text(idx, x, y) +function DocView:draw_line_gutter(idx, x, y) local color = style.line_number local line1, _, line2, _ = self.doc:get_selection(true) if idx >= line1 and idx <= line2 then @@ -402,7 +408,7 @@ function DocView:draw() local _, y = self:get_line_screen_position(minline) local x = self:get_content_offset() + style.padding.x for i = minline, maxline do - self:draw_gutter_text(i, x, y) + self:draw_line_gutter(i, x, y) y = y + lh end @@ -411,7 +417,7 @@ function DocView:draw() local pos = self.position core.push_clip_rect(pos.x + gw, pos.y, self.size.x, self.size.y) for i = minline, maxline do - self:draw_line_text(i, x, y) + self:draw_line_body(i, x, y) y = y + lh end core.pop_clip_rect()