mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Bookmarks dogear: fix position with CRe top status bar (#7312)
Draw it below the CRe top status bar rather than over it.
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user