mirror of
https://github.com/koreader/koreader
synced 2024-10-31 21:20:20 +00:00
2154e7e852
This should finish the work to make all globals to local variables. That allows LuaJIT to properly compile things by interning the references to the relevant parts (rather than looking up globals all the time which stops a trace).
79 lines
1.9 KiB
Lua
79 lines
1.9 KiB
Lua
local InputContainer = require("ui/widget/container/inputcontainer")
|
|
local Screen = require("ui/screen")
|
|
local Geom = require("ui/geometry")
|
|
local Device = require("ui/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(),
|
|
}
|
|
}
|
|
},
|
|
TwoFingerPanRelease = {
|
|
GestureRange:new{
|
|
ges = "two_finger_pan_release",
|
|
range = Geom:new{
|
|
x = 0, y = 0,
|
|
w = Screen:getWidth(),
|
|
h = Screen:getHeight(),
|
|
}
|
|
}
|
|
}
|
|
}
|
|
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)
|
|
self.rotate_angle = ges.angle
|
|
return true
|
|
end
|
|
|
|
function ReaderRotation:onTwoFingerPanRelease(arg, ges)
|
|
if self.rotate_angle and self.rotate_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
|
|
self.rotate_angle = nil
|
|
end
|
|
end
|
|
|
|
return ReaderRotation
|