From 51ed793d14cf4ed3232c4d1e9ca09979cddca2c4 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Wed, 13 Jun 2012 00:14:23 +0800 Subject: [PATCH] add screen rotate support --- frontend/ui/reader/readerfont.lua | 4 +++ frontend/ui/reader/readermenu.lua | 41 ++++++++++++++++++++++++++++--- frontend/ui/reader/readertoc.lua | 4 +++ frontend/ui/reader/readerview.lua | 15 +++++------ frontend/ui/readerui.lua | 5 ++++ frontend/ui/screen.lua | 1 + 6 files changed, 60 insertions(+), 10 deletions(-) diff --git a/frontend/ui/reader/readerfont.lua b/frontend/ui/reader/readerfont.lua index ea48e904a..c5563a17e 100644 --- a/frontend/ui/reader/readerfont.lua +++ b/frontend/ui/reader/readerfont.lua @@ -30,6 +30,10 @@ function ReaderFont:init() self.font_size = self.ui.document:getFontSize() end +function ReaderFont:onSetDimensions(dimen) + self.dimen = dimen +end + function ReaderFont:onShowFontMenu() -- build menu item_table local face_list = cre.getFontFaces() diff --git a/frontend/ui/reader/readermenu.lua b/frontend/ui/reader/readermenu.lua index 833f8f04b..0c778cd9a 100644 --- a/frontend/ui/reader/readermenu.lua +++ b/frontend/ui/reader/readermenu.lua @@ -8,17 +8,46 @@ function ReaderMenu:onShowMenu() local item_table = {} table.insert(item_table, { - text = "Switch zoom mode", + text = "Screen rotate", sub_item_table = { { - text = "Zoom to fit content width", + text = "rotate 90 degree clockwise", + callback = function() + Screen:screenRotate("clockwise") + self.ui:handleEvent(Event:new("SetDimensions", Screen:getSize())) + end }, { - text = "Zoom to fit content height", + text = "rotate 90 degree anticlockwise", + callback = function() + Screen:screenRotate("anticlockwise") + self.ui:handleEvent(Event:new("SetDimensions", Screen:getSize())) + end }, } }) + if self.ui.document.info.has_pages then + table.insert(item_table, { + text = "Switch zoom mode", + sub_item_table = { + { + text = "Zoom to fit content width", + }, + { + text = "Zoom to fit content height", + }, + } + }) + else + table.insert(item_table, { + text = "Font menu", + callback = function() + self.ui:handleEvent(Event:new("ShowFontMenu")) + end + }) + end + table.insert(item_table, { text = "Return to file browser" }) @@ -30,6 +59,12 @@ function ReaderMenu:onShowMenu() height = #item_table + 3 * 28 } + function main_menu:onMenuChoice(item) + if item.callback then + item.callback() + end + end + UIManager:show(main_menu) return true diff --git a/frontend/ui/reader/readertoc.lua b/frontend/ui/reader/readertoc.lua index 586811e5c..8528891dd 100644 --- a/frontend/ui/reader/readertoc.lua +++ b/frontend/ui/reader/readertoc.lua @@ -69,6 +69,10 @@ function ReaderToc:onShowToc() UIManager:show(toc_menu) end +function ReaderToc:onSetDimensions(dimen) + self.dimen = dimen +end + function ReaderToc:onPageUpdate(new_page_no) self.current_page = new_page_no end diff --git a/frontend/ui/reader/readerview.lua b/frontend/ui/reader/readerview.lua index 20c23a202..1beaf1581 100644 --- a/frontend/ui/reader/readerview.lua +++ b/frontend/ui/reader/readerview.lua @@ -59,21 +59,16 @@ function ReaderView:recalculate() self.page_area = page_size -- reset our size - self.visible_area:setSizeTo(self.ui.dimen) + self.visible_area:setSizeTo(self.dimen) -- and recalculate it according to page size self.visible_area:offsetWithin(self.page_area, 0, 0) else - self.visible_area:setSizeTo(self.ui.dimen) + self.visible_area:setSizeTo(self.dimen) end -- flag a repaint UIManager:setDirty(self.dialog) end -function ReaderView:onSetDimensions(dimensions) - -- recalculate view - self:recalculate() -end - function ReaderView:PanningUpdate(dx, dy) DEBUG("pan by", dx, dy) local old = self.visible_area:copy() @@ -87,6 +82,12 @@ function ReaderView:PanningUpdate(dx, dy) return true end +function ReaderView:onSetDimensions(dimensions) + self.dimen = dimensions + -- recalculate view + self:recalculate() +end + function ReaderView:onPageUpdate(new_page_no) self.state.page = new_page_no self:recalculate() diff --git a/frontend/ui/readerui.lua b/frontend/ui/readerui.lua index 8a9114b50..0f6c96bd3 100644 --- a/frontend/ui/readerui.lua +++ b/frontend/ui/readerui.lua @@ -43,6 +43,7 @@ function ReaderUI:init() -- a view container (so it must be child #1!) self[1] = ReaderView:new{ dialog = self.dialog, + dimen = self.dimen, ui = self } -- rotation controller @@ -114,6 +115,10 @@ function ReaderUI:init() self:handleEvent(Event:new("SetDimensions", self.dimen)) end +function ReaderUI:onSetDimensions(dimen) + self.dimen = dimen +end + function ReaderUI:onClose() DEBUG("closing reader") if self.document then diff --git a/frontend/ui/screen.lua b/frontend/ui/screen.lua index e37f3433f..dc0b1d9c6 100644 --- a/frontend/ui/screen.lua +++ b/frontend/ui/screen.lua @@ -66,6 +66,7 @@ function Screen:screenRotate(orien) self.fb:setOrientation(self.cur_rotation_mode) self.fb:close() self.fb = einkfb.open("/dev/fb0") + Input.rotation = self.cur_rotation_mode end function Screen:getSize()