From 8f019b8183006b589a2c8b8fddd6c265632f40ec Mon Sep 17 00:00:00 2001 From: poire-z Date: Sat, 30 Mar 2019 00:04:38 +0100 Subject: [PATCH] Night mode: keep some images non-inverted Have the code pre-invert some images when in night mode, so they get inverted back to normal by night mode. This will allow images to be displayed normally in the following contexts: - images in credocument pages - long-press on images in credocument viewed in ImageViewer - cover thumbnails in File browser and History - full size covers when viewed in ImageViewer - images in Wikipedia lookup results --- frontend/document/credocument.lua | 22 +++++++++++++++------- frontend/ui/widget/imagewidget.lua | 7 +++++++ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/frontend/document/credocument.lua b/frontend/document/credocument.lua index 7060aaad4..acf2c864d 100644 --- a/frontend/document/credocument.lua +++ b/frontend/document/credocument.lua @@ -365,14 +365,22 @@ function CreDocument:drawCurrentView(target, x, y, rect, pos) end -- TODO: self.buffer could be re-used when no page/layout/highlights -- change has been made, to avoid having crengine redraw the exact - -- same buffer. - -- And it could only change when some other methods from here are called - --local start_clock = os.clock() - self._drawn_images_count, self._drawn_images_surface_ratio = self._document:drawCurrentPage(self.buffer, self.render_color) - --print(string.format("CreDocument:drawCurrentView: Rendering took %9.3f ms", (os.clock() - start_clock) * 1000)) - --start_clock = os.clock() + -- same buffer. And it could only change when some other methods + -- from here are called + + -- If in night mode, ask crengine to invert all images, so they + -- get displayed in their original colors when the whole screen + -- is inverted by night mode + local invert_images = G_reader_settings:isTrue("night_mode") + + -- local start_clock = os.clock() + self._drawn_images_count, self._drawn_images_surface_ratio = + self._document:drawCurrentPage(self.buffer, self.render_color, invert_images) + -- print(string.format("CreDocument:drawCurrentView: Rendering took %9.3f ms", (os.clock() - start_clock) * 1000)) + + -- start_clock = os.clock() target:blitFrom(self.buffer, x, y, 0, 0, rect.w, rect.h) - --print(string.format("CreDocument:drawCurrentView: Blitting took %9.3f ms", (os.clock() - start_clock) * 1000)) + -- print(string.format("CreDocument:drawCurrentView: Blitting took %9.3f ms", (os.clock() - start_clock) * 1000)) end function CreDocument:drawCurrentViewByPos(target, x, y, rect, pos) diff --git a/frontend/ui/widget/imagewidget.lua b/frontend/ui/widget/imagewidget.lua index 1565aff6b..a6b7eb416 100644 --- a/frontend/ui/widget/imagewidget.lua +++ b/frontend/ui/widget/imagewidget.lua @@ -373,6 +373,13 @@ function ImageWidget:paintTo(bb, x, y) if self.dim then bb:dimRect(x, y, size.w, size.h) end + -- If in night mode, invert all rendered images, so the original is + -- displayed when the whole screen is inverted by night mode. + -- Except for our black & white icon files, that we want inverted + -- in night mode. + if not self.file and G_reader_settings:isTrue("night_mode") then + bb:invertRect(x, y, size.w, size.h) + end end -- This will normally be called by our WidgetContainer:free()