Merge pull request #634 from chrox/master

add night mode option that inverts screen color
pull/636/head
Qingping Hou 10 years ago
commit fe40c56f79

@ -1 +1 @@
Subproject commit 5bd850e1e57d4ceb1b867f3bc38a31a8795a9fe9
Subproject commit 9c3178079c8c46226c74717bfc16903535b4ee14

@ -63,6 +63,7 @@ DOVERLAPPIXELS = 30
-- h: height of tap zone in proportion of screen height
DTAP_ZONE_MENU = {x = 1/8, y = 0, w = 3/4, h = 1/4}
DTAP_ZONE_CONFIG = {x = 0, y = 0, w = 0, h = 0}
DTAP_ZONE_MINIBAR = {x = 0, y = 15/16, w = 1, h = 1/16}
DTAP_ZONE_FORWARD = {x = 1/4, y = 0, w = 3/4, h = 1}
DTAP_ZONE_BACKWARD = {x = 0, y = 0, w = 1/4, h = 1}
DTAP_ZONE_BOOKMARK = {x = 7/8, y = 0, w = 1/8, h = 1/8}

@ -81,6 +81,15 @@ function FileManagerMenu:setUpdateItemTable()
ReaderFrontLight:addToMainMenu(self.tab_item_table)
end
table.insert(self.tab_item_table.main, {
text = _("Night mode"),
checked_func = function() return G_reader_settings:readSetting("night_mode") end,
callback = function()
local night_mode = G_reader_settings:readSetting("night_mode") or false
Screen.bb:invert()
G_reader_settings:saveSetting("night_mode", not night_mode)
end
})
table.insert(self.tab_item_table.main, Language:getLangMenuTable())
table.insert(self.tab_item_table.main, {
text = _("Version"),

@ -67,18 +67,24 @@ function ReaderFooter:init()
self.pageno = self.view.state.page
self.pages = self.view.document.info.number_of_pages
self:updateFooterPage()
local range = Geom:new{
x = Screen:getWidth()*DTAP_ZONE_MINIBAR.x,
y = Screen:getHeight()*DTAP_ZONE_MINIBAR.y,
w = Screen:getWidth()*DTAP_ZONE_MINIBAR.w,
h = Screen:getHeight()*DTAP_ZONE_MINIBAR.h
}
if Device:isTouchDevice() then
self.ges_events = {
TapFooter = {
GestureRange:new{
ges = "tap",
range = self[1]:contentRange(),
range = range,
},
},
HoldFooter = {
GestureRange:new{
ges = "hold",
range = self[1]:contentRange(),
range = range,
},
},
}

@ -80,8 +80,8 @@ function ReaderHighlight:genHighlightDrawerMenu()
return {
{
text = _("Lighten"),
enabled_func = function()
return self.view.highlight.saved_drawer ~= "lighten"
checked_func = function()
return self.view.highlight.saved_drawer == "lighten"
end,
callback = function()
self.view.highlight.saved_drawer = "lighten"
@ -89,8 +89,8 @@ function ReaderHighlight:genHighlightDrawerMenu()
},
{
text = _("Underscore"),
enabled_func = function()
return self.view.highlight.saved_drawer ~= "underscore"
checked_func = function()
return self.view.highlight.saved_drawer == "underscore"
end,
callback = function()
self.view.highlight.saved_drawer = "underscore"
@ -98,8 +98,8 @@ function ReaderHighlight:genHighlightDrawerMenu()
},
{
text = _("Invert"),
enabled_func = function()
return self.view.highlight.saved_drawer ~= "invert"
checked_func = function()
return self.view.highlight.saved_drawer == "invert"
end,
callback = function()
self.view.highlight.saved_drawer = "invert"

@ -45,7 +45,7 @@ function ReaderMenu:init()
if Device:hasKeyboard() then
self.key_events = {
ShowMenu = { { "Menu" }, doc = "show menu" },
ShowReaderMenu = { { "Menu" }, doc = "show menu" },
}
end
end
@ -71,6 +71,15 @@ function ReaderMenu:setUpdateItemTable()
widget:addToMainMenu(self.tab_item_table)
end
table.insert(self.tab_item_table.main, {
text = _("Night mode"),
checked_func = function() return G_reader_settings:readSetting("night_mode") end,
callback = function()
local night_mode = G_reader_settings:readSetting("night_mode") or false
Screen.bb:invert()
G_reader_settings:saveSetting("night_mode", not night_mode)
end
})
table.insert(self.tab_item_table.main, Language:getLangMenuTable())
table.insert(self.tab_item_table.main, {
text = _("Version"),

@ -138,11 +138,8 @@ end
function ReaderPaging:addToMainMenu(tab_item_table)
if self.ui.document.info.has_pages then
table.insert(tab_item_table.typeset, {
text_func = function()
return self.show_overlap_enable and
_("Turn off page overlap") or
_("Turn on page overlap")
end,
text = _("Show page overlap"),
checked_func = function() return self.show_overlap_enable end,
callback = function()
self.show_overlap_enable = not self.show_overlap_enable
end

@ -34,19 +34,10 @@ function ReaderRotation:init()
x = 0, y = 0,
w = Screen:getWidth(),
h = Screen:getHeight(),
}
},
rate = 0.3
}
},
TwoFingerPanRelease = {
GestureRange:new{
ges = "two_finger_pan_release",
range = Geom:new{
x = 0, y = 0,
w = Screen:getWidth(),
h = Screen:getHeight(),
}
}
}
}
end
end
@ -60,19 +51,14 @@ function ReaderRotation:onRotate(rotate_by)
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 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
self.rotate_angle = nil
end
return true
end
return ReaderRotation

@ -103,7 +103,7 @@ function ReaderToc:onShowToc()
-- build menu items
if #self.toc > 0 and not self.toc[1].text then
for _,v in ipairs(self.toc) do
v.text = (" "):rep(v.depth-1)..self:cleanUpTocTitle(v.title)
v.text = (" "):rep(v.depth-1)..self:cleanUpTocTitle(v.title)
v.mandatory = v.page
end
end

@ -293,26 +293,32 @@ function ReaderZooming:addToMainMenu(tab_item_table)
sub_item_table = {
{
text = _("Zoom to fit content width"),
checked_func = function() return self.zoom_mode == "contentwidth" end,
callback = self:genSetZoomModeCallBack("contentwidth")
},
{
text = _("Zoom to fit content height"),
checked_func = function() return self.zoom_mode == "contentheight" end,
callback = self:genSetZoomModeCallBack("contentheight")
},
{
text = _("Zoom to fit page width"),
checked_func = function() return self.zoom_mode == "pagewidth" end,
callback = self:genSetZoomModeCallBack("pagewidth")
},
{
text = _("Zoom to fit page height"),
checked_func = function() return self.zoom_mode == "pageheight" end,
callback = self:genSetZoomModeCallBack("pageheight")
},
{
text = _("Zoom to fit content"),
checked_func = function() return self.zoom_mode == "content" end,
callback = self:genSetZoomModeCallBack("content")
},
{
text = _("Zoom to fit page"),
checked_func = function() return self.zoom_mode == "page" end,
callback = self:genSetZoomModeCallBack("page")
},
}

@ -293,6 +293,11 @@ function ReaderUI:saveSettings()
self.doc_settings:flush()
end
function ReaderUI:onFlushSettings()
self:saveSettings()
return true
end
function ReaderUI:onClose()
DEBUG("closing reader")
self:saveSettings()

@ -1,3 +1,4 @@
local isAndroid, android = pcall(require, "android")
local DEBUG = require("dbg")
local GetText = {
@ -39,7 +40,10 @@ function GetText_mt.__index.changeLang(new_lang)
GetText.current_lang = "C"
-- the "C" locale disables localization alltogether
if new_lang == "C" then return end
if new_lang == "C" or new_lang == nil then return end
-- strip encoding suffix in locale like "zh_CN.utf8"
new_lang = new_lang:sub(1, new_lang:find(".%."))
local file = GetText.dirname .. "/" .. new_lang .. "/" .. GetText.textdomain .. ".po"
local po = io.open(file, "r")
@ -93,4 +97,16 @@ elseif os.getenv("LANG") then
GetText.changeLang(os.getenv("LANG"))
end
if isAndroid then
local ffi = require("ffi")
local buf = ffi.new("char[?]", 16)
ffi.C.AConfiguration_getLanguage(android.app.config, buf)
local lang = ffi.string(buf)
ffi.C.AConfiguration_getCountry(android.app.config, buf)
local country = ffi.string(buf)
if lang and country then
GetText.changeLang(lang.."_"..country)
end
end
return GetText

@ -6,12 +6,14 @@ local Screen = require("ui/screen")
local Math = require("optmath")
local DEBUG = require("dbg")
local _ = require("gettext")
local ffi = require("ffi")
local util = require("ffi/util")
-- constants from <linux/input.h>
local EV_SYN = 0
local EV_KEY = 1
local EV_ABS = 3
local EV_MSC = 4
-- key press event values (KEY.value)
local EVENT_VALUE_KEY_PRESS = 1
@ -211,6 +213,39 @@ function Input:initKeyMap()
[117] = "RPgFwd", -- normal PageDown
[119] = "Del", -- Delete
}
self.sdl2_event_map = {
[ 4] = "A", [ 5] = "B", [ 6] = "C", [ 7] = "D", [ 8] = "E", [ 9] = "F",
[10] = "G", [11] = "H", [12] = "I", [13] = "J", [14] = "K", [15] = "L",
[16] = "M", [17] = "N", [18] = "O", [19] = "P", [20] = "Q", [21] = "R",
[22] = "S", [23] = "T", [24] = "U", [25] = "V", [26] = "W", [27] = "X",
[28] = "Y", [29] = "Z", [30] = "1", [31] = "2", [32] = "3", [33] = "4",
[34] = "5", [35] = "6", [36] = "7", [37] = "8", [38] = "9", [39] = "0",
[42] = "Back", -- Backspace
[40] = "Enter", -- Enter
[225] = "Shift", -- left shift
[55] = ".",
[56] = "/",
[229] = "Sym", -- right shift key
[226] = "Alt", -- left alt
[44] = " ", -- Spacebar
[58] = "Menu", -- F[1]
[63] = "LPgBack", -- F[6]
[64] = "LPgFwd", -- F[7]
[68] = "VPlus", -- F[11]
[69] = "VMinus", -- F[12]
[230] = "AA", -- right alt key
[74] = "Home", -- Home
[82] = "Up", -- arrow up
[75] = "RPgBack", -- normal PageUp
[80] = "Left", -- arrow left
[79] = "Right", -- arrow right
[77] = "Press", -- End (above arrows)
[81] = "Down", -- arrow down
[78] = "RPgFwd", -- normal PageDown
[76] = "Del", -- Delete
}
self.modifiers = {
Alt = false,
Shift = false
@ -261,9 +296,7 @@ function Input:initTouchState()
end
function Input:init()
if Device:hasKeyboard() then
self:initKeyMap()
end
self:initKeyMap()
if Device:isTouchDevice() then
self:initTouchState()
end
@ -274,12 +307,16 @@ function Input:init()
self.event_map[10021] = "NotCharging"
if util.isEmulated() then
self:initKeyMap()
os.remove("/tmp/emu_event")
os.execute("mkfifo /tmp/emu_event")
input.open("/tmp/emu_event")
-- SDL key codes
self.event_map = self.sdl_event_map
if not util.haveSDL2() then
self.event_map = self.sdl_event_map
else
self.event_map = self.sdl2_event_map
end
else
local dev_mod = Device:getModel()
if not Device:isKobo() then
@ -389,6 +426,10 @@ function Input:init()
input.open("/dev/input/event1")
elseif util.isAndroid() then
DEBUG("Auto-detected Android")
self:adjustAndroidEventMap()
function Input:handleMiscEv(ev)
return Input:handleAndroidMiscEvent(ev)
end
else
DEBUG("Not supported device model!")
end
@ -425,6 +466,9 @@ function Input:adjustKoboEventMap()
self.event_map[116] = "Power"
end
function Input:adjustAndroidEventMap()
end
function Input:setTimeout(cb, tv_out)
local item = {
callback = cb,
@ -486,6 +530,15 @@ function Input:handleKeyBoardEv(ev)
end
end
function Input:handleMiscEv(ev)
end
function Input:handleAndroidMiscEvent(ev)
if ev.code == ffi.C.APP_CMD_SAVE_STATE then
return "SaveState"
end
end
function Input:setMtSlot(slot, key, val)
if not self.ev_slots[slot] then
self.ev_slots[slot] = {
@ -717,9 +770,12 @@ function Input:waitEvent(timeout_us, timeout_s)
end
ev = self:eventAdjustHook(ev)
if ev.type == EV_KEY then
DEBUG("key ev", ev)
return self:handleKeyBoardEv(ev)
elseif ev.type == EV_ABS or ev.type == EV_SYN then
return self:handleTouchEv(ev)
elseif ev.type == EV_MSC then
return self:handleMiscEv(ev)
else
-- some other kind of event that we do not know yet
return Event:new("GenericInput", ev)

@ -18,6 +18,9 @@ end
function Language:genLanguageSubItem(lang, lang_locale)
return {
text = lang,
checked_func = function()
return G_reader_settings:readSetting("language") == lang_locale
end,
callback = function()
self:changeLanguage(lang_locale)
end

@ -13,7 +13,7 @@ function TimeVal:new(o)
if o.usec == nil then
o.usec = 0
elseif o.usec > 1000000 then
o.sec = o.sec + maht.floor(o.usec/1000000)
o.sec = o.sec + math.floor(o.usec/1000000)
o.usec = o.usec % 1000000
end
setmetatable(o, self)

@ -282,6 +282,7 @@ function UIManager:run()
if input_event then
--DEBUG("in ui.lua:", input_event)
if input_event == "IntoSS" then
self:sendEvent(Event:new("FlushSettings"))
Device:intoScreenSaver()
elseif input_event == "OutOfSS" then
Device:outofScreenSaver()
@ -299,12 +300,15 @@ function UIManager:run()
text = _("Standby"),
timeout = 1,
})
self:sendEvent(Event:new("FlushSettings"))
Device:prepareSuspend()
self:scheduleIn(0.5, function() Device:Suspend() end)
elseif (input_event == "Power" and Device.screen_saver_mode)
or input_event == "Resume" then
Device:Resume()
self:sendEvent(Event:new("Resume"))
elseif input_event == "SaveState" then
self:sendEvent(Event:new("FlushSettings"))
else
self:sendEvent(input_event)
end

@ -65,7 +65,6 @@ function TouchMenuItem:init()
color = 15,
HorizontalGroup:new {
align = "center",
HorizontalSpan:new{ width = Screen:scaleByDPI(5) },
CenterContainer:new{
dimen = Geom:new{ w = checked_widget:getSize().w },
item_checked and checked_widget or unchecked_widget

@ -1 +1 @@
Subproject commit 2b38b16d2795a228b1a541fbc2e09bd093119aad
Subproject commit 9dc2c6b2a2e15d47a17cb811182684a4ed272013

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: https://github.com/koreader/koreader-base/issues\n"
"POT-Creation-Date: 2014-06-05 11:16+0000\n"
"POT-Creation-Date: 2014-06-08 06:10+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -137,7 +137,7 @@ msgid ""
"Document Language"
msgstr ""
#: frontend/apps/reader/modules/readermenu.lua:118
#: frontend/apps/reader/modules/readermenu.lua:127
msgid ""
"Document menu"
msgstr ""
@ -196,7 +196,7 @@ msgid ""
"File does not exist"
msgstr ""
#: frontend/apps/filemanager/filemanagermenu.lua:125
#: frontend/apps/filemanager/filemanagermenu.lua:134
msgid ""
"File manager menu"
msgstr ""
@ -251,8 +251,8 @@ msgid ""
"Go to Page or Location"
msgstr ""
#: frontend/apps/filemanager/filemanagermenu.lua:94
#: frontend/apps/reader/modules/readermenu.lua:84
#: frontend/apps/filemanager/filemanagermenu.lua:103
#: frontend/apps/reader/modules/readermenu.lua:93
msgid ""
"Help"
msgstr ""
@ -303,7 +303,7 @@ msgid ""
"LTR"
msgstr ""
#: frontend/ui/language.lua:31
#: frontend/ui/language.lua:34
msgid ""
"Language"
msgstr ""
@ -354,6 +354,12 @@ msgid ""
"More"
msgstr ""
#: frontend/apps/filemanager/filemanagermenu.lua:85
#: frontend/apps/reader/modules/readermenu.lua:75
msgid ""
"Night mode"
msgstr ""
#: reader.lua:84
msgid ""
"No reader engine for this file"
@ -380,7 +386,7 @@ msgid ""
"Page"
msgstr ""
#: frontend/ui/widget/touchmenu.lua:382
#: frontend/ui/widget/touchmenu.lua:402
msgid ""
"Page "
msgstr ""
@ -400,8 +406,8 @@ msgid ""
"Paste"
msgstr ""
#: frontend/apps/filemanager/filemanagermenu.lua:97
#: frontend/apps/reader/modules/readermenu.lua:87
#: frontend/apps/filemanager/filemanagermenu.lua:106
#: frontend/apps/reader/modules/readermenu.lua:96
msgid ""
"Please report bugs to \n"
"https://github.com/koreader/koreader/issues"
@ -477,7 +483,12 @@ msgid ""
"Show hidden files"
msgstr ""
#: frontend/ui/uimanager.lua:298
#: frontend/apps/reader/modules/readerpaging.lua:141
msgid ""
"Show page overlap"
msgstr ""
#: frontend/ui/uimanager.lua:299
msgid ""
"Standby"
msgstr ""
@ -537,23 +548,13 @@ msgid ""
"Translate"
msgstr ""
#: frontend/apps/reader/modules/readerpaging.lua:143
msgid ""
"Turn off page overlap"
msgstr ""
#: frontend/apps/reader/modules/readerpaging.lua:144
msgid ""
"Turn on page overlap"
msgstr ""
#: frontend/apps/reader/modules/readerhighlight.lua:91
msgid ""
"Underscore"
msgstr ""
#: frontend/apps/filemanager/filemanagermenu.lua:86
#: frontend/apps/reader/modules/readermenu.lua:76
#: frontend/apps/filemanager/filemanagermenu.lua:95
#: frontend/apps/reader/modules/readermenu.lua:85
msgid ""
"Version"
msgstr ""
@ -589,12 +590,12 @@ msgid ""
"Yinxiang"
msgstr ""
#: frontend/apps/reader/modules/readerzooming.lua:311
#: frontend/apps/reader/modules/readerzooming.lua:315
msgid ""
"Zoom to fit content"
msgstr ""
#: frontend/apps/reader/modules/readerzooming.lua:299
#: frontend/apps/reader/modules/readerzooming.lua:300
msgid ""
"Zoom to fit content height"
msgstr ""
@ -604,17 +605,17 @@ msgid ""
"Zoom to fit content width"
msgstr ""
#: frontend/apps/reader/modules/readerzooming.lua:315
#: frontend/apps/reader/modules/readerzooming.lua:320
msgid ""
"Zoom to fit page"
msgstr ""
#: frontend/apps/reader/modules/readerzooming.lua:307
#: frontend/apps/reader/modules/readerzooming.lua:310
msgid ""
"Zoom to fit page height"
msgstr ""
#: frontend/apps/reader/modules/readerzooming.lua:303
#: frontend/apps/reader/modules/readerzooming.lua:305
msgid ""
"Zoom to fit page width"
msgstr ""

@ -173,10 +173,10 @@ end
local last_file = G_reader_settings:readSetting("lastfile")
-- load last opened file
local open_last = G_reader_settings:readSetting("open_last")
--@TODO we can read version here, refer to commit in master tree: (houqp)
--87712cf0e43fed624f8a9f610be42b1fe174b9fe
-- night mode
if G_reader_settings:readSetting("night_mode") then
Screen.bb:invert()
end
do
local powerd = Device:getPowerDevice()

Loading…
Cancel
Save