diff --git a/frontend/apps/reader/modules/readerfont.lua b/frontend/apps/reader/modules/readerfont.lua index 64f41db24..3b4b64a3f 100644 --- a/frontend/apps/reader/modules/readerfont.lua +++ b/frontend/apps/reader/modules/readerfont.lua @@ -150,6 +150,10 @@ function ReaderFont:onReadSettings(config) or G_reader_settings:readSetting("copt_font_hinting") or 2 -- default in cre.cpp self.ui.document:setFontHinting(self.font_hinting) + self.space_condensing = config:readSetting("space_condensing") + or G_reader_settings:readSetting("copt_space_condensing") or 75 + self.ui.document:setSpaceCondensing(self.space_condensing) + self.line_space_percent = config:readSetting("line_space_percent") or G_reader_settings:readSetting("copt_line_spacing") or DCREREADER_CONFIG_LINE_SPACE_PERCENT_MEDIUM @@ -250,6 +254,13 @@ function ReaderFont:onSetFontHinting(mode) return true end +function ReaderFont:onSetSpaceCondensing(space) + self.space_condensing = space + self.ui.document:setSpaceCondensing(space) + self.ui:handleEvent(Event:new("UpdatePos")) + return true +end + function ReaderFont:onSetFontGamma(gamma) self.gamma_index = gamma self.ui.document:setGammaIndex(self.gamma_index) @@ -268,6 +279,7 @@ function ReaderFont:onSaveSettings() self.ui.doc_settings:saveSetting("font_size", self.font_size) self.ui.doc_settings:saveSetting("font_embolden", self.font_embolden) self.ui.doc_settings:saveSetting("font_hinting", self.font_hinting) + self.ui.doc_settings:saveSetting("space_condensing", self.space_condensing) self.ui.doc_settings:saveSetting("line_space_percent", self.line_space_percent) self.ui.doc_settings:saveSetting("gamma_index", self.gamma_index) end diff --git a/frontend/document/credocument.lua b/frontend/document/credocument.lua index 0f520a007..b58544ce1 100644 --- a/frontend/document/credocument.lua +++ b/frontend/document/credocument.lua @@ -132,13 +132,6 @@ function CreDocument:init() G_reader_settings:readSetting("cre_header_status_font_size")) end - -- min space condensing percent (how much we can decrease a space width to - -- make text fit on a line) default is 50% - if G_reader_settings:readSetting("cre_min_space_condensing_percent") then - self._document:setIntProperty("crengine.style.space.condensing.percent", - G_reader_settings:readSetting("cre_min_space_condensing_percent")) - end - -- set fallback font face self._document:setStringProperty("crengine.font.fallback.face", G_reader_settings:readSetting("fallback_font") or self.fallback_font) @@ -527,6 +520,13 @@ function CreDocument:setFontHinting(mode) self._document:setIntProperty("font.hinting.mode", mode) end +-- min space condensing percent (how much we can decrease a space width to +-- make text fit on a line) 25...100% +function CreDocument:setSpaceCondensing(value) + logger.dbg("CreDocument: set space condensing", value) + self._document:setIntProperty("crengine.style.space.condensing.percent", value) +end + function CreDocument:setStyleSheet(new_css_file, appended_css_content ) logger.dbg("CreDocument: set style sheet:", new_css_file and new_css_file or "no file", diff --git a/frontend/ui/data/creoptions.lua b/frontend/ui/data/creoptions.lua index eda07a99c..b0d04360f 100644 --- a/frontend/ui/data/creoptions.lua +++ b/frontend/ui/data/creoptions.lua @@ -155,6 +155,19 @@ local CreOptions = { args = {0, 1, 2}, event = "SetFontHinting", name_text_hold_callback = optionsutil.showValues, + }, + { + name = "space_condensing", + name_text = S.WORD_GAP, + toggle = {S.SMALL, S.MEDIUM, S.LARGE}, + values = {50, 75, 100}, + default_value = 75, + args = {50, 75, 100}, + event = "SetSpaceCondensing", + name_text_hold_callback = optionsutil.showValues, + -- used by showValues + name_text_suffix = "%", + name_text_true_values = true, } } }, diff --git a/frontend/ui/widget/toggleswitch.lua b/frontend/ui/widget/toggleswitch.lua index a479bd723..44de6ea98 100644 --- a/frontend/ui/widget/toggleswitch.lua +++ b/frontend/ui/widget/toggleswitch.lua @@ -47,12 +47,13 @@ function ToggleSwitch:init() -- Item count per row self.n_pos = math.ceil(#self.toggle / self.row_count) self.position = nil + local border_size = Size.border.thin self.toggle_frame = FrameContainer:new{ background = Blitbuffer.COLOR_WHITE, color = Blitbuffer.COLOR_GREY, radius = Size.radius.window, - bordersize = Size.border.thin, + bordersize = border_size, padding = Size.padding.small, dim = not self.enabled, } @@ -63,7 +64,7 @@ function ToggleSwitch:init() end local center_dimen = Geom:new{ - w = self.width / self.n_pos, + w = (self.width - border_size*(2*self.n_pos-2)) / self.n_pos, h = self.height / self.row_count, } local button_width = math.floor(self.width / self.n_pos) @@ -88,7 +89,7 @@ function ToggleSwitch:init() color = Blitbuffer.COLOR_GREY, margin = 0, radius = Size.radius.window, - bordersize = Size.border.thin, + bordersize = border_size, padding = 0, content, } diff --git a/spec/unit/readerfooter_spec.lua b/spec/unit/readerfooter_spec.lua index 394f543aa..b46819323 100644 --- a/spec/unit/readerfooter_spec.lua +++ b/spec/unit/readerfooter_spec.lua @@ -146,7 +146,7 @@ describe("Readerfooter module", function() local timeinfo = footer.textGeneratorMap.time() local page_count = readerui.document:getPageCount() -- stats has not been initialized here, so we get na TB and TC - assert.are.same('1 / '..page_count..' | '..timeinfo..' | => 0 | B:0% | R:1% | TB: na | TC: na', + assert.are.same('1 / '..page_count..' | '..timeinfo..' | => 0 | B:0% | R:0% | TB: na | TC: na', footer.footer_text.text) end) @@ -295,8 +295,8 @@ describe("Readerfooter module", function() assert.are.same(365, footer.text_width) footer:onPageUpdate(100) - assert.are.same(183, footer.progress_bar.width) - assert.are.same(397, footer.text_width) + assert.are.same(191, footer.progress_bar.width) + assert.are.same(389, footer.text_width) end) it("should support chapter markers", function() @@ -545,7 +545,7 @@ describe("Readerfooter module", function() assert.is.same(0, footer.text_width) tapFooterMenu(fake_menu, "Progress percentage") - assert.are.same('R:1%', footer.footer_text.text) + assert.are.same('R:0%', footer.footer_text.text) assert.is.same(false, footer.has_no_mode) assert.is.same(footer.footer_text:getSize().w + footer.text_left_margin, footer.text_width) diff --git a/spec/unit/readerlink_spec.lua b/spec/unit/readerlink_spec.lua index 75767f410..4aaa3efdb 100644 --- a/spec/unit/readerlink_spec.lua +++ b/spec/unit/readerlink_spec.lua @@ -17,8 +17,8 @@ describe("ReaderLink module", function() document = DocumentRegistry:openDocument(sample_epub), } readerui.rolling:onGotoPage(4) - readerui.link:onTap(nil, {pos = {x = 336, y = 668}}) - assert.is.same(36, readerui.rolling.current_page) + readerui.link:onTap(nil, {pos = {x = 306, y = 710}}) + assert.is.same(37, readerui.rolling.current_page) end) it("should jump to links in pdf page mode", function() @@ -54,8 +54,8 @@ describe("ReaderLink module", function() document = DocumentRegistry:openDocument(sample_epub), } readerui.rolling:onGotoPage(4) - readerui.link:onTap(nil, {pos = {x = 336, y = 668}}) - assert.is.same(36, readerui.rolling.current_page) + readerui.link:onTap(nil, {pos = {x = 306, y = 710}}) + assert.is.same(37, readerui.rolling.current_page) readerui.link:onGoBackLink() assert.is.same(4, readerui.rolling.current_page) end) diff --git a/spec/unit/readertoc_spec.lua b/spec/unit/readertoc_spec.lua index 6af8775bd..97a63f22c 100644 --- a/spec/unit/readertoc_spec.lua +++ b/spec/unit/readertoc_spec.lua @@ -68,7 +68,7 @@ describe("Readertoc module", function() end) it("should get page left of chapter", function() assert.truthy(toc:getChapterPagesLeft(10, 0) > 10) - assert.truthy(toc:getChapterPagesLeft(100, 0) > 10) + assert.truthy(toc:getChapterPagesLeft(101, 0) > 10) assert.are.same(nil, toc:getChapterPagesLeft(200, 0)) end) it("should get page done of chapter", function()