[feat] Allow message to be overlaid on other screensavers (#6238)

reviewable/pr6240/r1
sladflob 4 years ago committed by GitHub
parent 5536ce996a
commit 9e9f3b419d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

2
.gitignore vendored

@ -7,6 +7,7 @@
*.un~ *.un~
cscope.* cscope.*
*.orig *.orig
*.lua~
lua lua
lua-* lua-*
.reader.kpdfview.lua .reader.kpdfview.lua
@ -36,3 +37,4 @@ i18n
/.cproject /.cproject
/.project /.project
.gitignore~

@ -14,6 +14,7 @@ local function whiteBackground() return G_reader_settings:isTrue("screensaver_wh
local function noBackground() return G_reader_settings:isTrue("screensaver_no_background") end local function noBackground() return G_reader_settings:isTrue("screensaver_no_background") end
local function stretchImages() return G_reader_settings:isTrue("screensaver_stretch_images") end local function stretchImages() return G_reader_settings:isTrue("screensaver_stretch_images") end
local function messagePosition() return G_reader_settings:readSetting("screensaver_message_position") end local function messagePosition() return G_reader_settings:readSetting("screensaver_message_position") end
local function showMessage() return G_reader_settings:isTrue("screensaver_show_message") end
return { return {
{ {
@ -97,19 +98,6 @@ return {
G_reader_settings:saveSetting("screensaver_type", "readingprogress") G_reader_settings:saveSetting("screensaver_type", "readingprogress")
end end
}, },
{
text = _("Use message as screensaver"),
checked_func = function()
if screensaverType() == "message" or screensaverType() == nil then
return true
else
return false
end
end,
callback = function()
G_reader_settings:saveSetting("screensaver_type", "message")
end
},
{ {
text = _("Leave screen as it is"), text = _("Leave screen as it is"),
checked_func = function() checked_func = function()
@ -121,7 +109,16 @@ return {
end, end,
callback = function() callback = function()
G_reader_settings:saveSetting("screensaver_type", "disable") G_reader_settings:saveSetting("screensaver_type", "disable")
end end,
separator = true,
},
{
text = _("Add message to screensaver"),
checked_func = showMessage,
callback = function()
G_reader_settings:saveSetting("screensaver_show_message", not showMessage())
end,
separator = true,
}, },
{ {
text = _("Settings"), text = _("Settings"),

@ -12,6 +12,7 @@ local Geom = require("ui/geometry")
local InfoMessage = require("ui/widget/infomessage") local InfoMessage = require("ui/widget/infomessage")
local ImageWidget = require("ui/widget/imagewidget") local ImageWidget = require("ui/widget/imagewidget")
local Math = require("optmath") local Math = require("optmath")
local OverlapGroup = require("ui/widget/overlapgroup")
local ScreenSaverWidget = require("ui/widget/screensaverwidget") local ScreenSaverWidget = require("ui/widget/screensaverwidget")
local TextBoxWidget = require("ui/widget/textboxwidget") local TextBoxWidget = require("ui/widget/textboxwidget")
local TopContainer = require("ui/widget/container/topcontainer") local TopContainer = require("ui/widget/container/topcontainer")
@ -176,6 +177,10 @@ function Screensaver:noBackground()
return G_reader_settings:isTrue("screensaver_no_background") return G_reader_settings:isTrue("screensaver_no_background")
end end
function Screensaver:showMessage()
return G_reader_settings:isTrue("screensaver_show_message")
end
function Screensaver:excluded() function Screensaver:excluded()
local lastfile = G_reader_settings:readSetting("lastfile") local lastfile = G_reader_settings:readSetting("lastfile")
local exclude_ss = false -- consider it not excluded if there's no docsetting local exclude_ss = false -- consider it not excluded if there's no docsetting
@ -240,12 +245,25 @@ function Screensaver:show(event, fallback_message)
-- poweroff (overlay message) -- poweroff (overlay message)
overlay_message = fallback_message overlay_message = fallback_message
end end
local show_message = self:showMessage()
if screensaver_type == nil then if screensaver_type == nil then
screensaver_type = "message" show_message = true
end end
if screensaver_type == "disable" then
if screensaver_type == "message" then
-- obsolete screensaver_type: migrate to new show_message = true
screensaver_type = "disable"
G_reader_settings:saveSetting("screensaver_type", "disable")
G_reader_settings:saveSetting("screensaver_show_message", true)
end
-- messages can still be shown over "as-is" screensaver
if screensaver_type == "disable" and show_message == false then
return return
end end
local widget = nil local widget = nil
local background = Blitbuffer.COLOR_BLACK local background = Blitbuffer.COLOR_BLACK
if self:whiteBackground() then if self:whiteBackground() then
@ -253,6 +271,7 @@ function Screensaver:show(event, fallback_message)
elseif self:noBackground() then elseif self:noBackground() then
background = nil background = nil
end end
local lastfile = G_reader_settings:readSetting("lastfile") local lastfile = G_reader_settings:readSetting("lastfile")
if screensaver_type == "document_cover" then if screensaver_type == "document_cover" then
-- Set lastfile to the document of which we want to show the cover. -- Set lastfile to the document of which we want to show the cover.
@ -307,11 +326,11 @@ function Screensaver:show(event, fallback_message)
readonly = true, readonly = true,
} }
else else
screensaver_type = "message" show_message = true
end end
doc:close() doc:close()
else else
screensaver_type = "message" show_message = true
end end
end end
if screensaver_type == "random_image" then if screensaver_type == "random_image" then
@ -324,7 +343,7 @@ function Screensaver:show(event, fallback_message)
end end
local image_file = getRandomImage(screensaver_dir) local image_file = getRandomImage(screensaver_dir)
if image_file == nil then if image_file == nil then
screensaver_type = "message" show_message = true
else else
widget = ImageWidget:new{ widget = ImageWidget:new{
file = image_file, file = image_file,
@ -345,7 +364,7 @@ function Screensaver:show(event, fallback_message)
screensaver_image = DataStorage:getDataDir() .. "/resources/koreader.png" screensaver_image = DataStorage:getDataDir() .. "/resources/koreader.png"
end end
if lfs.attributes(screensaver_image, "mode") ~= "file" then if lfs.attributes(screensaver_image, "mode") ~= "file" then
screensaver_type = "message" show_message = true
else else
widget = ImageWidget:new{ widget = ImageWidget:new{
file = screensaver_image, file = screensaver_image,
@ -361,10 +380,11 @@ function Screensaver:show(event, fallback_message)
if Screensaver.getReaderProgress ~= nil then if Screensaver.getReaderProgress ~= nil then
widget = Screensaver.getReaderProgress() widget = Screensaver.getReaderProgress()
else else
screensaver_type = "message" show_message = true
end end
end end
if screensaver_type == "message" then
if show_message == true then
local screensaver_message = G_reader_settings:readSetting(prefix.."screensaver_message") local screensaver_message = G_reader_settings:readSetting(prefix.."screensaver_message")
local message_pos = G_reader_settings:readSetting(prefix.."screensaver_message_position") local message_pos = G_reader_settings:readSetting(prefix.."screensaver_message_position")
if not self:whiteBackground() then if not self:whiteBackground() then
@ -382,8 +402,9 @@ function Screensaver:show(event, fallback_message)
screensaver_message = self:expandSpecial(screensaver_message, fallback) screensaver_message = self:expandSpecial(screensaver_message, fallback)
end end
local message_widget
if message_pos == "middle" or message_pos == nil then if message_pos == "middle" or message_pos == nil then
widget = InfoMessage:new{ message_widget = InfoMessage:new{
text = screensaver_message, text = screensaver_message,
readonly = true, readonly = true,
} }
@ -397,7 +418,7 @@ function Screensaver:show(event, fallback_message)
end end
local screen_w, screen_h = Screen:getWidth(), Screen:getHeight() local screen_w, screen_h = Screen:getWidth(), Screen:getHeight()
widget = container:new{ message_widget = container:new{
dimen = Geom:new{ dimen = Geom:new{
w = screen_w, w = screen_w,
h = screen_h, h = screen_h,
@ -410,8 +431,28 @@ function Screensaver:show(event, fallback_message)
} }
} }
end end
-- No overlay needed as we just displayed the message -- No overlay needed as we just displayed the message
overlay_message = nil overlay_message = nil
-- check if message_widget should be overlaid on another widget
if message_widget then
if widget then -- we have a screensaver widget
-- show message_widget on top of previously created widget
local screen_w, screen_h = Screen:getWidth(), Screen:getHeight()
widget = OverlapGroup:new{
dimen = {
h = screen_w,
w = screen_h,
},
widget,
message_widget,
}
else
-- no prevously created widget so just show message widget
widget = message_widget
end
end
end end
if overlay_message then if overlay_message then
@ -488,7 +529,6 @@ end
function Screensaver:addOverlayMessage(widget, text) function Screensaver:addOverlayMessage(widget, text)
local FrameContainer = require("ui/widget/container/framecontainer") local FrameContainer = require("ui/widget/container/framecontainer")
local OverlapGroup = require("ui/widget/overlapgroup")
local RightContainer = require("ui/widget/container/rightcontainer") local RightContainer = require("ui/widget/container/rightcontainer")
local Size = require("ui/size") local Size = require("ui/size")
local TextWidget = require("ui/widget/textwidget") local TextWidget = require("ui/widget/textwidget")

Loading…
Cancel
Save