Merge pull request #683 from chrox/master

restrict highlight in current page area
pull/685/merge v2014.07.03-nightly
Qingping Hou 10 years ago
commit 7ba0a46098

@ -1,7 +1,8 @@
local InputContainer = require("ui/widget/container/inputcontainer") local InputContainer = require("ui/widget/container/inputcontainer")
local CenterContainer = require("ui/widget/container/centercontainer") local CenterContainer = require("ui/widget/container/centercontainer")
local Menu = require("ui/widget/menu")
local Notification = require("ui/widget/notification") local Notification = require("ui/widget/notification")
local ConfirmBox = require("ui/widget/confirmbox")
local Menu = require("ui/widget/menu")
local Device = require("ui/device") local Device = require("ui/device")
local Screen = require("ui/screen") local Screen = require("ui/screen")
local Input = require("ui/input") local Input = require("ui/input")
@ -52,7 +53,10 @@ function ReaderFont:init()
text = v, text = v,
callback = function() callback = function()
self:setFont(v) self:setFont(v)
end end,
hold_callback = function()
self:makeDefault(v)
end,
}) })
face_list[k] = {text = v} face_list[k] = {text = v}
end end
@ -213,6 +217,17 @@ function ReaderFont:setFont(face)
end end
end end
function ReaderFont:makeDefault(face)
if face then
UIManager:show(ConfirmBox:new{
text = _("Set default font \"")..face.."\"?",
ok_callback = function()
G_reader_settings:saveSetting("cre_font", face)
end,
})
end
end
function ReaderFont:addToMainMenu(tab_item_table) function ReaderFont:addToMainMenu(tab_item_table)
-- insert table to main reader menu -- insert table to main reader menu
table.insert(tab_item_table.typeset, { table.insert(tab_item_table.typeset, {

@ -116,6 +116,7 @@ function ReaderHighlight:onTap(arg, ges)
self.ui.document:clearSelection() self.ui.document:clearSelection()
end end
self.hold_pos = nil self.hold_pos = nil
self.selected_text = nil
UIManager:setDirty(self.dialog, "partial") UIManager:setDirty(self.dialog, "partial")
return true return true
end end
@ -231,6 +232,13 @@ function ReaderHighlight:onHoldPan(arg, ges)
DEBUG("no previous hold position") DEBUG("no previous hold position")
return true return true
end end
local page_area = self.view:getScreenPageArea(self.hold_pos.page)
DEBUG("current page area", page_area)
if ges.pos:notIntersectWith(page_area) then
DEBUG("not inside page area")
return true
end
self.holdpan_pos = self.view:screenToPageTransform(ges.pos) self.holdpan_pos = self.view:screenToPageTransform(ges.pos)
DEBUG("holdpan position in page", self.holdpan_pos) DEBUG("holdpan position in page", self.holdpan_pos)
self.selected_text = self.ui.document:getTextFromPositions(self.hold_pos, self.holdpan_pos) self.selected_text = self.ui.document:getTextFromPositions(self.hold_pos, self.holdpan_pos)

@ -177,6 +177,36 @@ function ReaderView:pageToScreenTransform(page, rect)
end end
end end
--[[
Get page area on screen for a given page number
--]]
function ReaderView:getScreenPageArea(page)
if self.ui.document.info.has_pages then
local area = Geom:new{x = 0, y = 0}
if self.page_scroll then
for _, state in ipairs(self.page_states) do
if page ~= state.page then
area.y = area.y + state.visible_area.h + state.offset.y
area.y = area.y + self.page_gap.height
else
area.x = state.offset.x
area.w = state.visible_area.w
area.h = state.visible_area.h
return area
end
end
else
area.x = self.state.offset.x
area.y = self.state.offset.y
area.w = self.visible_area.w
area.h = self.visible_area.h
return area
end
else
return self.dimen:copy()
end
end
function ReaderView:drawPageBackground(bb, x, y) function ReaderView:drawPageBackground(bb, x, y)
bb:paintRect(x, y, self.dimen.w, self.dimen.h, self.page_bgcolor) bb:paintRect(x, y, self.dimen.w, self.dimen.h, self.page_bgcolor)
end end

@ -60,8 +60,7 @@ function CreDocument:engineInit()
-- we need to initialize the CRE font list -- we need to initialize the CRE font list
local fonts = Font:getFontList() local fonts = Font:getFontList()
for _k, _v in ipairs(fonts) do for _k, _v in ipairs(fonts) do
if _v ~= "Dingbats.cff" and _v ~= "StandardSymL.cff" if _v:sub(1, 4) ~= "urw/" then
and _v:sub(1, 6) ~= "Nimbus" then
local ok, err = pcall(cre.registerFont, Font.fontdir..'/'.._v) local ok, err = pcall(cre.registerFont, Font.fontdir..'/'.._v)
if not ok then if not ok then
DEBUG(err) DEBUG(err)

@ -1,16 +1,19 @@
local InputContainer = require("ui/widget/container/inputcontainer")
local CenterContainer = require("ui/widget/container/centercontainer") local CenterContainer = require("ui/widget/container/centercontainer")
local FrameContainer = require("ui/widget/container/centercontainer") local FrameContainer = require("ui/widget/container/framecontainer")
local FocusManager = require("ui/widget/focusmanager") local HorizontalGroup = require("ui/widget/horizontalgroup")
local Button = require("ui/widget/button")
local VerticalGroup = require("ui/widget/verticalgroup") local VerticalGroup = require("ui/widget/verticalgroup")
local ImageWidget = require("ui/widget/imagewidget") local ImageWidget = require("ui/widget/imagewidget")
local TextBoxWidget = require("ui/widget/textboxwidget") local TextBoxWidget = require("ui/widget/textboxwidget")
local Font = require("ui/font") local HorizontalSpan = require("ui/widget/horizontalspan")
local ButtonTable = require("ui/widget/buttontable")
local GestureRange = require("ui/gesturerange")
local UIManager = require("ui/uimanager") local UIManager = require("ui/uimanager")
local Device = require("ui/device")
local Geom = require("ui/geometry")
local Input = require("ui/input")
local Screen = require("ui/screen") local Screen = require("ui/screen")
local HorizontalGroup = require("ui/widget/horizontalgroup") local Font = require("ui/font")
local VerticalSpan = require("ui/widget/verticalspan")
local HorizontalSpan = require("ui/widget/horizontalspan")
local DEBUG = require("dbg") local DEBUG = require("dbg")
local _ = require("gettext") local _ = require("gettext")
@ -19,73 +22,70 @@ local _ = require("gettext")
--[[ --[[
Widget that shows a message and OK/Cancel buttons Widget that shows a message and OK/Cancel buttons
]] ]]
local ConfirmBox = FocusManager:new{ local ConfirmBox = InputContainer:new{
text = _("no text"), text = _("no text"),
width = nil, face = Font:getFace("infofont", 25),
ok_text = _("OK"), ok_text = _("OK"),
cancel_text = _("Cancel"), cancel_text = _("Cancel"),
ok_callback = function() end, ok_callback = function() end,
cancel_callback = function() end, cancel_callback = function() end,
margin = 5,
padding = 5,
} }
function ConfirmBox:init() function ConfirmBox:init()
-- calculate box width on the fly if not given local content = HorizontalGroup:new{
if not self.width then align = "center",
self.width = Screen:getWidth() - 200 ImageWidget:new{
end file = "resources/info-i.png"
-- build bottons },
self.key_events.Close = { {{"Home","Back"}}, doc = "cancel" } HorizontalSpan:new{ width = 10 },
self.key_events.Select = { {{"Enter","Press"}}, doc = "chose selected option" } TextBoxWidget:new{
text = self.text,
local ok_button = Button:new{ face = self.face,
text = self.ok_text, width = Screen:getWidth()*2/3,
callback = function() }
self.ok_callback()
UIManager:close(self)
end,
show_parent = self,
} }
local cancel_button = Button:new{ local button_table = ButtonTable:new{
text = self.cancel_text, width = content:getSize().w,
preselect = true, button_font_face = "cfont",
callback = function() button_font_size = 20,
self.cancel_callback() buttons = {
UIManager:close(self) {
end, {
text = self.cancel_text,
callback = function()
self.cancel_callback()
UIManager:close(self)
end,
},
{
text = self.ok_text,
callback = function()
self.ok_callback()
UIManager:close(self)
end,
},
},
},
zero_sep = true,
show_parent = self, show_parent = self,
} }
self.layout = { { ok_button, cancel_button } }
self.selected.x = 2 -- Cancel is default
self[1] = CenterContainer:new{ self[1] = CenterContainer:new{
dimen = Screen:getSize(), dimen = Screen:getSize(),
FrameContainer:new{ FrameContainer:new{
margin = 2,
background = 0, background = 0,
padding = 10, margin = self.margin,
HorizontalGroup:new{ padding = self.padding,
ImageWidget:new{ VerticalGroup:new{
file = "resources/info-i.png" align = "left",
}, content,
HorizontalSpan:new{ width = 10 }, button_table,
VerticalGroup:new{
align = "left",
TextBoxWidget:new{
text = self.text,
face = Font:getFace("cfont", 30),
width = self.width,
},
VerticalSpan:new{ width = 10 },
HorizontalGroup:new{
ok_button,
HorizontalSpan:new{ width = 10 },
cancel_button,
}
}
} }
} }
} }
end end
function ConfirmBox:onClose() function ConfirmBox:onClose()

@ -41,6 +41,13 @@ function TouchMenuItem:init()
}, },
doc = "Select Menu Item", doc = "Select Menu Item",
}, },
HoldSelect = {
GestureRange:new{
ges = "hold",
range = self.dimen,
},
doc = "Hold Menu Item",
},
} }
local item_enabled = self.item.enabled local item_enabled = self.item.enabled
@ -96,6 +103,21 @@ function TouchMenuItem:onTapSelect(arg, ges)
self.menu:onMenuSelect(self.item) self.menu:onMenuSelect(self.item)
end end
function TouchMenuItem:onHoldSelect(arg, ges)
local enabled = self.item.enabled
if self.item.enabled_func then
enabled = self.item.enabled_func()
end
if enabled == false then return end
self.item_frame.invert = true
UIManager:setDirty(self.show_parent, "partial")
UIManager:scheduleIn(0.5, function()
self.item_frame.invert = false
UIManager:setDirty(self.show_parent, "partial")
end)
self.menu:onMenuHold(self.item)
end
--[[ --[[
TouchMenuBar widget TouchMenuBar widget
@ -464,11 +486,6 @@ function TouchMenu:onSwipe(arg, ges_ev)
end end
function TouchMenu:onMenuSelect(item) function TouchMenu:onMenuSelect(item)
local enabled = item.enabled
if item.enabled_func then
enabled = item.enabled_func()
end
if enabled == false then return end
local sub_item_table = item.sub_item_table local sub_item_table = item.sub_item_table
if item.sub_item_table_func then if item.sub_item_table_func then
sub_item_table = item.sub_item_table_func() sub_item_table = item.sub_item_table_func()
@ -494,6 +511,20 @@ function TouchMenu:onMenuSelect(item)
return true return true
end end
function TouchMenu:onMenuHold(item)
local callback = item.hold_callback
if item.hold_callback_func then
callback = item.hold_callback_func()
end
if callback then
UIManager:scheduleIn(0.1, function()
self:closeMenu()
callback()
end)
end
return true
end
function TouchMenu:onTapCloseAllMenus(arg, ges_ev) function TouchMenu:onTapCloseAllMenus(arg, ges_ev)
if ges_ev.pos:notIntersectWith(self.dimen) then if ges_ev.pos:notIntersectWith(self.dimen) then
self:closeMenu() self:closeMenu()

Loading…
Cancel
Save