From ed33937af2b71624c55ae518b3e8bc21a3a0494a Mon Sep 17 00:00:00 2001 From: chrox Date: Sun, 14 Apr 2013 21:17:52 +0800 Subject: [PATCH] add front light intensity adjustment by vertical two_finger_pan --- frontend/ui/reader/readerfrontlight.lua | 60 +++++++++++++++++++++++++ frontend/ui/readerui.lua | 10 ++++- 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 frontend/ui/reader/readerfrontlight.lua diff --git a/frontend/ui/reader/readerfrontlight.lua b/frontend/ui/reader/readerfrontlight.lua new file mode 100644 index 000000000..6929e2529 --- /dev/null +++ b/frontend/ui/reader/readerfrontlight.lua @@ -0,0 +1,60 @@ +package.cpath = package.cpath..";/usr/lib/lua/?.so" +require "ui/device" + +ReaderFrontLight = InputContainer:new{ + steps = {0,1,2,3,4,5,6,7,8,9,10}, + intensity = nil, +} + +function ReaderFrontLight:init() + local dev_mod = Device:getModel() + if dev_mod == "KindlePaperWhite" then + require "liblipclua" + self.lipc_handle = lipc.init("com.github.koreader") + self.intensity = self.lipc_handle:get_int_property("com.lab126.powerd", "flIntensity") + end + self.ges_events = { + Adjust = { + GestureRange:new{ + ges = "two_finger_pan", + range = Geom:new{ + x = 0, y = 0, + w = Screen:getWidth(), + h = Screen:getHeight(), + }, + rate = 2.0, + } + }, + } +end + +function ReaderFrontLight:onAdjust(arg, ges) + if self.lipc_handle then + local rel_proportion = ges.distance / Screen:getWidth() + local delta_int = self.steps[math.floor(#self.steps*rel_proportion)] + local msg = "" + if ges.direction == "north" then + msg = _("Increase front light intensity to ") + self.intensity = self.intensity + delta_int + self:setIntensity(self.intensity, msg) + elseif ges.direction == "south" then + msg = _("Decrease front light intensity to ") + self.intensity = self.intensity - delta_int + self:setIntensity(self.intensity, msg) + end + end + return true +end + +function ReaderFrontLight:setIntensity(intensity, msg) + if self.lipc_handle then + intensity = intensity < 0 and 0 or intensity + intensity = intensity > 24 and 24 or intensity + self.lipc_handle:set_int_property("com.lab126.powerd", "flIntensity", intensity) + UIManager:show(Notification:new{ + text = msg..intensity, + timeout = 1 + }) + end + return true +end diff --git a/frontend/ui/readerui.lua b/frontend/ui/readerui.lua index 592bd34c8..196c1fa97 100644 --- a/frontend/ui/readerui.lua +++ b/frontend/ui/readerui.lua @@ -13,8 +13,9 @@ require "ui/reader/readerconfig" require "ui/reader/readercropping" require "ui/reader/readerkopt" require "ui/reader/readercopt" -require "ui/reader/readerscreenshot" require "ui/reader/readerhinting" +require "ui/reader/readerscreenshot" +require "ui/reader/readerfrontlight" --[[ This is an abstraction for a reader interface @@ -99,7 +100,14 @@ function ReaderUI:init() view = self[1], ui = self } + -- frontlight controller + local reader_fl = ReaderFrontLight:new{ + dialog = self.dialog, + view = self[1], + ui = self + } table.insert(self.active_widgets, reader_ss) + table.insert(self.active_widgets, reader_fl) if self.document.info.has_pages then -- for page specific controller