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()