]> git.lyx.org Git - lyx.git/blobdiff - src/rowpainter.C
Fix dEPM crash:
[lyx.git] / src / rowpainter.C
index e35755041168e3a2cb2ed2dc950dc516e121e427..5b83338af96882b38422430198f471fa20605688 100644 (file)
@@ -48,7 +48,6 @@ using frontend::FontMetrics;
 
 using std::endl;
 using std::max;
-using std::min;
 using std::string;
 
 
@@ -182,7 +181,9 @@ void RowPainter::paintInset(pos_type const pos, LyXFont const & font)
        bool tmp = refreshInside;
        if (!in || !in->wide()) {
                refreshInside = true;
-               lyxerr[Debug::PAINTING] << endl << "Paint inset fully" << endl;
+               if (lyxerr.debugging(Debug::PAINTING)) { 
+                       lyxerr << endl << "Paint inset fully" << endl;
+               }
        }
        if (refreshInside)
                inset->drawSelection(pi, int(x_), yo_);
@@ -635,7 +636,21 @@ void RowPainter::paintLast()
        bool const is_rtl = text_.isRTL(*bv_.buffer(), par_);
        int const endlabel = getEndLabel(pit_, text_.paragraphs());
 
+       // paint imaginary end-of-paragraph character
+
+       if (par_.isInserted(par_.size()) || par_.isDeleted(par_.size())) {
+               FontMetrics const & fm = theFontMetrics(bv_.buffer()->params().getFont());
+               int const length = fm.maxAscent() / 2;
+               LColor::color col = par_.isInserted(par_.size()) ? LColor::newtext : LColor::strikeout;
+               
+               pain_.line(int(x_) + 1, yo_ + 2, int(x_) + 1, yo_ + 2 - length, col,
+                          Painter::line_solid, Painter::line_thick);
+               pain_.line(int(x_) + 1 - length, yo_ + 2, int(x_) + 1, yo_ + 2, col,
+                          Painter::line_solid, Painter::line_thick);
+       }
+
        // draw an endlabel
+
        switch (endlabel) {
        case END_LABEL_BOX:
        case END_LABEL_FILLED_BOX: {
@@ -921,20 +936,22 @@ void paintPar
 
                        // Instrumentation for testing row cache (see also
                        // 12 lines lower):
-                       if (text.isMainText(*pi.base.bv->buffer()))
-                               lyxerr[Debug::PAINTING] << "#";
-                       else
-                               lyxerr[Debug::PAINTING] << "[" <<
-                                   repaintAll << row_has_changed <<
-                                   cursor_on_row << "]";
+                       if (lyxerr.debugging(Debug::PAINTING)) {
+                               if (text.isMainText(*pi.base.bv->buffer()))
+                                       lyxerr[Debug::PAINTING] << "#";
+                               else
+                                       lyxerr[Debug::PAINTING] << "[" <<
+                                               repaintAll << row_has_changed <<
+                                               cursor_on_row << "]";
+                       }
                        rp.paintAppendix();
                        rp.paintDepthBar();
                        rp.paintChangeBar();
                        if (rit == rb)
                                rp.paintFirst();
+                       rp.paintText();
                        if (rit + 1 == re)
                                rp.paintLast();
-                       rp.paintText();
                }
                y += rit->descent();
                // Restore, see above
@@ -943,7 +960,9 @@ void paintPar
        // Re-enable screen drawing for future use of the painter.
        pi.pain.setDrawingEnabled(true);
 
-       lyxerr[Debug::PAINTING] << "." << endl;
+       if (lyxerr.debugging(Debug::PAINTING)) {
+               lyxerr[Debug::PAINTING] << "." << endl;
+       }
 }
 
 } // namespace anon
@@ -981,22 +1000,6 @@ void paintText(BufferView & bv,
                yy += par.descent();
        }
 
-       // Cache one paragraph above and one below
-       // Note MV: this cannot be suppressed even for singlepar.
-       // Try viewing the User Guide Mobius figure
-
-       if (vi.p1 > 0) {
-               text.redoParagraph(bv, vi.p1 - 1);
-               bv.coordCache().parPos()[&text][vi.p1 - 1] =
-                       Point(0, vi.y1 - text.getPar(vi.p1 - 1).descent());
-       }
-
-       if (vi.p2 < pit_type(text.paragraphs().size()) - 1) {
-               text.redoParagraph(bv, vi.p2 + 1);
-               bv.coordCache().parPos()[&text][vi.p2 + 1] =
-                       Point(0, vi.y2 + text.getPar(vi.p2 + 1).ascent());
-       }
-
        // and grey out above (should not happen later)
 //     lyxerr << "par ascent: " << text.getPar(vi.p1).ascent() << endl;
        if (vi.y1 > 0 && !vi.singlepar)
@@ -1014,7 +1017,7 @@ void paintTextInset(LyXText const & text, PainterInfo & pi, int x, int y)
 //     lyxerr << "  paintTextInset: y: " << y << endl;
 
        y -= text.getPar(0).ascent();
-       // This flag can not be set from within same inset:
+       // This flag cannot be set from within same inset:
        bool repaintAll = refreshInside;
        for (int pit = 0; pit < int(text.paragraphs().size()); ++pit) {
                y += text.getPar(pit).ascent();