]> git.lyx.org Git - features.git/commitdiff
Take in account end of paragraph marker for inset width
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Wed, 24 May 2017 12:05:06 +0000 (14:05 +0200)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Tue, 30 May 2017 09:59:35 +0000 (11:59 +0200)
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.

(cherry picked from commit 91f3b21e42c7b3b2028ec8f66460440e9ddadcbf)

src/TextMetrics.cpp
status.22x

index 68fcb3c13df079ccbc5857700ed061b7c8155793..4f3e24d960e908955705878fe169f4df84d79405 100644 (file)
@@ -421,10 +421,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);
@@ -807,8 +818,6 @@ void TextMetrics::breakRow(Row & row, int const right_margin, pit_type const pit
        // the width available for the row.
        int const width = max_width_ - row.right_margin;
 
-       ParagraphList const & pars = text_->paragraphs();
-
 #if 0
        //FIXME: As long as leftMargin() is not correctly implemented for
        // MARGIN_RIGHT_ADDRESS_BOX, we should also not do this here.
@@ -916,7 +925,9 @@ void TextMetrics::breakRow(Row & row, int const right_margin, pit_type const pit
        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(pit + 1) < pars.size()) {
                // add a virtual element for the end-of-paragraph
index 186a18898af82662a838b9c7f422f945123d919a..97fbaa48962f449a9bcd430391390cd14724fe54 100644 (file)
@@ -48,13 +48,15 @@ What's new
 
 - Remove duplicate entries from the Symbols dialog (bug 10644).
 
-- Always shows the float type in the float inset label (bug 10618).
+- Always show the float type in the float inset label (bug 10618).
 
 - Show correct color name for green in the status bar (bug 10656).
 
 - fixes to cursor positionning on mouse click for right-to-left text
   (bug 10569).
 
+- Fix metricsof full-width insets when paragraph endings are shown (bug #10537).
+
 
 * INTERNALS