Files
koreader/frontend/apps/reader/modules/readerrotation.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

65 lines
1.9 KiB
Lua

local InputContainer = require("ui/widget/container/inputcontainer")
local Screen = require("device").screen
local Geom = require("ui/geometry")
local Device = require("device")
local Event = require("ui/event")
local GestureRange = require("ui/gesturerange")
local _ = require("gettext")
local ReaderRotation = InputContainer:new{
ROTATE_ANGLE_THRESHOLD = 15,
current_rotation = 0
}
function ReaderRotation:init()
if Device:hasKeyboard() then
self.key_events = {
-- these will all generate the same event, just with different arguments
RotateLeft = {
{"J"},
doc = "rotate left by 90 degrees",
event = "Rotate", args = -90 },
RotateRight = {
{"K"},
doc = "rotate right by 90 degrees",
event = "Rotate", args = 90 },
}
end
if Device:isTouchDevice() then
self.ges_events = {
RotateGes = {
GestureRange:new{
ges = "rotate",
range = Geom:new{
x = 0, y = 0,
w = Screen:getWidth(),
h = Screen:getHeight(),
},
rate = 0.3
}
},
}
end
end
-- TODO: reset rotation on new document, maybe on new page?
function ReaderRotation:onRotate(rotate_by)
self.current_rotation = (self.current_rotation + rotate_by) % 360
self.ui:handleEvent(Event:new("RotationUpdate", self.current_rotation))
return true
end
function ReaderRotation:onRotateGes(arg, ges)
if ges.angle and ges.angle > self.ROTATE_ANGLE_THRESHOLD then
if Screen:getScreenMode() == "portrait" then
self.ui:handleEvent(Event:new("SetScreenMode", "landscape"))
else
self.ui:handleEvent(Event:new("SetScreenMode", "portrait"))
end
end
return true
end
return ReaderRotation