koreader/frontend/apps/reader/modules/readerfrontlight.lua
Hans-Werner Hilse 3066c86e38 Refactoring hardware abstraction
This is a major overhaul of the hardware abstraction layer.
A few notes:

General platform distinction happens in
  frontend/device.lua
which will delegate everything else to
  frontend/device/<platform_name>/device.lua
which should extend
  frontend/device/generic/device.lua

Screen handling is implemented in
  frontend/device/screen.lua
which includes the *functionality* to support device specifics.
Actually setting up the device specific functionality, however,
is done in the device specific setup code in the relevant
device.lua file.

The same goes for input handling.
2014-11-02 21:19:04 +01:00

146 lines
4.4 KiB
Lua

local InputContainer = require("ui/widget/container/inputcontainer")
local InputDialog = require("ui/widget/inputdialog")
local Notification = require("ui/widget/notification")
local GestureRange = require("ui/gesturerange")
local UIManager = require("ui/uimanager")
local Geom = require("ui/geometry")
local Screen = require("device").screen
local Device = require("device")
local DEBUG = require("dbg")
local _ = require("gettext")
local ReaderFrontLight = InputContainer:new{
steps = {0,1,1,1,1,2,2,2,3,4,5,6,7,8,9,10},
gestureScale = Screen:getWidth() * FRONTLIGHT_SENSITIVITY_DECREASE,
}
function ReaderFrontLight:init()
if Device:isTouchDevice() then
self.ges_events = {
Adjust = {
GestureRange:new{
ges = "two_finger_pan",
rate = Device.model ~= 'Kobo_phoenix' and 3.0 or nil,
}
},
PanRelease= {
GestureRange:new{
ges = "two_finger_pan_release",
}
},
Swipe = {
GestureRange:new{
ges = "two_finger_swipe",
}
},
}
self.ui.menu:registerToMainMenu(self)
end
end
function ReaderFrontLight:onAdjust(arg, ges)
local powerd = Device:getPowerDevice()
if powerd.flIntensity ~= nil then
DEBUG("frontlight intensity", powerd.flIntensity)
local step = math.ceil(#self.steps * ges.distance / self.gestureScale)
DEBUG("step = ", step)
local delta_int = self.steps[step] or self.steps[#self.steps]
DEBUG("delta_int = ", delta_int)
if ges.direction == "north" then
powerd:setIntensity(powerd.flIntensity + delta_int)
elseif ges.direction == "south" then
powerd:setIntensity(powerd.flIntensity - delta_int)
end
end
return true
end
function ReaderFrontLight:onShowIntensity()
local powerd = Device:getPowerDevice()
if powerd.flIntensity ~= nil then
UIManager:show(Notification:new{
text = _("Frontlight intensity is set to ")..powerd.flIntensity,
timeout = 1.0,
})
end
return true
end
function ReaderFrontLight:onSwipe(arg, ges)
if ges.direction == "north" or ges.direction == "south" then
DEBUG("onSwipe activated")
return self:onShowIntensity()
end
end
function ReaderFrontLight:onPanRelease(arg, ges)
DEBUG("onPanRelease activated")
return self:onShowIntensity()
end
function ReaderFrontLight:addToMainMenu(tab_item_table)
-- insert fldial command to setting tab of reader menu
table.insert(tab_item_table.setting, {
text = _("Frontlight settings"),
callback = function()
self:onShowFlDialog()
end,
})
end
function ReaderFrontLight:onShowFlDialog()
local powerd = Device:getPowerDevice()
self.fl_dialog = InputDialog:new{
title = _("Frontlight Level"),
input_hint = ("(%d - %d)"):format(powerd.fl_min, powerd.fl_max),
buttons = {
{
{
text = _("Toggle"),
enabled = true,
callback = function()
self.fl_dialog.input:setText("")
powerd:toggleFrontlight()
end,
},
{
text = _("Apply"),
enabled = true,
callback = function()
self:fldialIntensity()
end,
},
{
text = _("OK"),
enabled = true,
callback = function()
self:fldialIntensity()
self:close()
end,
},
},
},
input_type = "number",
width = Screen:getWidth() * 0.8,
height = Screen:getHeight() * 0.2,
}
self.fl_dialog:onShowKeyboard()
UIManager:show(self.fl_dialog)
end
function ReaderFrontLight:close()
self.fl_dialog:onClose()
G_reader_settings:saveSetting("frontlight_intensity", Device:getPowerDevice().flIntensity)
UIManager:close(self.fl_dialog)
end
function ReaderFrontLight:fldialIntensity()
local number = tonumber(self.fl_dialog:getInputText())
if number ~= nil then
Device:getPowerDevice():setIntensity(number)
end
end
return ReaderFrontLight