Skip to content

Commit

Permalink
Ensure minimum height for the in-fill in progress bar
Browse files Browse the repository at this point in the history
  • Loading branch information
Jellby committed Nov 14, 2020
1 parent 8403154 commit d8c4acf
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 6 deletions.
2 changes: 1 addition & 1 deletion frontend/apps/reader/modules/readerfooter.lua
Original file line number Diff line number Diff line change
Expand Up @@ -660,7 +660,7 @@ function ReaderFooter:resetLayout(force_reset)
else
bar_height = self.settings.progress_style_thick_height or PROGRESS_BAR_STYLE_THICK_DEFAULT_HEIGHT
end
self.progress_bar.height = Screen:scaleBySize(bar_height)
self.progress_bar:setHeight(bar_height)

self.horizontal_group:resetLayout()
self.footer_positioner.dimen.w = new_screen_width
Expand Down
30 changes: 25 additions & 5 deletions frontend/ui/widget/progresswidget.lua
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ local ProgressWidget = Widget:new{
fill_from_right = false,
allow_mirroring = true,
_mirroredUI = BD.mirroredUILayout(),
_orig_margin_v = nil,
_orig_bordersize = nil,
}

function ProgressWidget:getSize()
Expand Down Expand Up @@ -124,26 +126,44 @@ function ProgressWidget:getPercentageFromPosition(pos)
return x / width
end

function ProgressWidget:setHeight(height)
self.height = Screen:scaleBySize(height)
-- Adjust vertical margin and border size to ensure there's
-- at least 1 pixel left for the actual bar
self._orig_margin_v = self._orig_margin_v or self.margin_v
self._orig_bordersize = self._orig_bordersize or self.bordersize
local margin_v_min = self._orig_margin_v > 0 and 1 or 0
local bordersize_min = self._orig_bordersize > 0 and 1 or 0
self.margin_v = math.min(self._orig_margin_v, math.floor((self.height - 2*self._orig_bordersize - 1) / 2))
self.margin_v = math.max(self.margin_v, margin_v_min)
self.bordersize = math.min(self._orig_bordersize, math.floor((self.height - 2*self.margin_v - 1) / 2))
self.bordersize = math.max(self.bordersize, bordersize_min)
end

function ProgressWidget:updateStyle(thick, height)
if thick then
if height then
self.height = Screen:scaleBySize(height)
end
self.margin_h = Screen:scaleBySize(3)
self.margin_v = Screen:scaleBySize(1)
self.bordersize = Screen:scaleBySize(1)
self.radius = Screen:scaleBySize(2)
self.bgcolor = Blitbuffer.COLOR_WHITE
else
self._orig_margin_v = nil
self._orig_bordersize = nil
if height then
self.height = Screen:scaleBySize(height)
self:setHeight(height)
end
else
self.margin_h = 0
self.margin_v = 0
self.bordersize = 0
self.radius = 0
self.bgcolor = Blitbuffer.COLOR_GRAY
self.ticks = nil
self._orig_margin_v = nil
self._orig_bordersize = nil
if height then
self:setHeight(height)
end
end
end

Expand Down

0 comments on commit d8c4acf

Please sign in to comment.