diff --git a/frontend/apps/reader/modules/readerbookmark.lua b/frontend/apps/reader/modules/readerbookmark.lua index ec491042e..1b537d37e 100644 --- a/frontend/apps/reader/modules/readerbookmark.lua +++ b/frontend/apps/reader/modules/readerbookmark.lua @@ -95,21 +95,21 @@ function ReaderBookmark:onShowBookmark() end v.text = "Page "..page.." "..v.notes.." @ "..v.datetime end - - local menu_container = CenterContainer:new{ - dimen = Screen:getSize(), - } local bm_menu = Menu:new{ title = "Bookmarks", item_table = self.bookmarks, - width = Screen:getWidth()-50, - height = Screen:getHeight()-50, + width = Screen:getWidth(), + height = Screen:getHeight(), show_parent = menu_container, + is_borderless = true, + } + + local menu_container = CenterContainer:new{ + dimen = Screen:getSize(), + bm_menu, } - - table.insert(menu_container, bm_menu) - + -- buid up menu widget method as closure local doc = self.ui.document local view = self.view diff --git a/frontend/apps/reader/modules/readerfooter.lua b/frontend/apps/reader/modules/readerfooter.lua index ca97caf3b..232ea22f3 100644 --- a/frontend/apps/reader/modules/readerfooter.lua +++ b/frontend/apps/reader/modules/readerfooter.lua @@ -16,6 +16,7 @@ local Font = require("ui/font") local DEBUG = require("dbg") local ReaderFooter = InputContainer:new{ + mode = 1, visible = true, pageno = nil, pages = nil, @@ -85,7 +86,7 @@ end function ReaderFooter:updateFooterPage() if type(self.pageno) ~= "number" then return end self.progress_bar.percentage = self.pageno / self.pages - + if self.show_time then self.progress_text.text = os.date("%H:%M") else @@ -96,7 +97,7 @@ end function ReaderFooter:updateFooterPos() if type(self.position) ~= "number" then return end self.progress_bar.percentage = self.position / self.doc_height - + if self.show_time then self.progress_text.text = os.date("%H:%M") else @@ -116,6 +117,23 @@ function ReaderFooter:onPosUpdate(pos) self:updateFooterPos() end +function ReaderFooter:applyFooterMode() + -- three modes switcher for reader footer + -- 0 for footer off + -- 1 for footer page info + -- 2 for footer time info + if self.mode == 0 then + self.view.footer_visible = false + else + self.view.footer_visible = true + end + if self.mode == 1 then + self.show_time = false + elseif self.mode == 2 then + self.show_time = true + end +end + function ReaderFooter:onTapFooter(arg, ges) if self.view.flipping_visible then local pos = ges.pos @@ -123,7 +141,8 @@ function ReaderFooter:onTapFooter(arg, ges) local percentage = (pos.x - dimen.x)/dimen.w self.ui:handleEvent(Event:new("GotoPercentage", percentage)) else - self.show_time = not self.show_time + self.mode = (self.mode + 1) % 3 + self:applyFooterMode() end if self.pageno then self:updateFooterPage() @@ -131,10 +150,7 @@ function ReaderFooter:onTapFooter(arg, ges) self:updateFooterPos() end UIManager:setDirty(self.view.dialog, "partial") - -- consume this tap when footer is visible - if self.view.footer_visible then - return true - end + return true end function ReaderFooter:onHoldFooter(arg, ges) diff --git a/frontend/apps/reader/modules/readertoc.lua b/frontend/apps/reader/modules/readertoc.lua index bfc6c752e..84f9d1160 100644 --- a/frontend/apps/reader/modules/readertoc.lua +++ b/frontend/apps/reader/modules/readertoc.lua @@ -53,6 +53,10 @@ function ReaderToc:onUpdateToc() return true end +function ReaderToc:onPageUpdate(pageno) + self.pageno = pageno +end + function ReaderToc:fillToc() self.toc = self.ui.document:getToc() end @@ -103,21 +107,31 @@ function ReaderToc:onShowToc() v.mandatory = v.page end end - - local menu_container = CenterContainer:new{ - dimen = Screen:getSize(), - } + -- update current entry + if #self.toc > 0 then + for i=1, #self.toc do + v = self.toc[i] + if v.page > self.pageno then + self.toc.current = i > 1 and i - 1 or 1 + break + end + end + end local toc_menu = Menu:new{ title = _("Table of Contents"), item_table = self.toc, ui = self.ui, - width = Screen:getWidth()-50, - height = Screen:getHeight()-50, + width = Screen:getWidth(), + height = Screen:getHeight(), show_parent = menu_container, + is_borderless = true, } - table.insert(menu_container, toc_menu) + local menu_container = CenterContainer:new{ + dimen = Screen:getSize(), + toc_menu, + } function toc_menu:onMenuChoice(item) self.ui:handleEvent(Event:new("PageUpdate", item.page)) diff --git a/frontend/ui/widget/menu.lua b/frontend/ui/widget/menu.lua index 8216b61f7..a96d11f93 100644 --- a/frontend/ui/widget/menu.lua +++ b/frontend/ui/widget/menu.lua @@ -160,7 +160,7 @@ function MenuItem:init() local mandatory = self.mandatory and ""..self.mandatory.." " or "" local mandatory_w = RenderText:sizeUtf8Text(0, self.dimen.w, self.info_face, ""..mandatory, true).x - + w = RenderText:sizeUtf8Text(0, self.dimen.w, self.face, self.text, true).x if w + mandatory_w >= self.content_width then if Device:isTouchDevice() then @@ -174,20 +174,22 @@ function MenuItem:init() self.text = RenderText:getSubTextByWidth(self.text, self.face, self.content_width - indicator_w - mandatory_w, true) .. indicator end - + local text_container = LeftContainer:new{ dimen = Geom:new{w = self.content_width, h = self.dimen.h}, TextWidget:new{ text = self.text, face = self.face, + bold = self.bold, } } - + local mandatory_container = RightContainer:new{ dimen = Geom:new{w = self.content_width, h = self.dimen.h}, TextWidget:new{ text = mandatory, face = self.info_face, + bold = self.bold, } } @@ -283,6 +285,7 @@ local Menu = FocusManager:new{ width = 500, -- height will be calculated according to item number if not given height = nil, + header_padding = Screen:scaleByDPI(10), dimen = Geom:new{}, item_table = {}, item_shortcuts = { @@ -322,7 +325,7 @@ function Menu:_recalculateDimen() w = self.dimen.w, h = Screen:scaleByDPI(46), -- hardcoded for now } - self.perpage = math.floor((self.dimen.h - self.dimen.x) / self.item_dimen.h) - 2 + self.perpage = math.floor((self.dimen.h - self.dimen.y - self.header_padding) / self.item_dimen.h) - 2 self.page_num = math.ceil(#self.item_table / self.perpage) end @@ -370,7 +373,10 @@ function Menu:init() self.page_info_right_chev } - local header = self.title_bar + local header = VerticalGroup:new{ + VerticalSpan:new{width = self.header_padding}, + self.title_bar, + } local body = self.item_group local footer = BottomContainer:new{ dimen = self.dimen:copy(), @@ -462,6 +468,7 @@ function Menu:init() if #self.item_table > 0 then -- if the table is not yet initialized, this call -- must be done manually: + self.page = math.ceil((self.item_table.current or 1) / self.perpage) self:updateItems(1) end end @@ -500,6 +507,7 @@ function Menu:updateItems(select_number) show_parent = self.show_parent, text = self.item_table[i].text, mandatory = self.item_table[i].mandatory, + bold = self.item_table.current == i, face = self.cface, dimen = self.item_dimen:new(), shortcut = item_shortcut, diff --git a/koreader-base b/koreader-base index 5c126ed08..14f92c892 160000 --- a/koreader-base +++ b/koreader-base @@ -1 +1 @@ -Subproject commit 5c126ed088bb57afa125cde82d601d1ef2acc4d3 +Subproject commit 14f92c89257527ef77f2dfd52e92181276c96452