[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~
cscope.*
*.orig
*.lua~
lua
lua-*
.reader.kpdfview.lua
@ -36,3 +37,4 @@ i18n
/.cproject
/.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 stretchImages() return G_reader_settings:isTrue("screensaver_stretch_images") 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 {
{
@ -97,19 +98,6 @@ return {
G_reader_settings:saveSetting("screensaver_type", "readingprogress")
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"),
checked_func = function()
@ -121,7 +109,16 @@ return {
end,
callback = function()
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"),

@ -12,6 +12,7 @@ local Geom = require("ui/geometry")
local InfoMessage = require("ui/widget/infomessage")
local ImageWidget = require("ui/widget/imagewidget")
local Math = require("optmath")
local OverlapGroup = require("ui/widget/overlapgroup")
local ScreenSaverWidget = require("ui/widget/screensaverwidget")
local TextBoxWidget = require("ui/widget/textboxwidget")
local TopContainer = require("ui/widget/container/topcontainer")
@ -176,6 +177,10 @@ function Screensaver:noBackground()
return G_reader_settings:isTrue("screensaver_no_background")
end
function Screensaver:showMessage()
return G_reader_settings:isTrue("screensaver_show_message")
end
function Screensaver:excluded()
local lastfile = G_reader_settings:readSetting("lastfile")
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)
overlay_message = fallback_message
end
local show_message = self:showMessage()
if screensaver_type == nil then
screensaver_type = "message"
show_message = true
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
end
local widget = nil
local background = Blitbuffer.COLOR_BLACK
if self:whiteBackground() then
@ -253,6 +271,7 @@ function Screensaver:show(event, fallback_message)
elseif self:noBackground() then
background = nil
end
local lastfile = G_reader_settings:readSetting("lastfile")
if screensaver_type == "document_cover" then
-- 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,
}
else
screensaver_type = "message"
show_message = true
end
doc:close()
else
screensaver_type = "message"
show_message = true
end
end
if screensaver_type == "random_image" then
@ -324,7 +343,7 @@ function Screensaver:show(event, fallback_message)
end
local image_file = getRandomImage(screensaver_dir)
if image_file == nil then
screensaver_type = "message"
show_message = true
else
widget = ImageWidget:new{
file = image_file,
@ -345,7 +364,7 @@ function Screensaver:show(event, fallback_message)
screensaver_image = DataStorage:getDataDir() .. "/resources/koreader.png"
end
if lfs.attributes(screensaver_image, "mode") ~= "file" then
screensaver_type = "message"
show_message = true
else
widget = ImageWidget:new{
file = screensaver_image,
@ -361,10 +380,11 @@ function Screensaver:show(event, fallback_message)
if Screensaver.getReaderProgress ~= nil then
widget = Screensaver.getReaderProgress()
else
screensaver_type = "message"
show_message = true
end
end
if screensaver_type == "message" then
if show_message == true then
local screensaver_message = G_reader_settings:readSetting(prefix.."screensaver_message")
local message_pos = G_reader_settings:readSetting(prefix.."screensaver_message_position")
if not self:whiteBackground() then
@ -382,8 +402,9 @@ function Screensaver:show(event, fallback_message)
screensaver_message = self:expandSpecial(screensaver_message, fallback)
end
local message_widget
if message_pos == "middle" or message_pos == nil then
widget = InfoMessage:new{
message_widget = InfoMessage:new{
text = screensaver_message,
readonly = true,
}
@ -397,7 +418,7 @@ function Screensaver:show(event, fallback_message)
end
local screen_w, screen_h = Screen:getWidth(), Screen:getHeight()
widget = container:new{
message_widget = container:new{
dimen = Geom:new{
w = screen_w,
h = screen_h,
@ -410,8 +431,28 @@ function Screensaver:show(event, fallback_message)
}
}
end
-- No overlay needed as we just displayed the message
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
if overlay_message then
@ -488,7 +529,6 @@ end
function Screensaver:addOverlayMessage(widget, text)
local FrameContainer = require("ui/widget/container/framecontainer")
local OverlapGroup = require("ui/widget/overlapgroup")
local RightContainer = require("ui/widget/container/rightcontainer")
local Size = require("ui/size")
local TextWidget = require("ui/widget/textwidget")

Loading…
Cancel
Save