mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
register font menu to main reader menu for touch device
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user