From 476733dc8742dcaa00c03a6352b56b9321150271 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Fri, 14 Dec 2012 02:32:16 +0800 Subject: [PATCH] register font menu to main reader menu for touch device --- frontend/ui/reader/readerfont.lua | 130 +++++++++++++++++------------- 1 file changed, 74 insertions(+), 56 deletions(-) diff --git a/frontend/ui/reader/readerfont.lua b/frontend/ui/reader/readerfont.lua index 51fa71744..b84ff6a82 100644 --- a/frontend/ui/reader/readerfont.lua +++ b/frontend/ui/reader/readerfont.lua @@ -1,31 +1,50 @@ ReaderFont = InputContainer:new{ - key_events = { - ShowFontMenu = { {"F"}, doc = "show font menu"}, - IncreaseSize = { - { "Shift", Input.group.PgFwd }, - doc = "increase font size", - event = "ChangeSize", args = "increase" }, - DecreaseSize = { - { "Shift", Input.group.PgBack }, - doc = "decrease font size", - event = "ChangeSize", args = "decrease" }, - IncreaseLineSpace = { - { "Alt", Input.group.PgFwd }, - doc = "increase line space", - event = "ChangeLineSpace", args = "increase" }, - DecreaseLineSpace = { - { "Alt", Input.group.PgBack }, - doc = "decrease line space", - event = "ChangeLineSpace", args = "decrease" }, - }, - dimen = Geom:new{ w = Screen:getWidth()-20, h = Screen:getHeight()-20}, - font_face = nil, font_size = nil, + face_table = {}, line_space_percent = 100, + font_menu_title = "Font Menu", } function ReaderFont:init() + if not Device:hasNoKeyboard() then + -- add shortcut for keyboard + self.key_events = { + ShowFontMenu = { {"F"}, doc = "show font menu" }, + IncreaseSize = { + { "Shift", Input.group.PgFwd }, + doc = "increase font size", + event = "ChangeSize", args = "increase" }, + DecreaseSize = { + { "Shift", Input.group.PgBack }, + doc = "decrease font size", + event = "ChangeSize", args = "decrease" }, + IncreaseLineSpace = { + { "Alt", Input.group.PgFwd }, + doc = "increase line space", + event = "ChangeLineSpace", args = "increase" }, + DecreaseLineSpace = { + { "Alt", Input.group.PgBack }, + doc = "decrease line space", + event = "ChangeLineSpace", args = "decrease" }, + } + end + -- build menu item_table + local face_list = cre.getFontFaces() + for k,v in ipairs(face_list) do + table.insert(self.face_table, { + text = v, + callback = function() + self:setFont(v) + end + }) + face_list[k] = {text = v} + end + -- insert table to main reader menu + table.insert(self.ui.menu.item_table, { + text = self.font_menu_title, + sub_item_table = self.face_table, + }) end function ReaderFont:onSetDimensions(dimen) @@ -45,44 +64,27 @@ function ReaderFont:onReadSettings(config) end function ReaderFont:onShowFontMenu() - -- build menu item_table - local face_list = cre.getFontFaces() - for k,v in ipairs(face_list) do - face_list[k] = {text = v} - end - - -- NuPogodi, 18.05.12: define the number of the current font in face_list - --local item_no = 0 - --while face_list[item_no] ~= self.font_face and item_no < #face_list do - --item_no = item_no + 1 - --end - --local fonts_menu = Menu:new{ - --menu_title = "Fonts Menu", - --item_array = face_list, - --current_entry = item_no - 1, - --} - - local font_menu = Menu:new{ - title = "Font Menu", - item_table = face_list, - dimen = self.dimen, - caller = self, - ui = self.ui + -- build menu widget + local main_menu = Menu:new{ + title = self.font_menu_title, + item_table = self.face_table, + width = Screen:getWidth() - 100, } - - function font_menu:onMenuChoice(item) - if item.text and self.font_face ~= item.text then - self.caller.font_face = item.text - msg = InfoMessage:new{ text = "Redrawing with "..item.text} - UIManager:show(msg) - self.ui.document:setFontFace(item.text) - -- signal readerrolling to update pos in new height - self.ui:handleEvent(Event:new("UpdatePos")) - UIManager:close(msg) + function main_menu:onMenuChoice(item) + if item.callback then + item.callback() end end - - UIManager:show(font_menu) + -- build container + local menu_container = CenterContainer:new{ + main_menu, + dimen = Screen:getSize(), + } + main_menu.close_callback = function () + UIManager:close(menu_container) + end + -- show menu + UIManager:show(menu_container) return true end @@ -121,3 +123,19 @@ function ReaderFont:onCloseDocument() self.ui.doc_settings:saveSetting("font_face", self.font_face) self.ui.doc_settings:saveSetting("font_size", self.font_size) end + +function ReaderFont:setFont(face) + if face and self.font_face ~= face then + self.font_face = face + msg = InfoMessage:new{ text = "Redrawing with "..face } + UIManager:show(msg) + + self.ui.document:setFontFace(face) + -- signal readerrolling to update pos in new height + self.ui:handleEvent(Event:new("UpdatePos")) + + UIManager:close(msg) + end +end + +