From b4d5cfccb79cf749bee83311b9b54899c1052c19 Mon Sep 17 00:00:00 2001 From: NiLuJe Date: Thu, 23 Jul 2020 06:01:46 +0200 Subject: [PATCH] Fix a few logic holes in dithering mode selection (#6419) * Allow switching to SW dithering on a HW-capable device without that being lost on boot (and, worse, left in an undithered state). * Make sure the automagic toggles between HW/SW in the Dev menu are properly saved. --- base | 2 +- frontend/apps/filemanager/filemanagermenu.lua | 10 ++++++---- reader.lua | 9 +++++++-- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/base b/base index fac6e7c85..ac608dec4 160000 --- a/base +++ b/base @@ -1 +1 @@ -Subproject commit fac6e7c85250b138a5603f54fc3427d62c141420 +Subproject commit ac608dec4033f3eef8bcdd8c4861dc4efc0abaab diff --git a/frontend/apps/filemanager/filemanagermenu.lua b/frontend/apps/filemanager/filemanagermenu.lua index 144a941c1..019ffa8e5 100644 --- a/frontend/apps/filemanager/filemanagermenu.lua +++ b/frontend/apps/filemanager/filemanagermenu.lua @@ -356,11 +356,12 @@ function FileManagerMenu:setUpdateItemTable() return not Device.screen.hw_dithering end, callback = function() - G_reader_settings:flipNilOrFalse("dev_no_hw_dither") Device.screen:toggleHWDithering() + G_reader_settings:saveSetting("dev_no_hw_dither", not Device.screen.hw_dithering) -- Make sure SW dithering gets disabled when we enable HW dithering if Device.screen.hw_dithering and Device.screen.sw_dithering then - Device.screen:toggleSWDithering() + G_reader_settings:saveSetting("dev_no_sw_dither", true) + Device.screen:toggleSWDithering(false) end UIManager:setDirty("all", "full") end, @@ -376,11 +377,12 @@ function FileManagerMenu:setUpdateItemTable() return not Device.screen.sw_dithering end, callback = function() - G_reader_settings:flipNilOrFalse("dev_no_sw_dither") Device.screen:toggleSWDithering() + G_reader_settings:saveSetting("dev_no_sw_dither", not Device.screen.sw_dithering) -- Make sure HW dithering gets disabled when we enable SW dithering if Device.screen.hw_dithering and Device.screen.sw_dithering then - Device.screen:toggleHWDithering() + G_reader_settings:saveSetting("dev_no_hw_dither", true) + Device.screen:toggleHWDithering(false) end UIManager:setDirty("all", "full") end, diff --git a/reader.lua b/reader.lua index 9b49a9fcd..147cb86c5 100755 --- a/reader.lua +++ b/reader.lua @@ -130,10 +130,15 @@ end if Device:hasEinkScreen() then Device.screen:setupDithering() if Device.screen.hw_dithering and G_reader_settings:isTrue("dev_no_hw_dither") then - Device.screen:toggleHWDithering() + Device.screen:toggleHWDithering(false) end if Device.screen.sw_dithering and G_reader_settings:isTrue("dev_no_sw_dither") then - Device.screen:toggleSWDithering() + Device.screen:toggleSWDithering(false) + end + -- NOTE: If device can HW dither (i.e., after setupDithering(), hw_dithering is true, but sw_dithering is false), + -- but HW dither is explicitly disabled, and SW dither enabled, don't leave SW dither disabled (i.e., re-enable sw_dithering)! + if Device:canHWDither() and G_reader_settings:isTrue("dev_no_hw_dither") and G_reader_settings:nilOrFalse("dev_no_sw_dither") then + Device.screen:toggleSWDithering(true) end end