diff --git a/frontend/ui/elements/screensaver_menu.lua b/frontend/ui/elements/screensaver_menu.lua index 3212ad0fb..999313c41 100644 --- a/frontend/ui/elements/screensaver_menu.lua +++ b/frontend/ui/elements/screensaver_menu.lua @@ -31,9 +31,8 @@ return { text = _("Wallpaper"), sub_item_table = { genMenuItem(_("Show book cover on sleep screen"), "screensaver_type", "cover", hasLastFile), - genMenuItem(_("Show custom image on sleep screen"), "screensaver_type", "image_file"), + genMenuItem(_("Show custom image or cover on sleep screen"), "screensaver_type", "document_cover"), genMenuItem(_("Use random image from folder on sleep screen"), "screensaver_type", "random_image"), - genMenuItem(_("Show document cover on sleep screen"), "screensaver_type", "document_cover"), genMenuItem(_("Show reading progress on sleep screen"), "screensaver_type", "readingprogress", isReaderProgressEnabled), genMenuItem(_("Show book status on sleep screen"), "screensaver_type", "bookstatus", hasLastFile), genMenuItem(_("Leave screen as-is"), "screensaver_type", "disable", nil, true), @@ -43,7 +42,6 @@ return { enabled_func = function() return G_reader_settings:readSetting("screensaver_type") == "cover" or G_reader_settings:readSetting("screensaver_type") == "random_image" - or G_reader_settings:readSetting("screensaver_type") == "image_file" or G_reader_settings:readSetting("screensaver_type") == "document_cover" end, sub_item_table = { @@ -82,19 +80,18 @@ return { { text = _("Custom images"), enabled_func = function() - return G_reader_settings:readSetting("screensaver_type") == "image_file" - or G_reader_settings:readSetting("screensaver_type") == "random_image" - or G_reader_settings:readSetting("screensaver_type") == "document_cover" + return G_reader_settings:readSetting("screensaver_type") == "random_image" + or G_reader_settings:readSetting("screensaver_type") == "document_cover" end, sub_item_table = { { - text = _("Select custom image"), + text = _("Select image or document cover"), enabled_func = function() - return G_reader_settings:readSetting("screensaver_type") == "image_file" + return G_reader_settings:readSetting("screensaver_type") == "document_cover" end, keep_menu_open = true, callback = function() - Screensaver:chooseFile() + Screensaver:chooseFile(true) end, }, { @@ -107,16 +104,6 @@ return { Screensaver:chooseFolder() end, }, - { - text = _("Select document cover"), - enabled_func = function() - return G_reader_settings:readSetting("screensaver_type") == "document_cover" - end, - keep_menu_open = true, - callback = function() - Screensaver:chooseFile(true) - end, - }, }, }, }, diff --git a/frontend/ui/screensaver.lua b/frontend/ui/screensaver.lua index a69717c5a..0f78d5207 100644 --- a/frontend/ui/screensaver.lua +++ b/frontend/ui/screensaver.lua @@ -446,9 +446,13 @@ function Screensaver:setup(event, event_message) end if not excluded then if lastfile and lfs.attributes(lastfile, "mode") == "file" then - self.image = FileManagerBookInfo:getCoverImage(ui and ui.document, lastfile) - if self.image == nil then - self.screensaver_type = "random_image" + if DocumentRegistry:isImageFile(lastfile) then + self.image_file = lastfile + else + self.image = FileManagerBookInfo:getCoverImage(ui and ui.document, lastfile) + if self.image == nil then + self.screensaver_type = "random_image" + end end else self.screensaver_type = "random_image" @@ -463,6 +467,7 @@ function Screensaver:setup(event, event_message) self.screensaver_type = "random_image" end end + -- NB Kept around to support old settings. if self.screensaver_type == "image_file" then self.image_file = G_reader_settings:readSetting(self.prefix .. "screensaver_image") or G_reader_settings:readSetting("screensaver_image") @@ -542,15 +547,22 @@ function Screensaver:show() -- Build the main widget for the effective mode, all the sanity checks were handled in setup local widget = nil - if self.screensaver_type == "cover" then - widget = ImageWidget:new{ - image = self.image, - image_disposable = true, + if self.screensaver_type == "cover" or self.screensaver_type == "image_file" or self.screensaver_type == "random_image" then + local widget_settings = { width = Screen:getWidth(), height = Screen:getHeight(), scale_factor = G_reader_settings:isFalse("screensaver_stretch_images") and 0 or nil, stretch_limit_percentage = G_reader_settings:readSetting("screensaver_stretch_limit_percentage"), } + if self.image then + widget_settings.image = self.image + widget_settings.image_disposable = true + elseif self.image_file then + widget_settings.file = self.image_file + widget_settings.file_do_cache = false + widget_settings.alpha = true + end + widget = ImageWidget:new(widget_settings) elseif self.screensaver_type == "bookstatus" then local ReaderUI = require("apps/reader/readerui") local ui = ReaderUI.instance @@ -564,16 +576,6 @@ function Screensaver:show() ui = ui, readonly = true, } - elseif self.screensaver_type == "random_image" or self.screensaver_type == "image_file" then - widget = ImageWidget:new{ - file = self.image_file, - file_do_cache = false, - alpha = true, - width = Screen:getWidth(), - height = Screen:getHeight(), - scale_factor = G_reader_settings:isFalse("screensaver_stretch_images") and 0 or nil, - stretch_limit_percentage = G_reader_settings:readSetting("screensaver_stretch_limit_percentage"), - } elseif self.screensaver_type == "readingprogress" then widget = Screensaver.getReaderProgress() end