mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 01:59:02 +00:00
Simplify redoParagraph by merging duplicate code
Let breakRow return a boolean indicating whether an additional row is required (after a newline) and use that to replace the code that added an extra row when a paragraph ends with a newline.
This commit is contained in:
parent
78eaf8333b
commit
1751626776
@ -437,6 +437,7 @@ bool TextMetrics::redoParagraph(pit_type const pit)
|
|||||||
par.setBeginOfBody();
|
par.setBeginOfBody();
|
||||||
pos_type first = 0;
|
pos_type first = 0;
|
||||||
size_t row_index = 0;
|
size_t row_index = 0;
|
||||||
|
bool need_new_row = false;
|
||||||
// maximum pixel width of a row
|
// maximum pixel width of a row
|
||||||
do {
|
do {
|
||||||
if (row_index == pm.rows().size())
|
if (row_index == pm.rows().size())
|
||||||
@ -444,7 +445,7 @@ bool TextMetrics::redoParagraph(pit_type const pit)
|
|||||||
Row & row = pm.rows()[row_index];
|
Row & row = pm.rows()[row_index];
|
||||||
row.pit(pit);
|
row.pit(pit);
|
||||||
row.pos(first);
|
row.pos(first);
|
||||||
breakRow(row, right_margin, pit);
|
need_new_row = breakRow(row, right_margin, pit);
|
||||||
setRowHeight(row, pit);
|
setRowHeight(row, pit);
|
||||||
row.setChanged(false);
|
row.setChanged(false);
|
||||||
if (row_index || row.endpos() < par.size()
|
if (row_index || row.endpos() < par.size()
|
||||||
@ -468,26 +469,11 @@ bool TextMetrics::redoParagraph(pit_type const pit)
|
|||||||
|
|
||||||
pm.dim().wid = max(pm.dim().wid, row.width());
|
pm.dim().wid = max(pm.dim().wid, row.width());
|
||||||
pm.dim().des += row.height();
|
pm.dim().des += row.height();
|
||||||
} while (first < par.size());
|
} while (first < par.size() || need_new_row);
|
||||||
|
|
||||||
if (row_index < pm.rows().size())
|
if (row_index < pm.rows().size())
|
||||||
pm.rows().resize(row_index);
|
pm.rows().resize(row_index);
|
||||||
|
|
||||||
// Make sure that if a par ends in newline, there is one more row
|
|
||||||
// under it
|
|
||||||
if (first > 0 && par.isNewline(first - 1)) {
|
|
||||||
if (row_index == pm.rows().size())
|
|
||||||
pm.rows().push_back(Row());
|
|
||||||
Row & row = pm.rows()[row_index];
|
|
||||||
row.pos(first);
|
|
||||||
breakRow(row, right_margin, pit);
|
|
||||||
setRowHeight(row, pit);
|
|
||||||
row.setChanged(false);
|
|
||||||
int const max_row_width = max(dim_.wid, row.width());
|
|
||||||
computeRowMetrics(pit, row, max_row_width);
|
|
||||||
pm.dim().des += row.height();
|
|
||||||
}
|
|
||||||
|
|
||||||
pm.dim().asc += pm.rows()[0].ascent();
|
pm.dim().asc += pm.rows()[0].ascent();
|
||||||
pm.dim().des -= pm.rows()[0].ascent();
|
pm.dim().des -= pm.rows()[0].ascent();
|
||||||
|
|
||||||
@ -786,7 +772,7 @@ private:
|
|||||||
* very sensitive to small changes :) Note that part of the
|
* very sensitive to small changes :) Note that part of the
|
||||||
* intelligence is also in Row::shortenIfNeeded.
|
* intelligence is also in Row::shortenIfNeeded.
|
||||||
*/
|
*/
|
||||||
void TextMetrics::breakRow(Row & row, int const right_margin, pit_type const pit) const
|
bool TextMetrics::breakRow(Row & row, int const right_margin, pit_type const pit) const
|
||||||
{
|
{
|
||||||
Paragraph const & par = text_->getPar(pit);
|
Paragraph const & par = text_->getPar(pit);
|
||||||
pos_type const end = par.size();
|
pos_type const end = par.size();
|
||||||
@ -806,7 +792,10 @@ void TextMetrics::breakRow(Row & row, int const right_margin, pit_type const pit
|
|||||||
// the width available for the row.
|
// the width available for the row.
|
||||||
int const width = max_width_ - row.right_margin;
|
int const width = max_width_ - row.right_margin;
|
||||||
|
|
||||||
ParagraphList const & pars = text_->paragraphs();
|
if (pos >= end || row.width() > width) {
|
||||||
|
row.endpos(end);
|
||||||
|
return need_new_row;
|
||||||
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
//FIXME: As long as leftMargin() is not correctly implemented for
|
//FIXME: As long as leftMargin() is not correctly implemented for
|
||||||
@ -900,6 +889,7 @@ void TextMetrics::breakRow(Row & row, int const right_margin, pit_type const pit
|
|||||||
row.endpos(i);
|
row.endpos(i);
|
||||||
|
|
||||||
// End of paragraph marker
|
// End of paragraph marker
|
||||||
|
ParagraphList const & pars = text_->paragraphs();
|
||||||
if (lyxrc.paragraph_markers && !need_new_row
|
if (lyxrc.paragraph_markers && !need_new_row
|
||||||
&& i == end && size_type(pit + 1) < pars.size()) {
|
&& i == end && size_type(pit + 1) < pars.size()) {
|
||||||
// add a virtual element for the end-of-paragraph
|
// add a virtual element for the end-of-paragraph
|
||||||
@ -921,6 +911,8 @@ void TextMetrics::breakRow(Row & row, int const right_margin, pit_type const pit
|
|||||||
// make sure that the RTL elements are in reverse ordering
|
// make sure that the RTL elements are in reverse ordering
|
||||||
row.reverseRTL(is_rtl);
|
row.reverseRTL(is_rtl);
|
||||||
//LYXERR0("breakrow: row is " << row);
|
//LYXERR0("breakrow: row is " << row);
|
||||||
|
|
||||||
|
return need_new_row;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -131,7 +131,8 @@ private:
|
|||||||
|
|
||||||
/// sets row.end to the pos value *after* which a row should break.
|
/// sets row.end to the pos value *after* which a row should break.
|
||||||
/// for example, the pos after which isNewLine(pos) == true
|
/// for example, the pos after which isNewLine(pos) == true
|
||||||
void breakRow(Row & row, int right_margin, pit_type const pit) const;
|
/// \return true when another row is required (after a newline)
|
||||||
|
bool breakRow(Row & row, int right_margin, pit_type const pit) const;
|
||||||
|
|
||||||
// Expand the alignment of row \param row in paragraph \param par
|
// Expand the alignment of row \param row in paragraph \param par
|
||||||
LyXAlignment getAlign(Paragraph const & par, Row const & row) const;
|
LyXAlignment getAlign(Paragraph const & par, Row const & row) const;
|
||||||
|
Loading…
Reference in New Issue
Block a user