Add "message at top of screen" screensaver (#5739)

Adds a screensaver mode which is just a line of text at the top of the screen. Purpose is to be minimally obstructive while still displaying something to indicate the device is asleep.
pull/5893/head
Rena Kunisaki 4 years ago committed by GitHub
parent 7b1ae4e486
commit fd05842686
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -13,6 +13,7 @@ end
local function whiteBackground() return G_reader_settings:isTrue("screensaver_white_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 messagePosition() return G_reader_settings:readSetting("screensaver_message_position") end
return {
{
@ -177,6 +178,38 @@ return {
end,
separator = true,
},
{
text = _("Screensaver message position"),
sub_item_table = {
{
text = _("Top"),
checked_func = function()
return messagePosition() == "top"
end,
callback = function()
G_reader_settings:saveSetting("screensaver_message_position", "top")
end
},
{
text = _("Middle"),
checked_func = function()
return messagePosition() == "middle" or messagePosition() == nil
end,
callback = function()
G_reader_settings:saveSetting("screensaver_message_position", "middle")
end
},
{
text = _("Bottom"),
checked_func = function()
return messagePosition() == "bottom"
end,
callback = function()
G_reader_settings:saveSetting("screensaver_message_position", "bottom")
end
},
}
},
{
text = _("Delay when exit from screensaver"),
sub_item_table = {

@ -2,14 +2,19 @@ local BD = require("ui/bidi")
local Blitbuffer = require("ffi/blitbuffer")
local ButtonDialogTitle = require("ui/widget/buttondialogtitle")
local BookStatusWidget = require("ui/widget/bookstatuswidget")
local BottomContainer = require("ui/widget/container/bottomcontainer")
local DataStorage = require("datastorage")
local Device = require("device")
local DocSettings = require("docsettings")
local DocumentRegistry = require("document/documentregistry")
local Font = require("ui/font")
local Geom = require("ui/geometry")
local InfoMessage = require("ui/widget/infomessage")
local ImageWidget = require("ui/widget/imagewidget")
local Math = require("optmath")
local ScreenSaverWidget = require("ui/widget/screensaverwidget")
local TextBoxWidget = require("ui/widget/textboxwidget")
local TopContainer = require("ui/widget/container/topcontainer")
local UIManager = require("ui/uimanager")
local lfs = require("libs/libkoreader-lfs")
local logger = require("logger")
@ -361,6 +366,7 @@ function Screensaver:show(event, fallback_message)
end
if screensaver_type == "message" 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
background = nil -- no background filling, let book text visible
covers_fullscreen = false
@ -376,10 +382,34 @@ function Screensaver:show(event, fallback_message)
screensaver_message = self:expandSpecial(screensaver_message, fallback)
end
widget = InfoMessage:new{
text = screensaver_message,
readonly = true,
}
if message_pos == "middle" or message_pos == nil then
widget = InfoMessage:new{
text = screensaver_message,
readonly = true,
}
else
local face = Font:getFace("infofont")
local container
if message_pos == "bottom" then
container = BottomContainer
else
container = TopContainer
end
local screen_w, screen_h = Screen:getWidth(), Screen:getHeight()
widget = container:new{
dimen = Geom:new{
w = screen_w,
h = screen_h,
},
TextBoxWidget:new{
text = screensaver_message,
face = face,
width = screen_w,
alignment = "center",
}
}
end
-- No overlay needed as we just displayed the message
overlay_message = nil
end
@ -457,12 +487,10 @@ function Screensaver:close()
end
function Screensaver:addOverlayMessage(widget, text)
local Font = require("ui/font")
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 TextBoxWidget = require("ui/widget/textboxwidget")
local TextWidget = require("ui/widget/textwidget")
local face = Font:getFace("infofont")

Loading…
Cancel
Save