From 54ead5fc887331612d2e57d736c4e1dbde4e2efa Mon Sep 17 00:00:00 2001 From: yparitcher Date: Wed, 6 Apr 2022 10:42:29 -0400 Subject: [PATCH] Page turn animations Kindle PW5 (MTK) with hardware support Currently only in Crengine --- base | 2 +- frontend/apps/reader/modules/readerrolling.lua | 6 ++++++ frontend/apps/reader/modules/readerview.lua | 8 ++++++++ frontend/device/generic/device.lua | 1 + frontend/device/kindle/device.lua | 1 + frontend/ui/elements/page_turns.lua | 13 +++++++++++++ 6 files changed, 30 insertions(+), 1 deletion(-) diff --git a/base b/base index 1e3f3a42f..095b0281c 160000 --- a/base +++ b/base @@ -1 +1 @@ -Subproject commit 1e3f3a42fde246d4aa44f0fc9ea9f49807b3fea7 +Subproject commit 095b0281ccfd77b38d6291827bf32a1d5237531e diff --git a/frontend/apps/reader/modules/readerrolling.lua b/frontend/apps/reader/modules/readerrolling.lua index 2c5afb370..83c8ea3f6 100644 --- a/frontend/apps/reader/modules/readerrolling.lua +++ b/frontend/apps/reader/modules/readerrolling.lua @@ -1006,6 +1006,9 @@ function ReaderRolling:_gotoPos(new_pos, do_dim_area) else self.view.dim_area:clear() end + if self.current_pos and not UIManager.currently_scrolling then + self.ui:handleEvent(Event:new("PageChangeAnimation", new_pos > self.current_pos)) + end self.ui.document:gotoPos(new_pos) -- The current page we get in scroll mode may be a bit innacurate, -- but we give it anyway to onPosUpdate so footer and statistics can @@ -1038,6 +1041,9 @@ function ReaderRolling:_gotoPage(new_page, free_first_page, internal) end end end + if self.current_page then + self.ui:handleEvent(Event:new("PageChangeAnimation", new_page > self.current_page)) + end self.ui.document:gotoPage(new_page, internal) if self.view.view_mode == "page" then self.ui:handleEvent(Event:new("PageUpdate", self.ui.document:getCurrentPage())) diff --git a/frontend/apps/reader/modules/readerview.lua b/frontend/apps/reader/modules/readerview.lua index b23793c61..475c8a7a4 100644 --- a/frontend/apps/reader/modules/readerview.lua +++ b/frontend/apps/reader/modules/readerview.lua @@ -889,6 +889,14 @@ function ReaderView:onRotationUpdate(rotation) self:recalculate() end +function ReaderView:onPageChangeAnimation(forward) + if Device:canDoSwipeAnimation() and G_reader_settings:isTrue("swipe_animations") then + if self.inverse_reading_order then forward = not forward end + Screen:setSwipeAnimations(true) + Screen:setSwipeDirection(forward) + end +end + function ReaderView:onReaderFooterVisibilityChange() -- Don't bother ReaderRolling with this nonsense, the footer's height is NOT handled via visible_area there ;) if self.ui.paging and self.state.page then diff --git a/frontend/device/generic/device.lua b/frontend/device/generic/device.lua index 65e8adc25..b189c1a53 100644 --- a/frontend/device/generic/device.lua +++ b/frontend/device/generic/device.lua @@ -54,6 +54,7 @@ local Device = { hasExternalSD = no, -- or other storage volume that cannot be accessed using the File Manager canHWDither = no, canHWInvert = no, + canDoSwipeAnimation = no, canModifyFBInfo = no, -- some NTX boards do wonky things with the rotate flag after a FBIOPUT_VSCREENINFO ioctl canUseCBB = yes, -- The C BB maintains a 1:1 feature parity with the Lua BB, except that is has NO support for BB4, and limited support for BBRGB24 hasColorScreen = no, diff --git a/frontend/device/kindle/device.lua b/frontend/device/kindle/device.lua index defe540bd..0a83a4e44 100644 --- a/frontend/device/kindle/device.lua +++ b/frontend/device/kindle/device.lua @@ -473,6 +473,7 @@ local KindlePaperWhite5 = Kindle:new{ touch_dev = "/dev/input/by-path/platform-1001e000.i2c-event", -- NOTE: While hardware dithering (via MDP) should be a thing, it doesn't appear to do anything right now :/. canHWDither = no, + canDoSwipeAnimation = yes, } function Kindle2:init() diff --git a/frontend/ui/elements/page_turns.lua b/frontend/ui/elements/page_turns.lua index 2519befd6..b2c1677ac 100644 --- a/frontend/ui/elements/page_turns.lua +++ b/frontend/ui/elements/page_turns.lua @@ -141,6 +141,19 @@ When enabled the UI direction for the Table of Contents, Book Map, and Page Brow } } +if Device:canDoSwipeAnimation() then + table.insert(PageTurns.sub_item_table, { + text =_("Page Turn Animations"), + checked_func = function() + return G_reader_settings:isTrue("swipe_animations") + end, + callback = function() + G_reader_settings:flipNilOrFalse("swipe_animations") + end, + separator = true, + }) +end + if Device:hasKeys() then table.insert(PageTurns.sub_item_table, { text = _("Invert page turn buttons"),