From 15b8f4d57422e7917e3c64e1f9f92a29d0bb0094 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Sun, 26 Feb 2012 10:42:04 +0800 Subject: [PATCH] mod: fontchooser and pdfreader code clean up --- filechooser.lua | 13 ++-- fontchooser.lua | 172 +----------------------------------------------- pdfreader.lua | 9 +-- 3 files changed, 11 insertions(+), 183 deletions(-) diff --git a/filechooser.lua b/filechooser.lua index 0662aedd9..d7007f9ee 100644 --- a/filechooser.lua +++ b/filechooser.lua @@ -4,6 +4,7 @@ require "graphics" require "fontchooser" require "filesearcher" require "inputbox" +require "selectmenu" FileChooser = { -- Class vars: @@ -66,7 +67,6 @@ function FileChooser:updateFont() self.face = freetype.newBuiltinFace(FontChooser.cfont, self.fsize) self.fhash = FontChooser.cfont..self.fsize end - if self.ffhash ~= FontChooser.ffont..self.ffsize then self.fface = freetype.newBuiltinFace(FontChooser.ffont, self.ffsize) self.ffhash = FontChooser.ffont..self.ffsize @@ -77,7 +77,6 @@ function FileChooser:choose(ypos, height) local perpage = math.floor(height / self.spacing) - 1 local pagedirty = true local markerdirty = false - self:updateFont() local prevItem = function () if self.current == 1 then @@ -109,6 +108,7 @@ function FileChooser:choose(ypos, height) end while true do + self:updateFont() if pagedirty then fb.bb:paintRect(0, ypos, fb.bb:getWidth(), height, 0) local c @@ -153,9 +153,12 @@ function FileChooser:choose(ypos, height) elseif ev.code == KEY_FW_DOWN then nextItem() elseif ev.code == KEY_F then -- invoke fontchooser menu - --FontChooser:init() - FontChooser:choose(0, height) - self:updateFont() + FontChooser:init() + fonts_menu = SelectMenu:new{ + menu_title = "Fonts Menu", + item_array = FontChooser.fonts, + } + FontChooser.cfont = FontChooser.fonts[fonts_menu:choose(0, height)] pagedirty = true elseif ev.code == KEY_S then -- invoke search input keywords = InputBox:input(height-100, 100, "Search:") diff --git a/fontchooser.lua b/fontchooser.lua index 0cf6b4292..96e192319 100644 --- a/fontchooser.lua +++ b/fontchooser.lua @@ -1,190 +1,20 @@ -require "rendertext" -require "keys" -require "graphics" FontChooser = { - -- font name for content + -- font name for menu contents cfont = "sans", - -- font for displaying file/dir names - fsize = 25, - face = nil, - fhash = nil, - -- font name for title tfont = "Helvetica-BoldOblique", - -- font for page title - tfsize = 30, - tface = nil, - tfhash = nil, - -- font name for footer ffont = "sans", - -- font for page footer display - ffsize = 16, - fface = nil, - ffhash = nil, - - -- title height - title_H = 45, - -- spacing between lines - spacing = 40, - -- foot height - foot_H = 27, -- state buffer fonts = {"sans", "cjk", "mono", "Courier", "Courier-Bold", "Courier-Oblique", "Courier-BoldOblique", "Helvetica", "Helvetica-Oblique", "Helvetica-BoldOblique", "Times-Roman", "Times-Bold", "Times-Italic", "Times-BoldItalic",}, - items = 14, - page = 1, - current = 1, - oldcurrent = 0, } function FontChooser:init() clearglyphcache() - self.items = #self.fonts end -function FontChooser:updateFont() - if self.fhash ~= FontChooser.cfont..self.fsize then - self.face = freetype.newBuiltinFace(FontChooser.cfont, self.fsize) - self.fhash = FontChooser.cfont..self.fsize - end - - if self.tfhash ~= FontChooser.tfont..self.tfsize then - self.tface = freetype.newBuiltinFace(FontChooser.tfont, self.tfsize) - self.tfhash = FontChooser.tfont..self.tfsize - end - - if self.ffhash ~= FontChooser.ffont..self.ffsize then - self.fface = freetype.newBuiltinFace(FontChooser.ffont, self.ffsize) - self.ffhash = FontChooser.ffont..self.ffsize - end -end - -function FontChooser:choose(ypos, height) - local perpage = math.floor(height / self.spacing) - 2 - local pagedirty = true - local markerdirty = false - self:updateFont() - - local prevItem = function () - if self.current == 1 then - if self.page > 1 then - self.current = perpage - self.page = self.page - 1 - pagedirty = true - end - else - self.current = self.current - 1 - markerdirty = true - end - end - - local nextItem = function () - if self.current == perpage then - if self.page < (self.items / perpage) then - self.current = 1 - self.page = self.page + 1 - pagedirty = true - end - else - if self.page ~= math.floor(self.items / perpage) + 1 - or self.current + (self.page-1)*perpage < self.items then - self.current = self.current + 1 - markerdirty = true - end - end - end - - - while true do - if pagedirty then - -- draw menu title - fb.bb:paintRect(0, ypos, fb.bb:getWidth(), self.title_H + 10, 0) - fb.bb:paintRect(30, ypos + 10, fb.bb:getWidth() - 60, self.title_H, 5) - x = fb.bb:getWidth() - 220 -- move text to the right - y = ypos + self.title_H - renderUtf8Text(fb.bb, x, y, self.tface, self.tfhash, - "Fonts Menu", true) - - -- draw font items - fb.bb:paintRect(0, ypos + self.title_H + 10, fb.bb:getWidth(), height - self.title_H, 0) - local c - for c = 1, perpage do - local i = (self.page - 1) * perpage + c - if i <= self.items then - y = ypos + self.title_H + (self.spacing * c) - renderUtf8Text(fb.bb, 50, y, self.face, self.fhash, self.fonts[i], true) - end - end - - -- draw footer - y = ypos + self.title_H + (self.spacing * perpage) + self.foot_H - x = (fb.bb:getWidth() / 2) - 50 - renderUtf8Text(fb.bb, x, y, self.fface, self.ffhash, - "Page "..self.page.." of "..(math.floor(self.items / perpage)+1), true) - markerdirty = true - end - - if markerdirty then - if not pagedirty then - if self.oldcurrent > 0 then - y = ypos + self.title_H + (self.spacing * self.oldcurrent) + 10 - fb.bb:paintRect(30, y, fb.bb:getWidth() - 60, 3, 0) - fb:refresh(1, 30, y, fb.bb:getWidth() - 60, 3) - end - end - -- draw new marker line - y = ypos + self.title_H + (self.spacing * self.current) + 10 - fb.bb:paintRect(30, y, fb.bb:getWidth() - 60, 3, 15) - if not pagedirty then - fb:refresh(1, 30, y, fb.bb:getWidth() - 60, 3) - end - self.oldcurrent = self.current - markerdirty = false - end - - if pagedirty then - fb:refresh(0, 0, ypos, fb.bb:getWidth(), height) - pagedirty = false - end - - local ev = input.waitForEvent() - if ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_PRESS then - ev.code = adjustFWKey(ev.code) - if ev.code == KEY_FW_UP then - prevItem() - elseif ev.code == KEY_FW_DOWN then - nextItem() - elseif ev.code == KEY_PGFWD then - if self.page < (self.items / perpage) then - if self.current + self.page*perpage > self.items then - self.current = self.items - self.page*perpage - end - self.page = self.page + 1 - pagedirty = true - else - self.current = self.items - (self.page-1)*perpage - markerdirty = true - end - elseif ev.code == KEY_PGBCK then - if self.page > 1 then - self.page = self.page - 1 - pagedirty = true - else - self.current = 1 - markerdirty = true - end - elseif ev.code == KEY_ENTER or ev.code == KEY_FW_PRESS then - self.cfont = self.fonts[perpage*(self.page-1)+self.current] - clearglyphcache() - return nil - elseif ev.code == KEY_BACK then - return nil - end - end - end -end diff --git a/pdfreader.lua b/pdfreader.lua index f22da6c98..3d5fd04b0 100644 --- a/pdfreader.lua +++ b/pdfreader.lua @@ -243,7 +243,6 @@ function PDFReader:goto(no) local jump_item = nil -- add current page to jump_stack if no in for _t,_v in ipairs(self.jump_stack) do - --print(_v) if _v.page == self.pageno then jump_item = _v table.remove(self.jump_stack, _t) @@ -265,7 +264,6 @@ function PDFReader:goto(no) -- remove the last element to keep the size less than 10 table.remove(self.jump_stack) end - print('@add: '..jump_item.page..", current: "..self.pageno) end self.pageno = no @@ -320,8 +318,7 @@ function PDFReader:showTOC() toc_menu = SelectMenu:new{ menu_title = "Table of Contents", item_array = menu_items, - no_item_msg = - "This document does not have a Table of Contents.", + no_item_msg = "This document does not have a Table of Contents.", } item_no = toc_menu:choose(0, fb.bb:getHeight()) if item_no then @@ -334,13 +331,11 @@ end function PDFReader:showJumpStack() local menu_items = {} for _k,_v in ipairs(self.jump_stack) do - --print(_v.datetime.." -> Page ".._v.page) table.insert(menu_items, _v.datetime.." -> Page ".._v.page) end jump_menu = SelectMenu:new{ - menu_title = - "Jump Keeper, Current page: "..self.pageno, + menu_title = "Jump Keeper (current page: "..self.pageno..")", item_array = menu_items, no_item_msg = "No jump history.", }