]> git.lyx.org Git - lyx.git/blobdiff - src/TextMetrics.cpp
MathML: more consistency between DocBook and XHTML.
[lyx.git] / src / TextMetrics.cpp
index 57956bd335cf98512705137bf6036b78379cfb49..0b3bfc1d16a79ce057eb979d2231dda30cfd9974 100644 (file)
@@ -913,14 +913,15 @@ bool TextMetrics::breakRow(Row & row, int const right_margin) const
        // 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.
@@ -1621,8 +1622,9 @@ void TextMetrics::deleteLineForward(Cursor & cur)
 
 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());
 }
 
 
@@ -1635,7 +1637,7 @@ int TextMetrics::leftMargin(pit_type const pit, pos_type const pos) const
        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();
@@ -1875,6 +1877,9 @@ void TextMetrics::drawParagraph(PainterInfo & pi, pit_type const pit, int const
        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];
@@ -1919,6 +1924,9 @@ void TextMetrics::drawParagraph(PainterInfo & pi, pit_type const pit, int const
                        // 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;
@@ -1961,8 +1969,15 @@ void TextMetrics::drawParagraph(PainterInfo & pi, pit_type const pit, int const
                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