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
pull/5180/head
Frans de Jonge 5 years ago committed by GitHub
parent 5245bc88ff
commit ec6e34cb1e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -9,6 +9,7 @@ local Device = require("device")
local Geom = require("ui/geometry") local Geom = require("ui/geometry")
local Event = require("ui/event") local Event = require("ui/event")
local ImageWidget = require("ui/widget/imagewidget") local ImageWidget = require("ui/widget/imagewidget")
local InfoMessage = require("ui/widget/infomessage")
local OverlapGroup = require("ui/widget/overlapgroup") local OverlapGroup = require("ui/widget/overlapgroup")
local ReaderDogear = require("apps/reader/modules/readerdogear") local ReaderDogear = require("apps/reader/modules/readerdogear")
local ReaderFlipping = require("apps/reader/modules/readerflipping") local ReaderFlipping = require("apps/reader/modules/readerflipping")
@ -736,6 +737,16 @@ function ReaderView:onSetFullScreen(full_screen)
end end
function ReaderView:onSetScrollMode(page_scroll) 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.page_scroll = page_scroll
self:recalculate() self:recalculate()
self.ui:handleEvent(Event:new("InitScrollPageStates")) self.ui:handleEvent(Event:new("InitScrollPageStates"))

@ -1,24 +1,31 @@
local Cache = require("cache") local Cache = require("cache")
local InputContainer = require("ui/widget/container/inputcontainer")
local ConfirmBox = require("ui/widget/confirmbox") local ConfirmBox = require("ui/widget/confirmbox")
local GestureRange = require("ui/gesturerange")
local UIManager = require("ui/uimanager")
local Device = require("device") 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 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 logger = require("logger")
local T = require("ffi/util").template
local _ = require("gettext") local _ = require("gettext")
local Input = Device.input
local Screen = Device.screen
local T = require("ffi/util").template
local ReaderZooming = InputContainer:new{ local ReaderZooming = InputContainer:new{
zoom = 1.0, zoom = 1.0,
-- default to nil so we can trigger ZoomModeUpdate events on start up -- default to nil so we can trigger ZoomModeUpdate events on start up
zoom_mode = nil, zoom_mode = nil,
DEFAULT_ZOOM_MODE = "page", DEFAULT_ZOOM_MODE = "pagewidth",
current_page = 1, 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() function ReaderZooming:init()
@ -333,6 +340,16 @@ function ReaderZooming:genSetZoomModeCallBack(mode)
end end
function ReaderZooming:setZoomMode(mode) 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("SetZoomMode", mode))
self.ui:handleEvent(Event:new("InitScrollPageStates")) self.ui:handleEvent(Event:new("InitScrollPageStates"))
end end

@ -28,6 +28,7 @@ describe("ReaderLink module", function()
document = DocumentRegistry:openDocument(sample_pdf), document = DocumentRegistry:openDocument(sample_pdf),
} }
readerui:handleEvent(Event:new("SetScrollMode", false)) readerui:handleEvent(Event:new("SetScrollMode", false))
readerui:handleEvent(Event:new("SetZoomMode", "page"))
readerui.paging:onGotoPage(1) readerui.paging:onGotoPage(1)
readerui.link:onTap(nil, {pos = {x = 363, y = 585}}) readerui.link:onTap(nil, {pos = {x = 363, y = 585}})
UIManager:run() UIManager:run()
@ -40,6 +41,7 @@ describe("ReaderLink module", function()
document = DocumentRegistry:openDocument(sample_pdf), document = DocumentRegistry:openDocument(sample_pdf),
} }
readerui:handleEvent(Event:new("SetScrollMode", true)) readerui:handleEvent(Event:new("SetScrollMode", true))
readerui:handleEvent(Event:new("SetZoomMode", "page"))
readerui.paging:onGotoPage(1) readerui.paging:onGotoPage(1)
assert.is.same(1, readerui.paging.current_page) assert.is.same(1, readerui.paging.current_page)
readerui.link:onTap(nil, {pos = {x = 250, y = 534}}) readerui.link:onTap(nil, {pos = {x = 250, y = 534}})
@ -67,6 +69,7 @@ describe("ReaderLink module", function()
document = DocumentRegistry:openDocument(sample_pdf), document = DocumentRegistry:openDocument(sample_pdf),
} }
readerui:handleEvent(Event:new("SetScrollMode", false)) readerui:handleEvent(Event:new("SetScrollMode", false))
readerui:handleEvent(Event:new("SetZoomMode", "page"))
readerui.paging:onGotoPage(1) readerui.paging:onGotoPage(1)
readerui.link:onTap(nil, {pos = {x = 363, y = 585}}) readerui.link:onTap(nil, {pos = {x = 363, y = 585}})
UIManager:run() UIManager:run()
@ -81,6 +84,7 @@ describe("ReaderLink module", function()
document = DocumentRegistry:openDocument(sample_pdf), document = DocumentRegistry:openDocument(sample_pdf),
} }
readerui:handleEvent(Event:new("SetScrollMode", true)) readerui:handleEvent(Event:new("SetScrollMode", true))
readerui:handleEvent(Event:new("SetZoomMode", "page"))
readerui.paging:onGotoPage(1) readerui.paging:onGotoPage(1)
assert.is.same(1, readerui.paging.current_page) assert.is.same(1, readerui.paging.current_page)
readerui.link:onTap(nil, {pos = {x = 250, y = 534}}) readerui.link:onTap(nil, {pos = {x = 250, y = 534}})
@ -131,6 +135,7 @@ describe("ReaderLink module", function()
local readerui = ReaderUI:new{ local readerui = ReaderUI:new{
document = DocumentRegistry:openDocument(sample_pdf), document = DocumentRegistry:openDocument(sample_pdf),
} }
readerui:handleEvent(Event:new("SetZoomMode", "page"))
assert.is.falsy(readerui.view.footer_visible) assert.is.falsy(readerui.view.footer_visible)
readerui.paging:onGotoPage(1) readerui.paging:onGotoPage(1)
assert.is.same(1, readerui.paging.current_page) assert.is.same(1, readerui.paging.current_page)

@ -106,6 +106,7 @@ describe("Readerview module", function()
document = DocumentRegistry:openDocument(sample_pdf), document = DocumentRegistry:openDocument(sample_pdf),
} }
readerui:handleEvent(Event:new("SetScrollMode", true)) readerui:handleEvent(Event:new("SetScrollMode", true))
readerui:handleEvent(Event:new("SetZoomMode", "page"))
readerui.zooming:setZoomMode("page") readerui.zooming:setZoomMode("page")
local view = readerui.view local view = readerui.view
local ctx = view:getViewContext() local ctx = view:getViewContext()

Loading…
Cancel
Save