Add a simple cache to `DocView:get_h_scrollable_size`

This function gets called at every `core.step`, so we should avoid
having to recalculate the scrollable size every time, as it could get
very expensive on long lines.
This commit is contained in:
Guldoman 2021-09-03 00:50:21 +02:00
parent f18629ab64
commit e559afaefc
No known key found for this signature in database
GPG Key ID: C08A498EC7F1AFDD
1 changed files with 11 additions and 4 deletions

View File

@ -102,11 +102,18 @@ function DocView:get_scrollable_size()
end end
function DocView:get_h_scrollable_size() function DocView:get_h_scrollable_size()
local doc_change_id = self.doc:get_change_id()
if self.last_doc_change_id ~= doc_change_id then
self.last_doc_change_id = doc_change_id
local xmargin = 3 * self:get_font():get_width(' ') -- from DocView:scroll_to_make_visible local xmargin = 3 * self:get_font():get_width(' ') -- from DocView:scroll_to_make_visible
-- TODO: make Doc calculate the real longest line in pixels, not in characters,
-- as the current implementation only works for monospace fonts
local long_line = next(self.doc.long_lines.line_numbers) or 1 local long_line = next(self.doc.long_lines.line_numbers) or 1
return self:get_col_x_offset(long_line, self.doc.long_lines.length) self.h_scrollable_size = self:get_col_x_offset(long_line, self.doc.long_lines.length)
+ self:get_gutter_width() + xmargin + self:get_gutter_width() + xmargin
end end
return self.h_scrollable_size
end
function DocView:get_font() function DocView:get_font()
return style[self.font] return style[self.font]