From 8251cd6ac80288381ce717e210b6fb874b7b18f7 Mon Sep 17 00:00:00 2001 From: chihyang Date: Thu, 9 Jun 2016 21:28:27 +0800 Subject: [PATCH 1/4] Add a UI option to set 'read from right to left' --- defaults.lua | 1 + frontend/ui/data/koptoptions.lua | 7 +++++++ frontend/ui/data/strings.lua | 1 + 3 files changed, 9 insertions(+) diff --git a/defaults.lua b/defaults.lua index 865788d5a..49efe6050 100644 --- a/defaults.lua +++ b/defaults.lua @@ -95,6 +95,7 @@ DKOPTREADER_CONFIG_AUTO_STRAIGHTEN = 0 -- range from 0 to 10 DKOPTREADER_CONFIG_JUSTIFICATION = 3 -- -1 = auto, 0 = left, 1 = center, 2 = right, 3 = full DKOPTREADER_CONFIG_MAX_COLUMNS = 2 -- range from 1 to 4 DKOPTREADER_CONFIG_CONTRAST = 1.0 -- range from 0.2 to 2.0 +DKOPTREADER_CONFIG_INVERSE_READING_ORDER = 0 -- 1 = enable, 0 = disable -- word spacing for reflow DKOPTREADER_CONFIG_WORD_SPACINGS = {0.05, -0.2, 0.375} -- range from (+/-)0.05 to (+/-)0.5 diff --git a/frontend/ui/data/koptoptions.lua b/frontend/ui/data/koptoptions.lua index 4aa4efe8d..e52f9af4a 100644 --- a/frontend/ui/data/koptoptions.lua +++ b/frontend/ui/data/koptoptions.lua @@ -277,6 +277,13 @@ local KoptOptions = { return enable_if_equals(configurable, "text_wrap", 1) end, }, + { + name = "inverse_reading_order", + name_text = S.INVERSE_READING_ORDER, + toggle = {S.ON, S.OFF}, + values = {1, 0}, + default_value = DKOPTREADER_CONFIG_INVERSE_READING_ORDER, + }, } }, } diff --git a/frontend/ui/data/strings.lua b/frontend/ui/data/strings.lua index a8232a39b..255f9ff67 100644 --- a/frontend/ui/data/strings.lua +++ b/frontend/ui/data/strings.lua @@ -28,6 +28,7 @@ S.EMBEDDED_STYLE = _("Embedded Style") S.WRITING_DIR = _("Writing Direction") S.PROGRESS_BAR = _("Progress Bar") S.FORCED_OCR = _("Forced OCR") +S.INVERSE_READING_ORDER = _("Inverse Order") S.ON = _("on") S.OFF = _("off") From c161bc2f79a0b181175357cb36bd1cf3b1d4f632 Mon Sep 17 00:00:00 2001 From: chihyang Date: Fri, 10 Jun 2016 20:14:03 +0800 Subject: [PATCH 2/4] Add a new feature 'read from right to left' A new feature 'read from right to left' is added, which is more fit for Traditional Chinese and Japanese books. Once the feature is enabled: 1. The gesture region of TapForward and area will be flipped horizonally; 2. The action for swiping to west and to east will be exchanged. --- frontend/apps/reader/modules/readerpaging.lua | 74 ++++++++++++++++++- frontend/ui/data/koptoptions.lua | 7 -- 2 files changed, 72 insertions(+), 9 deletions(-) diff --git a/frontend/apps/reader/modules/readerpaging.lua b/frontend/apps/reader/modules/readerpaging.lua index 0976e583e..1b14148b9 100644 --- a/frontend/apps/reader/modules/readerpaging.lua +++ b/frontend/apps/reader/modules/readerpaging.lua @@ -19,6 +19,7 @@ local ReaderPaging = InputContainer:new{ show_overlap_enable = nil, overlap = Screen:scaleBySize(DOVERLAPPIXELS), + inverse_reading_order = false, page_flipping_mode = false, bookmark_flipping_mode = false, flip_steps = {0,1,2,5,10,20,50,100} @@ -117,6 +118,7 @@ function ReaderPaging:initGesListener() } }, } + self:updateReadOrder() end function ReaderPaging:onReadSettings(config) @@ -128,6 +130,7 @@ function ReaderPaging:onReadSettings(config) end self.flipping_zoom_mode = config:readSetting("flipping_zoom_mode") or "page" self.flipping_scroll_mode = config:readSetting("flipping_scroll_mode") or false + self.inverse_reading_order = config:readSetting("inverse_reading_order") or false end function ReaderPaging:onSaveSettings() @@ -138,6 +141,7 @@ function ReaderPaging:onSaveSettings() self.ui.doc_settings:saveSetting("show_overlap_enable", self.show_overlap_enable) self.ui.doc_settings:saveSetting("flipping_zoom_mode", self.flipping_zoom_mode) self.ui.doc_settings:saveSetting("flipping_scroll_mode", self.flipping_scroll_mode) + self.ui.doc_settings:saveSetting("inverse_reading_order", self.inverse_reading_order) end function ReaderPaging:getLastProgress() @@ -178,6 +182,14 @@ function ReaderPaging:addToMainMenu(tab_item_table) end, sub_item_table = page_overlap_menu, }) + table.insert(tab_item_table.typeset, { + text = _("Read from right to left"), + checked_func = function() return self.inverse_reading_order end, + callback = function() + self.inverse_reading_order = not self.inverse_reading_order + self:updateReadOrder() + end, + }) end --[[ @@ -320,9 +332,17 @@ function ReaderPaging:onSwipe(arg, ges) elseif self.page_flipping_mode and self.original_page then self:_gotoPage(self.original_page) elseif ges.direction == "west" then - self:onPagingRel(1) + if self.inverse_reading_order then + self:onPagingRel(-1) + else + self:onPagingRel(1) + end elseif ges.direction == "east" then - self:onPagingRel(-1) + if self.inverse_reading_order then + self:onPagingRel(1) + else + self:onPagingRel(-1) + end else -- trigger full refresh UIManager:setDirty(nil, "full") @@ -829,4 +849,54 @@ function ReaderPaging:onGotoPercentage(percentage) return true end +function ReaderPaging:updateReadOrder() + if self.inverse_reading_order then + self.ges_events.TapForward = { + GestureRange:new{ + ges = "tap", + range = Geom:new{ + x = Screen:getWidth()*(1-DTAP_ZONE_FORWARD.x-DTAP_ZONE_FORWARD.w), + y = Screen:getHeight()*DTAP_ZONE_FORWARD.y, + w = Screen:getWidth()*DTAP_ZONE_FORWARD.w, + h = Screen:getHeight()*DTAP_ZONE_FORWARD.h, + }, + } + }, + self.ges_events.TapBackward = { + GestureRange:new{ + ges = "tap", + range = Geom:new{ + x = Screen:getWidth()*(1-DTAP_ZONE_BACKWARD.x-DTAP_ZONE_BACKWARD.w), + y = Screen:getHeight()*DTAP_ZONE_BACKWARD.y, + w = Screen:getWidth()*DTAP_ZONE_BACKWARD.w, + h = Screen:getHeight()*DTAP_ZONE_BACKWARD.h, + }, + } + }, + else + self.ges_events.TapForward = { + GestureRange:new{ + ges = "tap", + range = Geom:new{ + x = Screen:getWidth()*DTAP_ZONE_FORWARD.x, + y = Screen:getHeight()*DTAP_ZONE_FORWARD.y, + w = Screen:getWidth()*DTAP_ZONE_FORWARD.w, + h = Screen:getHeight()*DTAP_ZONE_FORWARD.h, + } + } + } + self.ges_events.TapBackward = { + GestureRange:new{ + ges = "tap", + range = Geom:new{ + x = Screen:getWidth()*DTAP_ZONE_BACKWARD.x, + y = Screen:getHeight()*DTAP_ZONE_BACKWARD.y, + w = Screen:getWidth()*DTAP_ZONE_BACKWARD.w, + h = Screen:getHeight()*DTAP_ZONE_BACKWARD.h, + } + } + } + end +end + return ReaderPaging diff --git a/frontend/ui/data/koptoptions.lua b/frontend/ui/data/koptoptions.lua index e52f9af4a..4aa4efe8d 100644 --- a/frontend/ui/data/koptoptions.lua +++ b/frontend/ui/data/koptoptions.lua @@ -277,13 +277,6 @@ local KoptOptions = { return enable_if_equals(configurable, "text_wrap", 1) end, }, - { - name = "inverse_reading_order", - name_text = S.INVERSE_READING_ORDER, - toggle = {S.ON, S.OFF}, - values = {1, 0}, - default_value = DKOPTREADER_CONFIG_INVERSE_READING_ORDER, - }, } }, } From 8b14209249533be05f5fd7721b5e0e1daa11d2e6 Mon Sep 17 00:00:00 2001 From: chihyang Date: Fri, 10 Jun 2016 20:30:33 +0800 Subject: [PATCH 3/4] Remove unnecessary default configuration. The default configuration item DKOPTREADER_CONFIG_INVERSE_READING_ORDER is removed. --- defaults.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/defaults.lua b/defaults.lua index 49efe6050..865788d5a 100644 --- a/defaults.lua +++ b/defaults.lua @@ -95,7 +95,6 @@ DKOPTREADER_CONFIG_AUTO_STRAIGHTEN = 0 -- range from 0 to 10 DKOPTREADER_CONFIG_JUSTIFICATION = 3 -- -1 = auto, 0 = left, 1 = center, 2 = right, 3 = full DKOPTREADER_CONFIG_MAX_COLUMNS = 2 -- range from 1 to 4 DKOPTREADER_CONFIG_CONTRAST = 1.0 -- range from 0.2 to 2.0 -DKOPTREADER_CONFIG_INVERSE_READING_ORDER = 0 -- 1 = enable, 0 = disable -- word spacing for reflow DKOPTREADER_CONFIG_WORD_SPACINGS = {0.05, -0.2, 0.375} -- range from (+/-)0.05 to (+/-)0.5 From a948ecb19ae973a04d3a0e8e7bf4c8d9acbae62c Mon Sep 17 00:00:00 2001 From: chihyang Date: Fri, 10 Jun 2016 21:17:42 +0800 Subject: [PATCH 4/4] Add 'read from right to left' in readerrolling - Fix problems in readerpaging.lua; - Add the same feature in readerrolling.lua. --- frontend/apps/reader/modules/readerpaging.lua | 9 ++- .../apps/reader/modules/readerrolling.lua | 73 ++++++++++++++++++- 2 files changed, 75 insertions(+), 7 deletions(-) diff --git a/frontend/apps/reader/modules/readerpaging.lua b/frontend/apps/reader/modules/readerpaging.lua index 1b14148b9..73d78d1d9 100644 --- a/frontend/apps/reader/modules/readerpaging.lua +++ b/frontend/apps/reader/modules/readerpaging.lua @@ -131,6 +131,7 @@ function ReaderPaging:onReadSettings(config) self.flipping_zoom_mode = config:readSetting("flipping_zoom_mode") or "page" self.flipping_scroll_mode = config:readSetting("flipping_scroll_mode") or false self.inverse_reading_order = config:readSetting("inverse_reading_order") or false + self:updateReadOrder() end function ReaderPaging:onSaveSettings() @@ -859,9 +860,9 @@ function ReaderPaging:updateReadOrder() y = Screen:getHeight()*DTAP_ZONE_FORWARD.y, w = Screen:getWidth()*DTAP_ZONE_FORWARD.w, h = Screen:getHeight()*DTAP_ZONE_FORWARD.h, - }, + } } - }, + } self.ges_events.TapBackward = { GestureRange:new{ ges = "tap", @@ -870,9 +871,9 @@ function ReaderPaging:updateReadOrder() y = Screen:getHeight()*DTAP_ZONE_BACKWARD.y, w = Screen:getWidth()*DTAP_ZONE_BACKWARD.w, h = Screen:getHeight()*DTAP_ZONE_BACKWARD.h, - }, + } } - }, + } else self.ges_events.TapForward = { GestureRange:new{ diff --git a/frontend/apps/reader/modules/readerrolling.lua b/frontend/apps/reader/modules/readerrolling.lua index 271f1624e..2a814b2bc 100644 --- a/frontend/apps/reader/modules/readerrolling.lua +++ b/frontend/apps/reader/modules/readerrolling.lua @@ -34,6 +34,7 @@ local ReaderRolling = InputContainer:new{ old_doc_height = nil, old_page = nil, current_pos = 0, + inverse_reading_order = false, -- only used for page view mode current_page= nil, doc_height = nil, @@ -97,7 +98,7 @@ function ReaderRolling:init() self.ui.menu:registerToMainMenu(self) end --- This method will be called in onSetDimensions handler +-- This method will be called in onSetDimensions handler function ReaderRolling:initGesListener() self.ges_events = { TapForward = { @@ -166,6 +167,7 @@ function ReaderRolling:initGesListener() } }, } + self:updateReadOrder() end function ReaderRolling:onReadSettings(config) @@ -207,6 +209,8 @@ function ReaderRolling:onReadSettings(config) if self.show_overlap_enable == nil then self.show_overlap_enable = DSHOWOVERLAP end + self.inverse_reading_order = config:readSetting("inverse_reading_order") or false + self:updateReadOrder() end function ReaderRolling:onSaveSettings() @@ -215,6 +219,7 @@ function ReaderRolling:onSaveSettings() self.ui.doc_settings:saveSetting("last_xpointer", self.xpointer) self.ui.doc_settings:saveSetting("percent_finished", self:getLastPercent()) self.ui.doc_settings:saveSetting("show_overlap_enable", self.show_overlap_enable) + self.ui.doc_settings:saveSetting("inverse_reading_order", self.inverse_reading_order) end function ReaderRolling:getLastProgress() @@ -269,10 +274,22 @@ function ReaderRolling:onTapBackward() end function ReaderRolling:onSwipe(arg, ges) - if ges.direction == "west" or ges.direction == "north" then + if ges.direction == "north" then self:onGotoViewRel(1) - elseif ges.direction == "east" or ges.direction == "south" then + elseif ges.direction == "south" then self:onGotoViewRel(-1) + elseif ges.direction == "west" then + if self.inverse_reading_order then + self:onPagingRel(-1) + else + self:onPagingRel(1) + end + elseif ges.direction == "east" then + if self.inverse_reading_order then + self:onPagingRel(1) + else + self:onPagingRel(-1) + end end end @@ -525,4 +542,54 @@ function ReaderRolling:updateBatteryState() end end +function ReaderRolling:updateReadOrder() + if self.inverse_reading_order then + self.ges_events.TapForward = { + GestureRange:new{ + ges = "tap", + range = Geom:new{ + x = Screen:getWidth()*(1-DTAP_ZONE_FORWARD.x-DTAP_ZONE_FORWARD.w), + y = Screen:getHeight()*DTAP_ZONE_FORWARD.y, + w = Screen:getWidth()*DTAP_ZONE_FORWARD.w, + h = Screen:getHeight()*DTAP_ZONE_FORWARD.h, + } + } + } + self.ges_events.TapBackward = { + GestureRange:new{ + ges = "tap", + range = Geom:new{ + x = Screen:getWidth()*(1-DTAP_ZONE_BACKWARD.x-DTAP_ZONE_BACKWARD.w), + y = Screen:getHeight()*DTAP_ZONE_BACKWARD.y, + w = Screen:getWidth()*DTAP_ZONE_BACKWARD.w, + h = Screen:getHeight()*DTAP_ZONE_BACKWARD.h, + } + } + } + else + self.ges_events.TapForward = { + GestureRange:new{ + ges = "tap", + range = Geom:new{ + x = Screen:getWidth()*DTAP_ZONE_FORWARD.x, + y = Screen:getHeight()*DTAP_ZONE_FORWARD.y, + w = Screen:getWidth()*DTAP_ZONE_FORWARD.w, + h = Screen:getHeight()*DTAP_ZONE_FORWARD.h, + } + } + } + self.ges_events.TapBackward = { + GestureRange:new{ + ges = "tap", + range = Geom:new{ + x = Screen:getWidth()*DTAP_ZONE_BACKWARD.x, + y = Screen:getHeight()*DTAP_ZONE_BACKWARD.y, + w = Screen:getWidth()*DTAP_ZONE_BACKWARD.w, + h = Screen:getHeight()*DTAP_ZONE_BACKWARD.h, + } + } + } + end +end + return ReaderRolling