From ec6e34cb1e11fc9449b950a51054d61e98b21390 Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Mon, 5 Aug 2019 18:38:10 +0200 Subject: [PATCH] Change default zoom mode & add warning message for fit page + scroll (#5170) * [UX] Change default zoom mode to page width Fixes #5166. * Warning popup for weird scroll mode combinations --- frontend/apps/reader/modules/readerview.lua | 11 ++++++ .../apps/reader/modules/readerzooming.lua | 35 ++++++++++++++----- spec/unit/readerlink_spec.lua | 5 +++ spec/unit/readerview_spec.lua | 1 + 4 files changed, 43 insertions(+), 9 deletions(-) diff --git a/frontend/apps/reader/modules/readerview.lua b/frontend/apps/reader/modules/readerview.lua index 66e33415c..920541b2f 100644 --- a/frontend/apps/reader/modules/readerview.lua +++ b/frontend/apps/reader/modules/readerview.lua @@ -9,6 +9,7 @@ local Device = require("device") local Geom = require("ui/geometry") local Event = require("ui/event") local ImageWidget = require("ui/widget/imagewidget") +local InfoMessage = require("ui/widget/infomessage") local OverlapGroup = require("ui/widget/overlapgroup") local ReaderDogear = require("apps/reader/modules/readerdogear") local ReaderFlipping = require("apps/reader/modules/readerflipping") @@ -736,6 +737,16 @@ function ReaderView:onSetFullScreen(full_screen) end function ReaderView:onSetScrollMode(page_scroll) + if self.ui.document.info.has_pages and page_scroll and self.ui.zooming.paged_modes[self.zoom_mode] then + UIManager:show(InfoMessage:new{ + text = _([[ +Continuous view (scroll mode) works best with zoom to page width or zoom to content width. + +In combination with zoom to fit page, page height, content height or content, continuous view can cause unexpected shifts when turning pages.]]), + timeout = 5, + }) + end + self.page_scroll = page_scroll self:recalculate() self.ui:handleEvent(Event:new("InitScrollPageStates")) diff --git a/frontend/apps/reader/modules/readerzooming.lua b/frontend/apps/reader/modules/readerzooming.lua index de92e3718..d8297defe 100644 --- a/frontend/apps/reader/modules/readerzooming.lua +++ b/frontend/apps/reader/modules/readerzooming.lua @@ -1,24 +1,31 @@ local Cache = require("cache") -local InputContainer = require("ui/widget/container/inputcontainer") local ConfirmBox = require("ui/widget/confirmbox") -local GestureRange = require("ui/gesturerange") -local UIManager = require("ui/uimanager") local Device = require("device") -local Input = require("device").input -local Screen = require("device").screen -local Geom = require("ui/geometry") local Event = require("ui/event") +local Geom = require("ui/geometry") +local GestureRange = require("ui/gesturerange") +local InfoMessage = require("ui/widget/infomessage") +local InputContainer = require("ui/widget/container/inputcontainer") +local UIManager = require("ui/uimanager") local logger = require("logger") -local T = require("ffi/util").template local _ = require("gettext") +local Input = Device.input +local Screen = Device.screen +local T = require("ffi/util").template local ReaderZooming = InputContainer:new{ zoom = 1.0, -- default to nil so we can trigger ZoomModeUpdate events on start up zoom_mode = nil, - DEFAULT_ZOOM_MODE = "page", + DEFAULT_ZOOM_MODE = "pagewidth", current_page = 1, - rotation = 0 + rotation = 0, + paged_modes = { + page = _("Zoom to fit page works best with page view."), + pageheight = _("Zoom to fit page height works best with page view."), + contentheight = _("Zoom to fit content height works best with page view."), + content = _("Zoom to fit content works best with page view."), + }, } function ReaderZooming:init() @@ -333,6 +340,16 @@ function ReaderZooming:genSetZoomModeCallBack(mode) end function ReaderZooming:setZoomMode(mode) + if self.ui.view.page_scroll and self.paged_modes[mode] then + UIManager:show(InfoMessage:new{ + text = T(_([[ +%1 + +In combination with continuous view (scroll mode), this can cause unexpected vertical shifts when turning pages.]]), self.paged_modes[mode]), + timeout = 5, + }) + end + self.ui:handleEvent(Event:new("SetZoomMode", mode)) self.ui:handleEvent(Event:new("InitScrollPageStates")) end diff --git a/spec/unit/readerlink_spec.lua b/spec/unit/readerlink_spec.lua index c1cbfe547..9d85198b9 100644 --- a/spec/unit/readerlink_spec.lua +++ b/spec/unit/readerlink_spec.lua @@ -28,6 +28,7 @@ describe("ReaderLink module", function() document = DocumentRegistry:openDocument(sample_pdf), } readerui:handleEvent(Event:new("SetScrollMode", false)) + readerui:handleEvent(Event:new("SetZoomMode", "page")) readerui.paging:onGotoPage(1) readerui.link:onTap(nil, {pos = {x = 363, y = 585}}) UIManager:run() @@ -40,6 +41,7 @@ describe("ReaderLink module", function() document = DocumentRegistry:openDocument(sample_pdf), } readerui:handleEvent(Event:new("SetScrollMode", true)) + readerui:handleEvent(Event:new("SetZoomMode", "page")) readerui.paging:onGotoPage(1) assert.is.same(1, readerui.paging.current_page) readerui.link:onTap(nil, {pos = {x = 250, y = 534}}) @@ -67,6 +69,7 @@ describe("ReaderLink module", function() document = DocumentRegistry:openDocument(sample_pdf), } readerui:handleEvent(Event:new("SetScrollMode", false)) + readerui:handleEvent(Event:new("SetZoomMode", "page")) readerui.paging:onGotoPage(1) readerui.link:onTap(nil, {pos = {x = 363, y = 585}}) UIManager:run() @@ -81,6 +84,7 @@ describe("ReaderLink module", function() document = DocumentRegistry:openDocument(sample_pdf), } readerui:handleEvent(Event:new("SetScrollMode", true)) + readerui:handleEvent(Event:new("SetZoomMode", "page")) readerui.paging:onGotoPage(1) assert.is.same(1, readerui.paging.current_page) readerui.link:onTap(nil, {pos = {x = 250, y = 534}}) @@ -131,6 +135,7 @@ describe("ReaderLink module", function() local readerui = ReaderUI:new{ document = DocumentRegistry:openDocument(sample_pdf), } + readerui:handleEvent(Event:new("SetZoomMode", "page")) assert.is.falsy(readerui.view.footer_visible) readerui.paging:onGotoPage(1) assert.is.same(1, readerui.paging.current_page) diff --git a/spec/unit/readerview_spec.lua b/spec/unit/readerview_spec.lua index deb9ac1b9..d82e67bd6 100644 --- a/spec/unit/readerview_spec.lua +++ b/spec/unit/readerview_spec.lua @@ -106,6 +106,7 @@ describe("Readerview module", function() document = DocumentRegistry:openDocument(sample_pdf), } readerui:handleEvent(Event:new("SetScrollMode", true)) + readerui:handleEvent(Event:new("SetZoomMode", "page")) readerui.zooming:setZoomMode("page") local view = readerui.view local ctx = view:getViewContext()