mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-12 22:14:35 +00:00
Put end label on own row after display inset
This corresponds to what is done on display. The same should be done for start label too (e.g. beginning of a proof), but this requires more work. This required to move the static function getEndLabel to Text. Fixes bug #11536.
This commit is contained in:
parent
caf9db6936
commit
283ac91aa7
@ -472,41 +472,9 @@ void RowPainter::paintTopLevelLabel() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** Check if the current paragraph is the last paragraph in a
|
|
||||||
proof environment */
|
|
||||||
static int getEndLabel(pit_type p, Text const & text)
|
|
||||||
{
|
|
||||||
ParagraphList const & pars = text.paragraphs();
|
|
||||||
pit_type pit = p;
|
|
||||||
depth_type par_depth = pars[p].getDepth();
|
|
||||||
while (pit != pit_type(pars.size())) {
|
|
||||||
Layout const & layout = pars[pit].layout();
|
|
||||||
int const endlabeltype = layout.endlabeltype;
|
|
||||||
|
|
||||||
if (endlabeltype != END_LABEL_NO_LABEL) {
|
|
||||||
if (p + 1 == pit_type(pars.size()))
|
|
||||||
return endlabeltype;
|
|
||||||
|
|
||||||
depth_type const next_depth =
|
|
||||||
pars[p + 1].getDepth();
|
|
||||||
if (par_depth > next_depth ||
|
|
||||||
(par_depth == next_depth && layout != pars[p + 1].layout()))
|
|
||||||
return endlabeltype;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (par_depth == 0)
|
|
||||||
break;
|
|
||||||
pit = text.outerHook(pit);
|
|
||||||
if (pit != pit_type(pars.size()))
|
|
||||||
par_depth = pars[pit].getDepth();
|
|
||||||
}
|
|
||||||
return END_LABEL_NO_LABEL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void RowPainter::paintLast() const
|
void RowPainter::paintLast() const
|
||||||
{
|
{
|
||||||
int const endlabel = getEndLabel(row_.pit(), text_);
|
int const endlabel = text_.getEndLabel(row_.pit());
|
||||||
switch (endlabel) {
|
switch (endlabel) {
|
||||||
case END_LABEL_BOX:
|
case END_LABEL_BOX:
|
||||||
case END_LABEL_FILLED_BOX: {
|
case END_LABEL_FILLED_BOX: {
|
||||||
|
29
src/Text.cpp
29
src/Text.cpp
@ -288,6 +288,35 @@ Font const Text::outerFont(pit_type par_offset) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int Text::getEndLabel(pit_type p) const
|
||||||
|
{
|
||||||
|
pit_type pit = p;
|
||||||
|
depth_type par_depth = pars_[p].getDepth();
|
||||||
|
while (pit != pit_type(pars_.size())) {
|
||||||
|
Layout const & layout = pars_[pit].layout();
|
||||||
|
int const endlabeltype = layout.endlabeltype;
|
||||||
|
|
||||||
|
if (endlabeltype != END_LABEL_NO_LABEL) {
|
||||||
|
if (p + 1 == pit_type(pars_.size()))
|
||||||
|
return endlabeltype;
|
||||||
|
|
||||||
|
depth_type const next_depth =
|
||||||
|
pars_[p + 1].getDepth();
|
||||||
|
if (par_depth > next_depth ||
|
||||||
|
(par_depth == next_depth && layout != pars_[p + 1].layout()))
|
||||||
|
return endlabeltype;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (par_depth == 0)
|
||||||
|
break;
|
||||||
|
pit = outerHook(pit);
|
||||||
|
if (pit != pit_type(pars_.size()))
|
||||||
|
par_depth = pars_[pit].getDepth();
|
||||||
|
}
|
||||||
|
return END_LABEL_NO_LABEL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void acceptOrRejectChanges(ParagraphList & pars,
|
static void acceptOrRejectChanges(ParagraphList & pars,
|
||||||
BufferParams const & bparams, Text::ChangeOp op)
|
BufferParams const & bparams, Text::ChangeOp op)
|
||||||
{
|
{
|
||||||
|
@ -345,6 +345,8 @@ public:
|
|||||||
/// Get the font of the "environment" of paragraph \p par_offset in \p pars.
|
/// Get the font of the "environment" of paragraph \p par_offset in \p pars.
|
||||||
/// All font changes of the paragraph are relative to this font.
|
/// All font changes of the paragraph are relative to this font.
|
||||||
Font const outerFont(pit_type pit_offset) const;
|
Font const outerFont(pit_type pit_offset) const;
|
||||||
|
/// Return the label type at the end of paragraph \c pit.
|
||||||
|
int getEndLabel(pit_type pit) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// The InsetText owner shall have access to everything.
|
/// The InsetText owner shall have access to everything.
|
||||||
|
@ -983,11 +983,17 @@ bool TextMetrics::breakRow(Row & row, int const right_margin) const
|
|||||||
Inset const * inset = 0;
|
Inset const * inset = 0;
|
||||||
if (par.isNewline(i) || par.isEnvSeparator(i)
|
if (par.isNewline(i) || par.isEnvSeparator(i)
|
||||||
|| (i + 1 < end && (inset = par.getInset(i + 1))
|
|| (i + 1 < end && (inset = par.getInset(i + 1))
|
||||||
&& inset->display())
|
&& inset->display())
|
||||||
|| (!row.empty() && row.back().inset
|
|| (!row.empty() && row.back().inset
|
||||||
&& row.back().inset->display())) {
|
&& row.back().inset->display())) {
|
||||||
row.flushed(true);
|
row.flushed(true);
|
||||||
need_new_row = par.isNewline(i);
|
// We will force a row creation after either
|
||||||
|
// - a newline;
|
||||||
|
// - a display inset followed by a end label.
|
||||||
|
need_new_row =
|
||||||
|
par.isNewline(i)
|
||||||
|
|| (inset->display() && i + 1 == end
|
||||||
|
&& text_->getEndLabel(row.pit()) != END_LABEL_NO_LABEL);
|
||||||
++i;
|
++i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user