}
}
+ // The space above and below the paragraph.
+ int top = parTopSpacing(pit);
+ int bottom = parBottomSpacing(pit);
+
+ // Top and bottom margin of the document (only at top-level)
// FIXME: It might be better to move this in another method
// specially tailored for the main text.
- // Top and bottom margin of the document (only at top-level)
if (text_->isMainText()) {
- // original value was 20px, which is 0.2in at 100dpi
- int const margin = bv_->zoomedPixels(20);
- if (pit == 0) {
- pm.rows().front().dim().asc += margin;
- /* coverity thinks that we should update pm.dim().asc
- * below, but all the rows heights are actually counted as
- * part of the paragraph metric descent see loop above).
- */
- // coverity[copy_paste_error]
- pm.dim().des += margin;
- }
- ParagraphList const & pars = text_->paragraphs();
- if (pit + 1 == pit_type(pars.size())) {
- pm.rows().back().dim().des += margin;
- pm.dim().des += margin;
+ if (pit == 0)
+ top += bv_->topMargin();
+ if (pit + 1 == pit_type(text_->paragraphs().size())) {
+ bottom += bv_->bottomMargin();
}
}
- // The space above and below the paragraph.
- int const top = parTopSpacing(pit);
+ // Add the top/bottom space to rows and paragraph metrics
pm.rows().front().dim().asc += top;
- int const bottom = parBottomSpacing(pit);
pm.rows().back().dim().des += bottom;
pm.dim().des += top + bottom;
- pm.dim().asc += pm.rows()[0].ascent();
- pm.dim().des -= pm.rows()[0].ascent();
+ // Move the pm ascent to be the same as the first row ascent
+ pm.dim().asc += pm.rows().front().ascent();
+ pm.dim().des -= pm.rows().front().ascent();
changed |= old_dim.height() != pm.dim().height();
// The real stopping condition is a few lines below.
while (true) {
// Firstly, check whether there is a bookmark here.
- for (auto const & bp_p : bpl)
- if (bp_p.second == i) {
- Font f = *fi;
- f.fontInfo().setColor(Color_bookmark);
- // ❶ U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE
- char_type const ch = 0x2775 + bp_p.first;
- row.addVirtual(i, docstring(1, ch), f, Change());
- }
+ if (lyxrc.bookmarks_visibility == LyXRC::BMK_INLINE)
+ for (auto const & bp_p : bpl)
+ if (bp_p.second == i) {
+ Font f = *fi;
+ f.fontInfo().setColor(Color_bookmark);
+ // ❶ U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE
+ char_type const ch = 0x2775 + bp_p.first;
+ row.addVirtual(i, docstring(1, ch), f, Change());
+ }
// The stopping condition is here so that the display of a
// bookmark can take place at paragraph start too.
row.dim().asc = maxasc;
row.dim().des = maxdes;
+
+ // This is useful for selections
+ row.contents_dim() = row.dim();
}
int TextMetrics::leftMargin(pit_type pit) const
{
- // the + 1 is useful when the paragraph is empty
- return leftMargin(pit, text_->paragraphs()[pit].size() + 1);
+ // FIXME: what is the semantics? It depends on whether the
+ // paragraph is empty!
+ return leftMargin(pit, text_->paragraphs()[pit].size());
}
Paragraph const & par = pars[pit];
LASSERT(pos >= 0, 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
+ // access the data. It can be actually useful, when querying the
// margin without indentation (see leftMargin(pit_type).
Buffer const & buffer = bv_->buffer();
if (text_->isRTL(pit))
swap(pi.leftx, pi.rightx);
+ BookmarksSection::BookmarkPosList bpl =
+ theSession().bookmarks().bookmarksInPar(bv_->buffer().fileName(), pm.par().id());
+
for (size_t i = 0; i != nrows; ++i) {
Row const & row = pm.rows()[i];
// Paint only the insets if the text itself is
// unchanged.
rp.paintOnlyInsets();
+ rp.paintTooLargeMarks(
+ row_x + row.left_x() < bv_->leftMargin(),
+ row_x + row.right_x() > bv_->workWidth() - bv_->rightMargin());
row.changed(false);
y += row.descent();
continue;
if (i == nrows - 1)
rp.paintLast();
rp.paintText();
- rp.paintTooLargeMarks(row_x + row.left_x() < 0,
- row_x + row.right_x() > bv_->workWidth());
+ rp.paintTooLargeMarks(
+ row_x + row.left_x() < bv_->leftMargin(),
+ row_x + row.right_x() > bv_->workWidth() - bv_->rightMargin());
+ // indicate bookmarks presence in margin
+ if (lyxrc.bookmarks_visibility == LyXRC::BMK_MARGIN)
+ for (auto const & bp_p : bpl)
+ if (bp_p.second >= row.pos() && bp_p.second < row.endpos())
+ rp.paintBookmark(bp_p.first);
+
y += row.descent();
#if 0