diff options
| author | Francesco Abbate <francesco.bbt@gmail.com> | 2021-12-28 16:39:40 +0100 |
|---|---|---|
| committer | Francesco Abbate <francesco.bbt@gmail.com> | 2021-12-28 16:43:27 +0100 |
| commit | 8550049db81453ab2437a562b3d793a8a00f8275 (patch) | |
| tree | c2ed5c84023bbd3e587f748e66623279bb49c26f | |
| parent | 2cf3c6f7476d891cf3eb548409c109de315b3c6b (diff) | |
| download | lite-xl-8550049db81453ab2437a562b3d793a8a00f8275.tar.gz lite-xl-8550049db81453ab2437a562b3d793a8a00f8275.zip | |
Draw NagView in overlay mode
The NagView takes some actual space in the Y and when it appears
it cause the documents' content to be displaced.
The movement of the documents' content is annoying and should be
avoided so we draw the NagView entirely in overlay mode using defer
draw and we always keep its y size to zero to don't affect the
other application contents.
| -rw-r--r-- | data/core/nagview.lua | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/data/core/nagview.lua b/data/core/nagview.lua index 3d448cd4..35ae9b43 100644 --- a/data/core/nagview.lua +++ b/data/core/nagview.lua @@ -16,6 +16,7 @@ local NagView = View:extend() function NagView:new() NagView.super.new(self) self.size.y = 0 + self.show_height = 0 self.force_focus = false self.queue = {} end @@ -50,16 +51,16 @@ function NagView:update() NagView.super.update(self) if core.active_view == self and self.title then - self:move_towards(self.size, "y", self:get_target_height()) + self:move_towards(self, "show_height", self:get_target_height()) self:move_towards(self, "underline_progress", 1) else - self:move_towards(self.size, "y", 0) + self:move_towards(self, "show_height", 0) end end -function NagView:draw_overlay() +function NagView:dim_window_content() local ox, oy = self:get_content_offset() - oy = oy + self.size.y + oy = oy + self.show_height local w, h = core.root_view.size.x, core.root_view.size.y - oy core.root_view:defer_draw(function() renderer.draw_rect(ox, oy, w, h, style.nagbar_dim) @@ -81,7 +82,7 @@ function NagView:each_option() bh = self:get_buttons_height() ox,oy = self:get_content_offset() ox = ox + self.size.x - oy = oy + self.size.y - bh - style.padding.y + oy = oy + self.show_height - bh - style.padding.y for i = #self.options, 1, -1 do opt = self.options[i] @@ -123,19 +124,21 @@ function NagView:on_text_input(text) end -function NagView:draw() - if self.size.y <= 0 or not self.title then return end +local function draw_nagview_message(self) + if self.show_height <= 0 or not self.title then return end - self:draw_overlay() - self:draw_background(style.nagbar) + self:dim_window_content() + -- draw message's background local ox, oy = self:get_content_offset() + renderer.draw_rect(ox, oy, self.size.x, self.show_height, style.nagbar) + ox = ox + style.padding.x -- if there are other items, show it if #self.queue > 0 then local str = string.format("[%d]", #self.queue) - ox = common.draw_text(style.font, style.nagbar_text, str, "left", ox, oy, self.size.x, self.size.y) + ox = common.draw_text(style.font, style.nagbar_text, str, "left", ox, oy, self.size.x, self.show_height) ox = ox + style.padding.x end @@ -170,6 +173,10 @@ function NagView:draw() end end +function NagView:draw() + core.root_view:defer_draw(draw_nagview_message, self) +end + function NagView:get_message_height() local h = 0 for str in string.gmatch(self.message, "(.-)\n") do |
