diff --git a/src/data/symbol_font.cpp b/src/data/symbol_font.cpp index cfc4c8a5..924e08d9 100644 --- a/src/data/symbol_font.cpp +++ b/src/data/symbol_font.cpp @@ -297,7 +297,10 @@ void SymbolFont::getCharInfo(RotatedDC& dc, Context& ctx, double font_size, cons FOR_EACH_CONST(sym, text) { size_t count = sym.text.size(); RealSize size = dc.trInvS(symbolSize(ctx, dc.trS(font_size), sym)); - out.insert(out.end(), count, RealSize(size.width / count, size.height)); // divide into count parts + size.width /= count; // divide into count parts + for (size_t i = 0 ; i < count ; ++i) { + out.push_back(CharInfo(size, i == count - 1 ? BREAK_MAYBE : BREAK_NO)); + } } } diff --git a/src/gui/print_window.cpp b/src/gui/print_window.cpp index e32e74c1..dd26c6b0 100644 --- a/src/gui/print_window.cpp +++ b/src/gui/print_window.cpp @@ -120,7 +120,7 @@ class CardsPrintout : wxPrintout { PageLayout layout; /// Draw a card, that is card_nr on this page, find the postion by asking the layout - void drawCard(DC& dc, const CardP& card, UInt card_nr); + void drawCard(DC& dc, const CardP& card, size_t card_nr); /// Draw a card at the specified coordinates void drawCard(DC& dc, const CardP& card, double x, double y, int rotation = 0); }; diff --git a/src/render/text/element.hpp b/src/render/text/element.hpp index 6377928b..b20953f1 100644 --- a/src/render/text/element.hpp +++ b/src/render/text/element.hpp @@ -31,7 +31,8 @@ enum DrawWhat /// Information on a linebreak enum LineBreak -{ BREAK_NO // no line break +{ BREAK_NO // no line break ever +, BREAK_MAYBE // break here when in "direction:vertical" mode , BREAK_SOFT // optional line break (' ') , BREAK_HARD // always a line break ('\n') , BREAK_LINE // line break with a separator line () @@ -42,7 +43,7 @@ struct CharInfo { RealSize size; LineBreak break_after; - inline CharInfo(RealSize size, LineBreak break_after = BREAK_NO) : size(size), break_after(break_after) {} + inline CharInfo(RealSize size, LineBreak break_after) : size(size), break_after(break_after) {} }; /// A section of text that can be rendered using a TextViewer diff --git a/src/render/text/font.cpp b/src/render/text/font.cpp index 34603cd7..c5272a5a 100644 --- a/src/render/text/font.cpp +++ b/src/render/text/font.cpp @@ -38,7 +38,7 @@ void FontTextElement::getCharInfo(RotatedDC& dc, double scale, vector& RealSize s = dc.GetTextExtent(content.substr(start - this->start, i - start + 1)); out.push_back(CharInfo(RealSize(s.width - prev_width, s.height), c == _('\n') ? break_style : - c == _(' ') ? BREAK_SOFT : BREAK_NO + c == _(' ') ? BREAK_SOFT : BREAK_MAYBE )); prev_width = s.width; } diff --git a/src/render/text/viewer.cpp b/src/render/text/viewer.cpp index 88adb5c0..02e585f4 100644 --- a/src/render/text/viewer.cpp +++ b/src/render/text/viewer.cpp @@ -410,6 +410,11 @@ bool TextViewer::prepareLinesScale(RotatedDC& dc, const vector& chars, } else if (c.break_after == BREAK_SOFT && style.field().multi_line) { // Soft break == end of word accept_word = true; + } else if (c.break_after == BREAK_MAYBE && style.direction == TOP_TO_BOTTOM) { + break_now = true; + accept_word = true; + hide_breaker = false; + line_height_multiplier = style.line_height_soft; } // Add size of the character word_size = add_horizontal(word_size, c.size);