From 134998a3230e15a6437784d65e24fb334d6f639c Mon Sep 17 00:00:00 2001 From: NiLuJe Date: Thu, 14 Feb 2019 20:23:28 +0100 Subject: [PATCH] [fix] Eliminate ghosting on eInk when showing an image ScreenSaver (#4591) * Flash a white screen before showing a screensaver image, to prevent ghosting. * Really limit the white flash to full-screen images * Limit that behavior to eInk screens (Not that clear() is implemented anywhere else, but, still). --- frontend/device/generic/device.lua | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/frontend/device/generic/device.lua b/frontend/device/generic/device.lua index fc02b7765..28b5ef695 100644 --- a/frontend/device/generic/device.lua +++ b/frontend/device/generic/device.lua @@ -176,7 +176,7 @@ function Device:onPowerEvent(ev) logger.dbg("Already in screen saver mode, suspending...") self:rescheduleSuspend() end - -- else we we not in screensaver mode + -- else we were not in screensaver mode elseif ev == "Power" or ev == "Suspend" then self.powerd:beforeSuspend() local UIManager = require("ui/uimanager") @@ -186,6 +186,16 @@ function Device:onPowerEvent(ev) if G_reader_settings:readSetting("screensaver_type") ~= "message" then self.orig_rotation_mode = self.screen:getRotationMode() self.screen:setRotationMode(0) + + -- On eInk, if we're using a screensaver mode that shows an image, + -- flash the screen to white first, to eliminate ghosting. + if self:hasEinkScreen() and + 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" then + self.screen:clear(self.screen:getScreenWidth(), self.screen:getScreenHeight()) + self.screen:refreshFull() + end else -- nil it, in case user switched ScreenSaver modes during our lifetime. self.orig_rotation_mode = nil