]> git.lyx.org Git - lyx.git/blobdiff - src/rowpainter.C
layout file converter for layout files in old format
[lyx.git] / src / rowpainter.C
index 6f285643abc76de6e201877c98481072309cc37d..d06e7e29395903c268c301b134a0eee304389789 100644 (file)
@@ -101,6 +101,9 @@ private:
        pit_type const pit_;
        Paragraph const & par_;
 
+       /// is row erased? (change tracking)
+       bool erased_;
+
        // Looks ugly - is
        double const xo_;
        int const yo_;    // current baseline
@@ -116,6 +119,7 @@ RowPainter::RowPainter(PainterInfo & pi,
        LyXText const & text, pit_type pit, Row const & row, int x, int y)
        : bv_(*pi.base.bv), pain_(pi.pain), text_(text), pars_(text.paragraphs()),
          row_(row), pit_(pit), par_(text.paragraphs()[pit]),
+         erased_(pi.erased_),
          xo_(x), yo_(y), width_(text_.width())
 {
        RowMetrics m = text_.computeRowMetrics(pit, row_);
@@ -152,6 +156,7 @@ void RowPainter::paintInset(pos_type const pos, LyXFont const & font)
        PainterInfo pi(const_cast<BufferView *>(&bv_), pain_);
        pi.base.font = font;
        pi.ltr_pos = (text_.bidi.level(pos) % 2 == 0);
+       pi.erased_ = erased_ || isDeletedText(par_, pos);
        theCoords.insets().add(inset, int(x_), yo_);
        inset->drawSelection(pi, int(x_), yo_);
        inset->draw(pi, int(x_), yo_);
@@ -299,9 +304,7 @@ void RowPainter::paintFromPos(pos_type & vpos)
 
        double const orig_x = x_;
 
-       char const c = par_.getChar(pos);
-
-       if (c == Paragraph::META_INSET) {
+       if (par_.isInset(pos)) {
                paintInset(pos, orig_font);
                ++vpos;
                paintForeignMark(orig_x, orig_font);
@@ -309,6 +312,7 @@ void RowPainter::paintFromPos(pos_type & vpos)
        }
 
        // usual characters, no insets
+       char const c = par_.getChar(pos);
 
        // special case languages
        std::string const & lang = orig_font.language()->lang();
@@ -485,9 +489,7 @@ void RowPainter::paintFirst()
                                } else {
                                        spacing_val = buffer.params().spacing().getValue();
                                }
-#ifdef WITH_WARNINGS
-#warning Look is this correct?
-#endif
+
                                int const labeladdon = int(font_metrics::maxHeight(font) * layout->spacing.getValue() * spacing_val);
 
                                int const maxdesc = int(font_metrics::maxDescent(font) * layout->spacing.getValue() * spacing_val)
@@ -527,6 +529,8 @@ void RowPainter::paintFirst()
                        else
                                spacing_val = buffer.params().spacing().getValue();
 
+                       int const labeladdon = int(font_metrics::maxHeight(font) * layout->spacing.getValue() * spacing_val);
+
                        int maxdesc =
                                int(font_metrics::maxDescent(font) * layout->spacing.getValue() * spacing_val
                                + (layout->labelbottomsep * defaultRowHeight()));
@@ -540,7 +544,7 @@ void RowPainter::paintFirst()
                                x = width_ - leftMargin() -
                                        font_metrics::width(str, font);
                        }
-                       pain_.text(int(x), yo_ - maxdesc, str, font);
+                       pain_.text(int(x), yo_ - maxdesc - labeladdon, str, font);
                }
        }
 }
@@ -623,7 +627,7 @@ void RowPainter::paintText()
                }
 
                const int width_pos =
-                       text_.singleWidth(par_, vpos, par_.getChar(vpos), font);
+                       text_.singleWidth(par_, pos, par_.getChar(pos), font);
 
                if (x_ + width_pos < 0) {
                        x_ += width_pos;
@@ -765,30 +769,30 @@ void paintText(BufferView const & bv, ViewMetricsInfo const & vi)
                yy += text->getPar(pit).descent();
        }
 
-
-       // paint one paragraph above and one below
+       // 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(vi.p1 - 1);
-               paintPar(pi, *bv.text(), vi.p1 - 1, 0,
-                        vi.y1 -  text->getPar(vi.p1 - 1).descent());
+               theCoords.parPos()[bv.text()][vi.p1 - 1] = 
+                       Point(0, vi.y1 - text->getPar(vi.p1 - 1).descent());
        }
 
        if (vi.p2 < lyx::pit_type(text->paragraphs().size()) - 1) {
                text->redoParagraph(vi.p2 + 1);
-               paintPar(pi, *bv.text(), vi.p2 + 1, 0,
-                        vi.y2 + text->getPar(vi.p2 + 1).ascent());
+               theCoords.parPos()[bv.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)
+       if (vi.y1 > 0 && !vi.singlepar)
                pain.fillRectangle(0, 0, bv.workWidth(), vi.y1, LColor::bottomarea);
 
        // and possibly grey out below
 //     lyxerr << "par descent: " << text->getPar(vi.p1).ascent() << endl;
-       if (vi.y2 < bv.workHeight())
+       if (vi.y2 < bv.workHeight() && !vi.singlepar)
                pain.fillRectangle(0, vi.y2, bv.workWidth(), bv.workHeight() - vi.y2, LColor::bottomarea);
 }