From: Abdelrazak Younes Date: Sun, 30 Oct 2011 09:16:30 +0000 (+0000) Subject: Code cleanup: split out RowPainter::paintFirst() in three and de-indent. X-Git-Tag: 2.1.0beta1~2429 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=47b28d4511d2c6ca9d8e248b332827221ea4131f;p=features.git Code cleanup: split out RowPainter::paintFirst() in three and de-indent. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@40087 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/rowpainter.cpp b/src/rowpainter.cpp index bcbf6da6fb..c5cc772fe8 100644 --- a/src/rowpainter.cpp +++ b/src/rowpainter.cpp @@ -547,15 +547,13 @@ int RowPainter::paintAppendixStart(int y) void RowPainter::paintFirst() { - ParagraphParameters const & pparams = par_.params(); - Buffer const & buffer = pi_.base.bv->buffer(); - BufferParams const & bparams = buffer.params(); + BufferParams const & bparams = pi_.base.bv->buffer().params(); Layout const & layout = par_.layout(); int y_top = 0; // start of appendix? - if (pparams.startOfAppendix()) + if (par_.params().startOfAppendix()) y_top += paintAppendixStart(yo_ - row_.ascent() + 2 * defaultRowHeight()); if (bparams.paragraph_separation == BufferParams::ParagraphSkipSeparation @@ -573,97 +571,114 @@ void RowPainter::paintFirst() } } - bool const is_rtl = text_.isRTL(par_); bool const is_seq = text_.isFirstInSequence(pit_); //lyxerr << "paintFirst: " << par_.id() << " is_seq: " << is_seq << endl; - // should we print a label? if (layout.labeltype >= LABEL_STATIC - && (layout.labeltype != LABEL_STATIC - || layout.latextype != LATEX_ENVIRONMENT - || is_seq)) { + && (layout.labeltype != LABEL_STATIC + || layout.latextype != LATEX_ENVIRONMENT + || is_seq)) { + 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 + paintTopLevelLabel(); + } +} - FontInfo const font = labelFont(); - FontMetrics const & fm = theFontMetrics(font); - docstring const str = par_.labelString(); - if (!str.empty()) { - 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); - } 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); - } +void RowPainter::paintLabel() +{ + docstring const str = par_.labelString(); + 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(); } - // the labels at the top of an environment. - // More or less for bibliography - } else if (is_seq && - (layout.labeltype == LABEL_TOP_ENVIRONMENT || - layout.labeltype == LABEL_BIBLIO || - layout.labeltype == LABEL_CENTERED_TOP_ENVIRONMENT)) { - FontInfo const font = labelFont(); - docstring const str = par_.labelString(); - if (!str.empty()) { - double spacing_val = 1.0; - if (!pparams.spacing().isDefault()) - spacing_val = pparams.spacing().getValue(); - else - spacing_val = bparams.spacing().getValue(); - - FontMetrics const & fm = theFontMetrics(font); - - int const labeladdon = int(fm.maxHeight() - * layout.spacing.getValue() * spacing_val); - - int maxdesc = - int(fm.maxDescent() * layout.spacing.getValue() * spacing_val - + (layout.labelbottomsep * defaultRowHeight())); - - double x = x_; - if (layout.labeltype == LABEL_CENTERED_TOP_ENVIRONMENT) { - if (is_rtl) - x = leftMargin(); - x += (width_ - text_metrics_.rightMargin(pm_) - leftMargin()) / 2; - x -= fm.width(str) / 2; - } else if (is_rtl) { - x = width_ - leftMargin() - fm.width(str); - } - pi_.pain.text(int(x), yo_ - maxdesc - labeladdon, str, font); + 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); + } 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); } } +void RowPainter::paintTopLevelLabel() +{ + BufferParams const & bparams = pi_.base.bv->buffer().params(); + bool const is_rtl = text_.isRTL(par_); + ParagraphParameters const & pparams = par_.params(); + Layout const & layout = par_.layout(); + FontInfo const font = labelFont(); + docstring const str = par_.labelString(); + if (str.empty()) + return; + + double spacing_val = 1.0; + if (!pparams.spacing().isDefault()) + spacing_val = pparams.spacing().getValue(); + else + spacing_val = bparams.spacing().getValue(); + + FontMetrics const & fm = theFontMetrics(font); + + int const labeladdon = int(fm.maxHeight() + * layout.spacing.getValue() * spacing_val); + + int maxdesc = + int(fm.maxDescent() * layout.spacing.getValue() * spacing_val + + (layout.labelbottomsep * defaultRowHeight())); + + double x = x_; + if (layout.labeltype == LABEL_CENTERED_TOP_ENVIRONMENT) { + if (is_rtl) + x = leftMargin(); + x += (width_ - text_metrics_.rightMargin(pm_) - leftMargin()) / 2; + x -= fm.width(str) / 2; + } else if (is_rtl) { + x = width_ - leftMargin() - fm.width(str); + } + 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) diff --git a/src/rowpainter.h b/src/rowpainter.h index 6408fdc73f..7a43ef774f 100644 --- a/src/rowpainter.h +++ b/src/rowpainter.h @@ -75,6 +75,12 @@ private: /// return the label font for this row FontInfo labelFont() const; + /// + void paintLabel(); + /// + void paintTopLevelLabel(); + + /// contains painting related information. PainterInfo & pi_;