From aed27a5a160f590203824265a1fa830b4821c148 Mon Sep 17 00:00:00 2001 From: NiLuJe Date: Tue, 18 Feb 2020 02:24:48 +0100 Subject: [PATCH] Warn if color rendering is enabled on a grayscale device. (#5871) * Make sure the Color menu is accessible on GrayScale device, in the event one would have inherited a color-enabled settings from another device... * Warn on startup if color rendering is enabled on a grayscale device. A non-exhaustive lists of things such a setup would break: * same-to-same blitbuffers for pretty much every rendering engine * same-to-same blitting codepaths and fast-paths * software dithering in CRe --- .../elements/common_settings_menu_table.lua | 3 ++- .../ui/elements/screen_color_menu_table.lua | 3 ++- reader.lua | 19 +++++++++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/frontend/ui/elements/common_settings_menu_table.lua b/frontend/ui/elements/common_settings_menu_table.lua index 603028f7d..4bb098676 100644 --- a/frontend/ui/elements/common_settings_menu_table.lua +++ b/frontend/ui/elements/common_settings_menu_table.lua @@ -198,7 +198,8 @@ if Device:canToggleGSensor() then common_settings.screen_toggle_gsensor = require("ui/elements/screen_toggle_gsensor") end -if Screen.isColorScreen() then +-- NOTE: Allow disabling color if it's mistakenly enabled on a Grayscale screen (after a settings import?) +if Screen:isColorEnabled() or Screen:isColorScreen() then common_settings.color_rendering = require("ui/elements/screen_color_menu_table") end diff --git a/frontend/ui/elements/screen_color_menu_table.lua b/frontend/ui/elements/screen_color_menu_table.lua index cc40a72be..bfcf6583f 100644 --- a/frontend/ui/elements/screen_color_menu_table.lua +++ b/frontend/ui/elements/screen_color_menu_table.lua @@ -4,9 +4,10 @@ local UIManager = require("ui/uimanager") local CanvasContext = require("document/canvascontext") local _ = require("gettext") +-- NOTE: Again, make sure this is enabled if for some reason color is enabled on a Grayscale screen... return { text = _("Color rendering"), - enabled_func = Screen.isColorScreen, + enabled = Screen:isColorEnabled() or Screen:isColorScreen(), checked_func = Screen.isColorEnabled, callback = function() local new_val = not Screen.isColorEnabled() diff --git a/reader.lua b/reader.lua index fe9718692..95369d223 100755 --- a/reader.lua +++ b/reader.lua @@ -182,6 +182,25 @@ if Device:hasColorScreen() and not G_reader_settings:has("color_rendering") then }) end +-- Conversely, if color is enabled on a Grayscale screen (e.g., after importing settings from a color device), warn that it'll break stuff and adversely affect performance. +if G_reader_settings:isTrue("color_rendering") and not Device:hasColorScreen() then + local ConfirmBox = require("ui/widget/confirmbox") + UIManager:show(ConfirmBox:new{ + text = _("Color rendering is mistakenly enabled on your grayscale device.\nThis will subtly break some features, and adversely affect performance."), + cancel_text = _("Ignore"), + cancel_callback = function() + return + end, + ok_text = _("Disable"), + ok_callback = function() + local Event = require("ui/event") + G_reader_settings:delSetting("color_rendering") + CanvasContext:setColorRenderingEnabled(false) + UIManager:broadcastEvent(Event:new("ColorRenderingUpdate")) + end, + }) +end + -- Helpers local lfs = require("libs/libkoreader-lfs") local function retryLastFile()