}
-FontInfo const RowPainter::getLabelFont() const
+FontInfo RowPainter::labelFont() const
{
- return text_.getLabelFont(pi_.base.bv->buffer(), par_);
+ return text_.labelFont(pi_.base.bv->buffer(), par_);
}
void RowPainter::paintInset(Inset const * inset, pos_type const pos)
{
- Font const font = text_metrics_.getDisplayFont(pit_, pos);
+ Font const font = text_metrics_.displayFont(pit_, pos);
BOOST_ASSERT(inset);
// Backup full_repaint status because some insets (InsetTabular)
if (!Encodings::isComposeChar_hebrew(c)) {
if (isPrintableNonspace(c)) {
int const width2 = pm_.singleWidth(i,
- text_metrics_.getDisplayFont(pit_, i));
+ text_metrics_.displayFont(pit_, i));
dx = (c == 0x05e8 || // resh
c == 0x05d3) // dalet
? width2 - width
if (!Encodings::isComposeChar_arabic(c)) {
if (isPrintableNonspace(c)) {
int const width2 = pm_.singleWidth(i,
- text_metrics_.getDisplayFont(pit_, i));
+ text_metrics_.displayFont(pit_, i));
dx = (width2 - width) / 2;
}
break;
void RowPainter::paintFromPos(pos_type & vpos)
{
pos_type const pos = bidi_.vis2log(vpos);
- Font const orig_font = text_metrics_.getDisplayFont(pit_, pos);
+ Font const orig_font = text_metrics_.displayFont(pit_, pos);
double const orig_x = x_;
// usual characters, no insets
Buffer const & buffer = pi_.base.bv->buffer();
- LayoutPtr const & layout = par_.layout();
+ Layout const & layout = par_.layout();
if (buffer.params().paragraph_separation == BufferParams::PARSEP_SKIP) {
if (pit_ != 0) {
- if (layout->latextype == LATEX_PARAGRAPH
+ if (layout.latextype == LATEX_PARAGRAPH
&& !par_.getDepth()) {
y_top += buffer.params().getDefSkip().inPixels(*pi_.base.bv);
} else {
- LayoutPtr const & playout = pars_[pit_ - 1].layout();
- if (playout->latextype == LATEX_PARAGRAPH
+ Layout const & playout = pars_[pit_ - 1].layout();
+ if (playout.latextype == LATEX_PARAGRAPH
&& !pars_[pit_ - 1].getDepth()) {
// is it right to use defskip here, too? (AS)
y_top += buffer.params().getDefSkip().inPixels(*pi_.base.bv);
//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
+ if (layout.labeltype >= LABEL_STATIC
+ && (layout.labeltype != LABEL_STATIC
+ || layout.latextype != LATEX_ENVIRONMENT
|| is_seq)) {
- FontInfo const font = getLabelFont();
+ FontInfo const font = labelFont();
FontMetrics const & fm = theFontMetrics(font);
- docstring const str = par_.getLabelstring();
+ 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") {
+ if (layout.counter == "chapter") {
double spacing_val = 1.0;
if (!parparams.spacing().isDefault()) {
spacing_val = parparams.spacing().getValue();
spacing_val = buffer.params().spacing().getValue();
}
- int const labeladdon = int(fm.maxHeight() * layout->spacing.getValue() * spacing_val);
+ 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();
+ int const maxdesc = int(fm.maxDescent() * layout.spacing.getValue() * spacing_val)
+ + int(layout.parsep) * defaultRowHeight();
if (is_rtl) {
x = width_ - leftMargin() -
} else {
if (is_rtl) {
x = width_ - leftMargin()
- + fm.width(layout->labelsep);
+ + fm.width(layout.labelsep);
} else {
- x = x_ - fm.width(layout->labelsep)
+ x = x_ - fm.width(layout.labelsep)
- fm.width(str);
}
// 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 = getLabelFont();
- if (!par_.getLabelstring().empty()) {
- docstring const str = par_.getLabelstring();
+ (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 (!parparams.spacing().isDefault())
spacing_val = parparams.spacing().getValue();
FontMetrics const & fm = theFontMetrics(font);
int const labeladdon = int(fm.maxHeight()
- * layout->spacing.getValue() * spacing_val);
+ * layout.spacing.getValue() * spacing_val);
int maxdesc =
- int(fm.maxDescent() * layout->spacing.getValue() * spacing_val
- + (layout->labelbottomsep * defaultRowHeight()));
+ int(fm.maxDescent() * layout.spacing.getValue() * spacing_val
+ + (layout.labelbottomsep * defaultRowHeight()));
double x = x_;
- if (layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT) {
+ if (layout.labeltype == LABEL_CENTERED_TOP_ENVIRONMENT) {
if (is_rtl)
x = leftMargin();
x += (width_ - text_metrics_.rightMargin(pm_) - leftMargin()) / 2;
switch (endlabel) {
case END_LABEL_BOX:
case END_LABEL_FILLED_BOX: {
- FontInfo const font = getLabelFont();
+ FontInfo const font = labelFont();
FontMetrics const & fm = theFontMetrics(font);
int const size = int(0.75 * fm.maxAscent());
int const y = yo_ - size;
}
case END_LABEL_STATIC: {
- FontInfo const font = getLabelFont();
+ FontInfo const font = labelFont();
FontMetrics const & fm = theFontMetrics(font);
- docstring const & str = par_.layout()->endlabelstring();
+ docstring const & str = par_.layout().endlabelstring();
double const x = is_rtl ?
x_ - fm.width(str)
: - text_metrics_.rightMargin(pm_) - row_.width();
body_pos = 0;
}
- LayoutPtr const & layout = par_.layout();
+ Layout const & layout = par_.layout();
bool running_strikeout = false;
bool is_struckout = false;
if (inlineCompletionPos.inTexted()
&& inlineCompletionPos.text() == &text_
&& inlineCompletionPos.pit() == pit_
- && inlineCompletionPos.pos() >= row_.pos()
- && inlineCompletionPos.pos() < row_.endpos()) {
- // draw visually behind the previous character
+ && inlineCompletionPos.pos() - 1 >= row_.pos()
+ && inlineCompletionPos.pos() - 1 < row_.endpos()) {
+ // draw logically behind the previous character
inlineCompletionVPos = bidi_.log2vis(inlineCompletionPos.pos() - 1);
}
// Use font span to speed things up, see above
if (vpos < font_span.first || vpos > font_span.last) {
font_span = par_.fontSpan(vpos);
- font = text_metrics_.getDisplayFont(pit_, vpos);
+ font = text_metrics_.displayFont(pit_, vpos);
// split font span if inline completion is inside
if (font_span.first <= inlineCompletionVPos
}
if (body_pos > 0 && pos == body_pos - 1) {
- int const lwidth = theFontMetrics(getLabelFont())
- .width(layout->labelsep);
+ int const lwidth = theFontMetrics(labelFont())
+ .width(layout.labelsep);
x_ += row_.label_hfill + lwidth - width_pos;
}
// Is the inline completion in front of character?
if (font.isRightToLeft() && vpos == inlineCompletionVPos)
- paintInlineCompletion(font);
+ paintInlineCompletion(font);
if (par_.isSeparator(pos)) {
- Font const orig_font = text_metrics_.getDisplayFont(pit_, pos);
+ Font const orig_font = text_metrics_.displayFont(pit_, pos);
double const orig_x = x_;
x_ += width_pos;
if (pos >= body_pos)
{
docstring completion = pi_.base.bv->inlineCompletion();
FontInfo f = font.fontInfo();
-
- // right to left?
- if (font.isRightToLeft())
- reverse(completion.begin(), completion.end());
+ bool rtl = font.isRightToLeft();
// draw the unique and the non-unique completion part
// Note: this is not time-critical as it is
size_t uniqueTo = pi_.base.bv->inlineCompletionUniqueChars();
docstring s1 = completion.substr(0, uniqueTo);
docstring s2 = completion.substr(uniqueTo);
+ ColorCode c1 = Color_inlinecompletion;
+ ColorCode c2 = Color_nonunique_inlinecompletion;
+ // right to left?
+ if (rtl) {
+ swap(s1, s2);
+ reverse(s1.begin(), s1.end());
+ reverse(s2.begin(), s2.end());
+ swap(c1, c2);
+ }
+
if (s1.size() > 0) {
- f.setColor(Color_inlinecompletion);
- pi_.pain.text(x_, yo_, s1, f);
+ f.setColor(c1);
+ pi_.pain.text(int(x_), yo_, s1, f);
x_ += theFontMetrics(font).width(s1);
}
if (s2.size() > 0) {
- f.setColor(Color_nonunique_inlinecompletion);
- pi_.pain.text(x_, yo_, s2, f);
+ f.setColor(c2);
+ pi_.pain.text(int(x_), yo_, s2, f);
x_ += theFontMetrics(font).width(s2);
}
}