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
This commit is contained in:
Abdelrazak Younes 2011-10-30 09:16:30 +00:00
parent a32c12834b
commit 47b28d4511
2 changed files with 108 additions and 87 deletions

View File

@ -547,15 +547,13 @@ int RowPainter::paintAppendixStart(int y)
void RowPainter::paintFirst() void RowPainter::paintFirst()
{ {
ParagraphParameters const & pparams = par_.params(); BufferParams const & bparams = pi_.base.bv->buffer().params();
Buffer const & buffer = pi_.base.bv->buffer();
BufferParams const & bparams = buffer.params();
Layout const & layout = par_.layout(); Layout const & layout = par_.layout();
int y_top = 0; int y_top = 0;
// start of appendix? // start of appendix?
if (pparams.startOfAppendix()) if (par_.params().startOfAppendix())
y_top += paintAppendixStart(yo_ - row_.ascent() + 2 * defaultRowHeight()); y_top += paintAppendixStart(yo_ - row_.ascent() + 2 * defaultRowHeight());
if (bparams.paragraph_separation == BufferParams::ParagraphSkipSeparation 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_); bool const is_seq = text_.isFirstInSequence(pit_);
//lyxerr << "paintFirst: " << par_.id() << " is_seq: " << is_seq << endl; //lyxerr << "paintFirst: " << par_.id() << " is_seq: " << is_seq << endl;
// should we print a label?
if (layout.labeltype >= LABEL_STATIC if (layout.labeltype >= LABEL_STATIC
&& (layout.labeltype != LABEL_STATIC && (layout.labeltype != LABEL_STATIC
|| layout.latextype != LATEX_ENVIRONMENT || layout.latextype != LATEX_ENVIRONMENT
|| is_seq)) { || is_seq)) {
paintLabel();
FontInfo const font = labelFont(); } else if (is_seq
FontMetrics const & fm = theFontMetrics(font); && (layout.labeltype == LABEL_TOP_ENVIRONMENT
|| layout.labeltype == LABEL_BIBLIO
docstring const str = par_.labelString(); || layout.labeltype == LABEL_CENTERED_TOP_ENVIRONMENT)) {
if (!str.empty()) { // the labels at the top of an environment.
double x = x_; // More or less for bibliography
paintTopLevelLabel();
// 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);
}
}
// 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);
}
} }
} }
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();
}
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 /** Check if the current paragraph is the last paragraph in a
proof environment */ proof environment */
static int getEndLabel(pit_type p, Text const & text) static int getEndLabel(pit_type p, Text const & text)

View File

@ -75,6 +75,12 @@ private:
/// return the label font for this row /// return the label font for this row
FontInfo labelFont() const; FontInfo labelFont() const;
///
void paintLabel();
///
void paintTopLevelLabel();
/// contains painting related information. /// contains painting related information.
PainterInfo & pi_; PainterInfo & pi_;