commit 6c1855313cef2fac19022ddc4c8eccaee66088e6
Author: Jean-Marc Lasgouttes <[email protected]>
Date:   Tue Jan 5 14:53:15 2021 +0100

    Center correctly centered top labels (e.g. abstract)
    
    Since the first row may be indented, it is necessary to find out what
    the left margin would be on the next row (even if this next row does
    not exst.
    
    To this end, modify TextMetrics::leftMargin so that it does not test
    whether position is after the last position of the paragraph.
    
    Cosmetics: set the size of label to "small" for Abstract layout in
    standard classes and reduce the spacing between label and text.
    
    Fixes remainder of #11939.
---
 lib/layouts/stdstruct.inc |    3 +--
 src/RowPainter.cpp        |    4 ++--
 src/TextMetrics.cpp       |    9 ++++++---
 3 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/lib/layouts/stdstruct.inc b/lib/layouts/stdstruct.inc
index b611b53..a0a9750 100644
--- a/lib/layouts/stdstruct.inc
+++ b/lib/layouts/stdstruct.inc
@@ -27,13 +27,12 @@ Style Abstract
        Align                 Block
        LabelType             Centered
        LabelString           "Abstract"
-       LabelBottomSep        0.5
+       LabelBottomSep        0.2
        Font
          Size                Small
        EndFont
        LabelFont
          Series              Bold
-         Size                Large
        EndFont
        HTMLLabelFirst        1
        HTMLForceCSS          1
diff --git a/src/RowPainter.cpp b/src/RowPainter.cpp
index e378f43..9f9f51e 100644
--- a/src/RowPainter.cpp
+++ b/src/RowPainter.cpp
@@ -462,8 +462,8 @@ void RowPainter::paintTopLevelLabel() const
                 * respect to the left and right margins.
                 */
                int const leftm = row_.isRTL() ? tm_.rightMargin(row_.pit())
-                                              : tm_.leftMargin(row_.pit());
-               int const rightm = row_.isRTL() ? tm_.leftMargin(row_.pit())
+                                              : tm_.leftMargin(row_.pit(), 1);
+               int const rightm = row_.isRTL() ? tm_.leftMargin(row_.pit(), 1)
                                                    : 
tm_.rightMargin(row_.pit());
                x += leftm - row_.left_margin + (tm_.width() - leftm -rightm) / 
2
                        - fm.width(str) / 2;
diff --git a/src/TextMetrics.cpp b/src/TextMetrics.cpp
index 214fe89..56d312f 100644
--- a/src/TextMetrics.cpp
+++ b/src/TextMetrics.cpp
@@ -1610,7 +1610,10 @@ int TextMetrics::leftMargin(pit_type const pit, pos_type 
const pos) const
        LASSERT(pit < int(pars.size()), return 0);
        Paragraph const & par = pars[pit];
        LASSERT(pos >= 0, return 0);
-       LASSERT(pos <= par.size(), return 0);
+       // We do not really care whether pos > par.size(), since we do not
+       // access the data. It can be actially useful, when querying the
+       // margin without indentation (see RowPainter::paintTopLevelLabel).
+
        Buffer const & buffer = bv_->buffer();
        //lyxerr << "TextMetrics::leftMargin: pit: " << pit << " pos: " << pos 
<< endl;
        DocumentClass const & tclass = buffer.params().documentClass();
@@ -1764,8 +1767,8 @@ int TextMetrics::leftMargin(pit_type const pit, pos_type 
const pos) const
            && !text_->inset().neverIndent()
            // display style insets do not need indentation
            && !(!par.empty()
-                && par.isInset(pos)
-                && par.getInset(pos)->rowFlags() & Inset::Display)
+                && par.isInset(0)
+                && par.getInset(0)->rowFlags() & Inset::Display)
            && (!(tclass.isDefaultLayout(par.layout())
                || tclass.isPlainLayout(par.layout()))
                || buffer.params().paragraph_separation
-- 
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to