Bookmarks dogear: fix position with CRe top status bar (#7312)

Draw it below the CRe top status bar rather than over it.
pull/7322/head
poire-z 3 years ago committed by GitHub
parent 00aef60e17
commit 173d9600f0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -4,6 +4,8 @@ local Geom = require("ui/geometry")
local IconWidget = require("ui/widget/iconwidget")
local InputContainer = require("ui/widget/container/inputcontainer")
local RightContainer = require("ui/widget/container/rightcontainer")
local VerticalGroup = require("ui/widget/verticalgroup")
local VerticalSpan = require("ui/widget/verticalspan")
local Screen = Device.screen
local ReaderDogear = InputContainer:new{}
@ -17,6 +19,8 @@ function ReaderDogear:init()
-- may be hidden by the icon (kopt's page_margin is quite obscure).
self.dogear_max_size = math.ceil( math.min(Screen:getWidth(), Screen:getHeight()) / 32)
self.dogear_size = nil
self.dogear_y_offset = 0
self.top_pad = nil
self:setupDogear()
self:resetLayout()
end
@ -30,8 +34,9 @@ function ReaderDogear:setupDogear(new_dogear_size)
if self[1] then
self[1]:free()
end
self[1] = RightContainer:new{
dimen = Geom:new{w = Screen:getWidth(), h = self.dogear_size},
self.top_pad = VerticalSpan:new{width = self.dogear_y_offset}
self.vgroup = VerticalGroup:new{
self.top_pad,
IconWidget:new{
icon = "dogear.opaque",
rotation_angle = BD.mirroredUILayout() and 90 or 0,
@ -39,6 +44,10 @@ function ReaderDogear:setupDogear(new_dogear_size)
height = self.dogear_size,
}
}
self[1] = RightContainer:new{
dimen = Geom:new{w = Screen:getWidth(), h = self.dogear_y_offset + self.dogear_size},
self.vgroup
}
end
end
@ -74,6 +83,34 @@ function ReaderDogear:onSetPageMargins(margins)
self:setupDogear(new_dogear_size)
end
function ReaderDogear:updateDogearOffset()
if self.ui.document.info.has_pages then
return
end
self.dogear_y_offset = 0
if self.view.view_mode == "page" then
self.dogear_y_offset = self.ui.document:getHeaderHeight()
end
-- Update components heights and positionnings
if self[1] then
self[1].dimen.h = self.dogear_y_offset + self.dogear_size
self.top_pad.width = self.dogear_y_offset
self.vgroup:resetLayout()
end
end
function ReaderDogear:onUpdatePos()
-- Catching the top status bar toggling with :onSetStatusLine()
-- would be too early. But "UpdatePos" is sent after it has
-- been applied
self:updateDogearOffset()
end
function ReaderDogear:onChangeViewMode()
-- No top status bar when switching between page and scroll mode
self:updateDogearOffset()
end
function ReaderDogear:resetLayout()
local new_screen_width = Screen:getWidth()
if new_screen_width == self._last_screen_width then return end

Loading…
Cancel
Save