X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Frowpainter.cpp;h=cfa7f516d4c462e4eb1b47f29ac201ad0dc5a9b5;hb=d4ac337f0bd89c279b2133e2475a662a3ada641b;hp=a9f8352df0fe2ad96cfdeb19cf120a94b0b5ae3e;hpb=af4e31ec28c71815ca07bebd6e5c3893535f4bf8;p=lyx.git diff --git a/src/rowpainter.cpp b/src/rowpainter.cpp index a9f8352df0..cfa7f516d4 100644 --- a/src/rowpainter.cpp +++ b/src/rowpainter.cpp @@ -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);