commit 91f3b21e42c7b3b2028ec8f66460440e9ddadcbf
Author: Jean-Marc Lasgouttes <[email protected]>
Date:   Wed May 24 14:05:06 2017 +0200

    Take in account end of paragraph marker for inset width
    
    When an inset wants to use the whole available width, it is necessary
    to take into account that some of this width may already be taken by
    the end-of-paragraph (pilcrow) marker.
    
    Fixes bug #10537.
---
 src/TextMetrics.cpp |   16 ++++++++++++++--
 1 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/TextMetrics.cpp b/src/TextMetrics.cpp
index 52cbcef..1f0c62b 100644
--- a/src/TextMetrics.cpp
+++ b/src/TextMetrics.cpp
@@ -420,10 +420,21 @@ bool TextMetrics::redoParagraph(pit_type const pit)
                                parPos.pos()++;
                }
 
+               // If there is an end of paragraph marker, its size should be
+               // substracted to the available width. The logic here is
+               // almost the same as in breakRow, remember keep them in sync.
+               int eop = 0;
+               if (lyxrc.paragraph_markers && ii->pos + 1 == par.size()
+                   && size_type(pit + 1) < text_->paragraphs().size()) {
+                       Font f(text_->layoutFont(pit));
+                       // ΒΆ U+00B6 PILCROW SIGN
+                       eop = theFontMetrics(f).width(char_type(0x00B6));
+               }
+
                // do the metric calculation
                Dimension dim;
                int const w = max_width_ - leftMargin(max_width_, pit, ii->pos)
-                       - right_margin;
+                       - right_margin - eop;
                Font const & font = ii->inset->inheritFont() ?
                        displayFont(pit, ii->pos) : bufferfont;
                MacroContext mc(&buffer, parPos);
@@ -933,7 +944,8 @@ bool TextMetrics::breakRow(Row & row, int const 
right_margin) const
        row.finalizeLast();
        row.endpos(i);
 
-       // End of paragraph marker
+       // End of paragraph marker. The logic here is almost the
+       // same as in redoParagraph, remember keep them in sync.
        ParagraphList const & pars = text_->paragraphs();
        if (lyxrc.paragraph_markers && !need_new_row
            && i == end && size_type(row.pit() + 1) < pars.size()) {

Reply via email to