From ae1dd3b3806db856aaa7e956e4b07c602f313bfc Mon Sep 17 00:00:00 2001 From: chrox Date: Wed, 5 Nov 2014 16:58:09 +0800 Subject: [PATCH] screenshot to PNG files by default --- .../apps/reader/modules/readerscreenshot.lua | 21 ++++++----- frontend/device/screen.lua | 6 +++- spec/unit/filemanager_spec.lua | 13 +++++++ spec/unit/readerscreenshot_spec.lua | 36 +++++++++++++++++++ spec/unit/readerui_spec.lua | 6 ++++ 5 files changed, 70 insertions(+), 12 deletions(-) create mode 100644 spec/unit/filemanager_spec.lua create mode 100644 spec/unit/readerscreenshot_spec.lua diff --git a/frontend/apps/reader/modules/readerscreenshot.lua b/frontend/apps/reader/modules/readerscreenshot.lua index 0698c468f..8fad7d925 100644 --- a/frontend/apps/reader/modules/readerscreenshot.lua +++ b/frontend/apps/reader/modules/readerscreenshot.lua @@ -7,7 +7,9 @@ local InfoMessage = require("ui/widget/infomessage") local _ = require("gettext") local DEBUG = require("dbg") -local ReaderScreenshot = InputContainer:new{} +local ReaderScreenshot = InputContainer:new{ + datetime_name = "screenshots/Screenshot_%Y-%b-%d_%Hh%M.png", +} function ReaderScreenshot:init() local diagonal = math.sqrt( @@ -32,16 +34,13 @@ function ReaderScreenshot:init() } end -function ReaderScreenshot:onScreenshot() - if os.execute("screenshot") ~= 0 then - local screenshot_name = os.date("screenshots/Screenshot_%Y-%B-%d_%Hh%M.pam") - UIManager:show(InfoMessage:new{ - text = _("Writing screen to ")..screenshot_name, - timeout = 2, - }) - Screen.bb:writePAM(screenshot_name) - DEBUG(screenshot_name) - end +function ReaderScreenshot:onScreenshot(filename) + local screenshot_name = filename or os.date(self.datetime_name) + UIManager:show(InfoMessage:new{ + text = _("Writing screen to ")..screenshot_name, + timeout = 2, + }) + Screen:shot(screenshot_name) UIManager.full_refresh = true return true end diff --git a/frontend/device/screen.lua b/frontend/device/screen.lua index 81ef62f9d..d755bb3cc 100644 --- a/frontend/device/screen.lua +++ b/frontend/device/screen.lua @@ -174,10 +174,14 @@ function Screen:restoreFromSavedBB() end end +function Screen:shot(filename) + DEBUG("write PNG file", filename) + self.bb:writePNG(filename) +end + function Screen:close() DEBUG("close screen framebuffer") self.fb:close() end - return Screen diff --git a/spec/unit/filemanager_spec.lua b/spec/unit/filemanager_spec.lua new file mode 100644 index 000000000..87e6666bc --- /dev/null +++ b/spec/unit/filemanager_spec.lua @@ -0,0 +1,13 @@ +require("commonrequire") +local FileManager = require("apps/filemanager/filemanager") +local UIManager = require("ui/uimanager") +local Screen = require("device").screen +local DEBUG = require("dbg") + +describe("FileManager module", function() + it("should show file manager", function() + FileManager:showFiles("../../test") + UIManager:scheduleIn(1, function() UIManager:quit() end) + UIManager:run() + end) +end) diff --git a/spec/unit/readerscreenshot_spec.lua b/spec/unit/readerscreenshot_spec.lua new file mode 100644 index 000000000..82462bdc9 --- /dev/null +++ b/spec/unit/readerscreenshot_spec.lua @@ -0,0 +1,36 @@ +require("commonrequire") +local DocumentRegistry = require("document/documentregistry") +local ReaderUI = require("apps/reader/readerui") +local lfs = require("libs/libkoreader-lfs") +local UIManager = require("ui/uimanager") +local Screen = require("device").screen +local Event = require("ui/event") +local DEBUG = require("dbg") + +describe("ReaderScreenshot module", function() + local sample_epub = "spec/front/unit/data/leaves.epub" + local readerui + setup(function() + readerui = ReaderUI:new{ + document = DocumentRegistry:openDocument(sample_epub), + } + end) + it("should get screenshot in portrait", function() + local name = "screenshots/reader_screenshot_portrait.png" + readerui:handleEvent(Event:new("ChangeScreenMode", "portrait")) + UIManager:show(readerui) + UIManager:scheduleIn(1, function() UIManager:close(readerui) end) + UIManager:run() + readerui.screenshot:onScreenshot(name) + assert.truthy(lfs.attributes(name, "mode")) + end) + it("should get screenshot in landscape", function() + local name = "screenshots/reader_screenshot_landscape.png" + readerui:handleEvent(Event:new("ChangeScreenMode", "landscape")) + UIManager:show(readerui) + UIManager:scheduleIn(2, function() UIManager:close(readerui) end) + UIManager:run() + readerui.screenshot:onScreenshot(name) + assert.truthy(lfs.attributes(name, "mode")) + end) +end) diff --git a/spec/unit/readerui_spec.lua b/spec/unit/readerui_spec.lua index 241797d20..4e13a433f 100644 --- a/spec/unit/readerui_spec.lua +++ b/spec/unit/readerui_spec.lua @@ -2,6 +2,7 @@ require("commonrequire") local DocumentRegistry = require("document/documentregistry") local ReaderUI = require("apps/reader/readerui") local DocSettings = require("docsettings") +local UIManager = require("ui/uimanager") local DEBUG = require("dbg") describe("Readerui module", function() @@ -21,6 +22,11 @@ describe("Readerui module", function() assert.are.same(doc_settings.data.last_xpointer, readerui.doc_settings.data.last_xpointer) end) + it("should show reader", function() + UIManager:show(readerui) + UIManager:scheduleIn(1, function() UIManager:close(readerui) end) + UIManager:run() + end) it("should close document", function() readerui:closeDocument() assert(readerui.document == nil)