]> git.lyx.org Git - lyx.git/blobdiff - src/rowpainter.C
fix crash when collapsing ert with cursor inside
[lyx.git] / src / rowpainter.C
index 438c5125e8601c22d1646d93b12e5d93fb9db010..68034fe0f35f6ee2d05e7a11e5533007b29b2096 100644 (file)
@@ -115,9 +115,6 @@ private:
        double separator_;
        double hfill_;
        double label_hfill_;
-
-       // Hack to get 1.4cvs working
-       LyXFont font_;
 };
 
 
@@ -125,7 +122,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]),
-         xo_(x), yo_(y), width_(text_.width()), font_(pi.base.font)
+         xo_(x), yo_(y), width_(text_.width())
 {
        RowMetrics m = text_.computeRowMetrics(pit, row_);
        x_ = m.x + xo_;
@@ -145,10 +142,9 @@ RowPainter::RowPainter(PainterInfo & pi,
 /// "temporary"
 LyXFont const RowPainter::getFont(pos_type pos) const
 {
-       LyXFont lf(font_);
-       lf.reduce(LyXFont(LyXFont::ALL_SANE));
-       lf.realize(text_.getFont(par_, pos)); 
-       return lf;
+       LyXFont pf(text_.getFont(par_, pos));
+       text_.applyOuterFont(pf);
+       return pf;
 }
 
 
@@ -473,7 +469,7 @@ void RowPainter::paintFirst()
 
        // start of appendix?
        if (parparams.startOfAppendix())
-               y_top += paintAppendixStart(yo_ + y_top + 2 * defaultRowHeight());
+               y_top += paintAppendixStart(yo_ - row_.ascent() + 2 * defaultRowHeight());
 
        Buffer const & buffer = *bv_.buffer();
 
@@ -505,37 +501,35 @@ void RowPainter::paintFirst()
                      || layout->latextype != LATEX_ENVIRONMENT
                      || is_seq)) {
 
-               LyXFont font = getLabelFont();
-               if (!par_.getLabelstring().empty()) {
+               LyXFont const font = getLabelFont();
+               string const str = par_.getLabelstring();
+               if (!str.empty()) {
                        double x = x_;
-                       string const str = par_.getLabelstring();
 
                        // this is special code for the chapter layout. This is
                        // printed in an extra row and has a pagebreak at
                        // the top.
                        if (layout->counter == "chapter") {
-                               if (buffer.params().secnumdepth >= 0) {
-                                       double spacing_val = 1.0;
-                                       if (!parparams.spacing().isDefault()) {
-                                               spacing_val = parparams.spacing().getValue();
-                                       } else {
-                                               spacing_val = buffer.params().spacing().getValue();
-                                       }
+                               double spacing_val = 1.0;
+                               if (!parparams.spacing().isDefault()) {
+                                       spacing_val = parparams.spacing().getValue();
+                               } 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)
-                                               + int(layout->parsep) * defaultRowHeight();
+                               int const labeladdon = int(font_metrics::maxHeight(font) * layout->spacing.getValue() * spacing_val);
 
-                                       if (is_rtl) {
-                                               x = width_ - leftMargin() -
-                                                       font_metrics::width(str, font);
-                                       }
+                               int const maxdesc = int(font_metrics::maxDescent(font) * layout->spacing.getValue() * spacing_val)
+                                       + int(layout->parsep) * defaultRowHeight();
 
-                                       pain_.text(int(x), yo_ - maxdesc - labeladdon, str, font);
+                               if (is_rtl) {
+                                       x = width_ - leftMargin() -
+                                               font_metrics::width(str, font);
                                }
+
+                               pain_.text(int(x), yo_ - maxdesc - labeladdon, str, font);
                        } else {
                                if (is_rtl) {
                                        x = width_ - leftMargin()