Fixup 294e4884: center correctly Abstract label when paragraph is empty

When a paragraph is empty, it was not possible to query what the left
margin would be for an hypothetical second row.

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.
This commit is contained in:
Jean-Marc Lasgouttes 2021-01-05 14:53:15 +01:00
parent b8188e54dd
commit 824d1c993a
3 changed files with 12 additions and 7 deletions

View File

@ -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

View File

@ -1598,7 +1598,8 @@ void TextMetrics::deleteLineForward(Cursor & cur)
int TextMetrics::leftMargin(pit_type pit) const
{
return leftMargin(pit, text_->paragraphs()[pit].size());
// the + 1 is useful when the paragraph is empty
return leftMargin(pit, text_->paragraphs()[pit].size() + 1);
}
@ -1610,7 +1611,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 leftMargin(pit_type).
Buffer const & buffer = bv_->buffer();
//lyxerr << "TextMetrics::leftMargin: pit: " << pit << " pos: " << pos << endl;
DocumentClass const & tclass = buffer.params().documentClass();
@ -1764,8 +1768,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

View File

@ -123,12 +123,14 @@ public:
int height() const { return dim_.height(); }
/**
* Returns the left beginning of the text.
* Returns the left beginning of a row starting at \c pos.
* This information cannot be taken from the layout object, because
* in LaTeX the beginning of the text fits in some cases
* (for example sections) exactly the label-width.
*/
int leftMargin(pit_type pit, pos_type pos) const;
/// Return the left beginning of a row which is not the first one.
/// This is the left margin when there is no indentation.
int leftMargin(pit_type pit) const;
///