]> git.lyx.org Git - lyx.git/blobdiff - src/TextMetrics.cpp
Revert "Fixup 0cbe0d7a: avoid double redraw when completion is finished"
[lyx.git] / src / TextMetrics.cpp
index f68292aa6423a51ab5b3ec0f10cf2e7dd2218ad1..2dea92bbff3befd3102eb48a02b61572710830c8 100644 (file)
@@ -979,7 +979,7 @@ class flexible_const_iterator {
 public:
 
        //
-       flexible_const_iterator operator++() {
+       flexible_const_iterator operator++() {
                if (pile_.empty())
                        ++cit_;
                else
@@ -1059,7 +1059,7 @@ void cleanupRow(Row & row, bool at_end)
        if (!at_end && !row.flushed())
                row.back().rtrim();
        // boundary exists when there was no space at the end of row
-       row.right_boundary(!at_end && row.back().endpos == row.endpos());
+       row.end_boundary(!at_end && row.back().endpos == row.endpos());
        // make sure that the RTL elements are in reverse ordering
        row.reverseRTL();
 }
@@ -1131,7 +1131,9 @@ RowList TextMetrics::breakParagraph(Row const & bigrow) const
                rb.push_back(elt);
                rb.finalizeLast();
                if (rb.width() > width) {
-                       LATTEST(tail.empty());
+                       // Keep the tail for later; this ought to be rare, but play safe.
+                       if (!tail.empty())
+                               fcit.put(tail);
                        // if the row is too large, try to cut at last separator.
                        tail = rb.shortenIfNeeded(width, next_width);
                }
@@ -1202,7 +1204,10 @@ int TextMetrics::parTopSpacing(pit_type const pit) const
            && prevpar.getLabelWidthString() == par.getLabelWidthString()) {
                layoutasc = layout.itemsep * dh;
        } else if (pit != 0 && layout.topsep > 0)
-               layoutasc = layout.topsep * dh;
+               // combine the separation between different layouts (with same depth)
+               layoutasc = max(0.0,
+                       prevpar.getDepth() != par.getDepth() ? layout.topsep
+                       : layout.topsep - prevpar.layout().bottomsep) * dh;
 
        asc += int(layoutasc * 2 / (2 + pars[pit].getDepth()));
 
@@ -1365,7 +1370,7 @@ pos_type TextMetrics::getPosNearX(Row const & row, int & x,
                              || inset->lyxCode() == SEPARATOR_CODE))
                        pos = row.back().pos;
                else
-                       boundary = row.right_boundary();
+                       boundary = row.end_boundary();
        }
 
        x += xo - offset;