]> git.lyx.org Git - lyx.git/blobdiff - src/rowpainter.cpp
Update bindfiles to latest fileformat
[lyx.git] / src / rowpainter.cpp
index a9f8352df0fe2ad96cfdeb19cf120a94b0b5ae3e..cfa7f516d4c462e4eb1b47f29ac201ad0dc5a9b5 100644 (file)
@@ -54,6 +54,7 @@ namespace lyx {
 using frontend::Painter;
 using frontend::FontMetrics;
 
+
 RowPainter::RowPainter(PainterInfo & pi,
        Text const & text, pit_type pit, Row const & row, Bidi & bidi, int x, int y)
        : pi_(pi), text_(text),
@@ -90,8 +91,8 @@ RowPainter::RowPainter(PainterInfo & pi,
        //lyxerr << "RowPainter: x: " << x_ << " xo: " << xo_ << " yo: " << yo_ << endl;
        //row_.dump();
 
-       LASSERT(pit >= 0, /**/);
-       LASSERT(pit < int(text.paragraphs().size()), /**/);
+       LBUFERR(pit >= 0);
+       LBUFERR(pit < int(text.paragraphs().size()));
 }
 
 
@@ -237,6 +238,8 @@ void RowPainter::paintChars(pos_type & vpos, FontInfo const & font,
        str.reserve(100);
        str.push_back(prev_char);
 
+       // FIXME: Why only round brackets and why the difference to
+       // Hebrew? See also Paragraph::getUChar
        if (arabic) {
                char_type c = str[0];
                if (c == '(')
@@ -326,6 +329,8 @@ void RowPainter::paintChars(pos_type & vpos, FontInfo const & font,
                        break;
                */
 
+               // FIXME: Why only round brackets and why the difference to
+               // Hebrew? See also Paragraph::getUChar
                if (arabic) {
                        if (c == '(')
                                c = ')';
@@ -360,6 +365,14 @@ void RowPainter::paintChars(pos_type & vpos, FontInfo const & font,
 }
 
 
+void RowPainter::paintSeparator(double orig_x, double width,
+       FontInfo const & font)
+{
+       pi_.pain.textDecoration(font, int(orig_x), yo_, int(width));
+       x_ += width;
+}
+
+
 void RowPainter::paintForeignMark(double orig_x, Language const * lang,
                int desc)
 {
@@ -573,20 +586,14 @@ void RowPainter::paintFirst()
                }
        }
 
-       bool const is_seq = text_.isFirstInSequence(pit_);
+       bool const is_first =
+               text_.isFirstInSequence(pit_) || !layout.isParagraphGroup();
        //lyxerr << "paintFirst: " << par_.id() << " is_seq: " << is_seq << endl;
 
-       if (layout.labeltype >= LABEL_STATIC
-               && (layout.labeltype != LABEL_STATIC
-                       || layout.latextype != LATEX_ENVIRONMENT
-                       || is_seq)) {
+       if (layout.labelIsInline()
+                       && (layout.labeltype != LABEL_STATIC || is_first)) {
                paintLabel();
-       } else if (is_seq
-               && (layout.labeltype == LABEL_TOP_ENVIRONMENT
-                       || layout.labeltype == LABEL_BIBLIO
-                       || layout.labeltype == LABEL_CENTERED_TOP_ENVIRONMENT)) {
-               // the labels at the top of an environment.
-               // More or less for bibliography
+       } else if (is_first && layout.labelIsAbove()) {
                paintTopLevelLabel();
        }
 }
@@ -598,48 +605,21 @@ void RowPainter::paintLabel()
        if (str.empty())
                return;
 
-       BufferParams const & bparams = pi_.base.bv->buffer().params();
        bool const is_rtl = text_.isRTL(par_);
        Layout const & layout = par_.layout();
-       ParagraphParameters const & pparams = par_.params();
        FontInfo const font = labelFont();
        FontMetrics const & fm = theFontMetrics(font);
-
        double x = x_;
 
-       // 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") {
-               double spacing_val = 1.0;
-               if (!pparams.spacing().isDefault()) {
-                       spacing_val = pparams.spacing().getValue();
-               } else {
-                       spacing_val = bparams.spacing().getValue();
-               }
-
-               int const labeladdon = int(fm.maxHeight() * layout.spacing.getValue() * spacing_val);
-
-               int const maxdesc = int(fm.maxDescent() * layout.spacing.getValue() * spacing_val)
-                       + int(layout.parsep) * defaultRowHeight();
-
-               if (is_rtl) {
-                       x = width_ - leftMargin() -
-                               fm.width(str);
-               }
-
-               pi_.pain.text(int(x), yo_ - maxdesc - labeladdon, str, font);
+       if (is_rtl) {
+               x = width_ - leftMargin()
+                       + fm.width(layout.labelsep);
        } else {
-               if (is_rtl) {
-                       x = width_ - leftMargin()
-                               + fm.width(layout.labelsep);
-               } else {
-                       x = x_ - fm.width(layout.labelsep)
-                               - fm.width(str);
-               }
-
-               pi_.pain.text(int(x), yo_, str, font);
+               x = x_ - fm.width(layout.labelsep)
+                       - fm.width(str);
        }
+
+       pi_.pain.text(int(x), yo_, str, font);
 }
 
 
@@ -670,7 +650,7 @@ void RowPainter::paintTopLevelLabel()
                + (layout.labelbottomsep * defaultRowHeight()));
 
        double x = x_;
-       if (layout.labeltype == LABEL_CENTERED_TOP_ENVIRONMENT) {
+       if (layout.labeltype == LABEL_CENTERED) {
                if (is_rtl)
                        x = leftMargin();
                x += (width_ - text_metrics_.rightMargin(pm_) - leftMargin()) / 2;
@@ -681,6 +661,7 @@ void RowPainter::paintTopLevelLabel()
        pi_.pain.text(int(x), yo_ - maxdesc - labeladdon, str, font);
 }
 
+
 /** Check if the current paragraph is the last paragraph in a
     proof environment */
 static int getEndLabel(pit_type p, Text const & text)
@@ -937,9 +918,10 @@ void RowPainter::paintText()
                if (par_.isSeparator(pos)) {
                        Font const orig_font = text_metrics_.displayFont(pit_, pos);
                        double const orig_x = x_;
-                       x_ += width_pos;
+                       double separator_width = width_pos;
                        if (pos >= body_pos)
-                               x_ += row_.separator;
+                               separator_width += row_.separator;
+                       paintSeparator(orig_x, separator_width, orig_font.fontInfo());
                        paintForeignMark(orig_x, orig_font.language());
                        ++vpos;
 
@@ -1098,13 +1080,13 @@ void RowPainter::paintInlineCompletion(Font const & font)
                swap(c1, c2);
        }
 
-       if (s1.size() > 0) {
+       if (!s1.empty()) {
                f.setColor(c1);
                pi_.pain.text(int(x_), yo_, s1, f);
                x_ += theFontMetrics(font).width(s1);
        }
 
-       if (s2.size() > 0) {
+       if (!s2.empty()) {
                f.setColor(c2);
                pi_.pain.text(int(x_), yo_, s2, f);
                x_ += theFontMetrics(font).width(s2);