mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
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.
This commit is contained in:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user