BOOST_ASSERT(pit >= 0);
BOOST_ASSERT(pit < int(text.paragraphs().size()));
-
- // check for possible inline completion
- DocIterator const & inlineCompletionPos = pi_.base.bv->inlineCompletionPos();
- inlineCompletionVPos_ = -1;
- if (inlineCompletionPos.inTexted()
- && inlineCompletionPos.text() == &text_
- && inlineCompletionPos.pit() == pit_) {
- // draw visually behind the previous character
- // FIXME: probably special RTL handling needed here
- inlineCompletionVPos_ = bidi_.log2vis(inlineCompletionPos.pos() - 1);
- }
}
FontInfo const font = getLabelFont();
FontMetrics const & fm = theFontMetrics(font);
- docstring const str = par_.getLabelstring();
+ docstring const str = par_.labelString();
if (!str.empty()) {
double x = x_;
layout->labeltype == LABEL_BIBLIO ||
layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT)) {
FontInfo const font = getLabelFont();
- if (!par_.getLabelstring().empty()) {
- docstring const str = par_.getLabelstring();
+ docstring const str = par_.labelString();
+ if (!str.empty()) {
double spacing_val = 1.0;
if (!parparams.spacing().isDefault())
spacing_val = parparams.spacing().getValue();
bool is_struckout = false;
int last_strikeout_x = 0;
+ // check for possible inline completion
+ DocIterator const & inlineCompletionPos = pi_.base.bv->inlineCompletionPos();
+ pos_type inlineCompletionVPos = -1;
+ if (inlineCompletionPos.inTexted()
+ && inlineCompletionPos.text() == &text_
+ && inlineCompletionPos.pit() == pit_
+ && inlineCompletionPos.pos() >= row_.pos()
+ && inlineCompletionPos.pos() <= row_.endpos()) {
+ // draw logically behind the previous character
+ inlineCompletionVPos = bidi_.log2vis(inlineCompletionPos.pos() - 1);
+ }
+
// Use font span to speed things up, see below
FontSpan font_span;
Font font;
font = text_metrics_.getDisplayFont(pit_, vpos);
// split font span if inline completion is inside
- if (font_span.first <= inlineCompletionVPos_
- && font_span.last > inlineCompletionVPos_)
- font_span.last = inlineCompletionVPos_;
+ if (font_span.first <= inlineCompletionVPos
+ && font_span.last > inlineCompletionVPos)
+ font_span.last = inlineCompletionVPos;
}
const int width_pos = pm_.singleWidth(pos, font);
x_ += row_.label_hfill + lwidth - width_pos;
}
+
+ // Is the inline completion in front of character?
+ if (font.isRightToLeft() && vpos == inlineCompletionVPos)
+ paintInlineCompletion(font);
if (par_.isSeparator(pos)) {
Font const orig_font = text_metrics_.getDisplayFont(pit_, pos);
paintFromPos(vpos);
}
- // Is the inline completion here?
- // FIXME: RTL support needed here
- if (vpos - 1 == inlineCompletionVPos_) {
- docstring const & completion = pi_.base.bv->inlineCompletion();
- FontInfo f = font.fontInfo();
-
- // draw the unique and the non-unique completion part
- // Note: this is not time-critical as it is
- // only done once per screen.
- size_t uniqueTo = pi_.base.bv->inlineCompletionUniqueChars();
- docstring s1 = completion.substr(0, uniqueTo);
- docstring s2 = completion.substr(uniqueTo);
-
- if (s1.size() > 0) {
- f.setColor(Color_inlinecompletion);
- pi_.pain.text(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);
- x_ += theFontMetrics(font).width(s2);
- }
- }
+ // Is the inline completion after character?
+ if (!font.isRightToLeft() && vpos - 1 == inlineCompletionVPos)
+ paintInlineCompletion(font);
}
// if we reach the end of a struck out range, paint it
}
}
+
+void RowPainter::paintInlineCompletion(Font const & font)
+{
+ docstring completion = pi_.base.bv->inlineCompletion();
+ FontInfo f = font.fontInfo();
+
+ // right to left?
+ if (font.isRightToLeft())
+ reverse(completion.begin(), completion.end());
+
+ // draw the unique and the non-unique completion part
+ // Note: this is not time-critical as it is
+ // only done once per screen.
+ size_t uniqueTo = pi_.base.bv->inlineCompletionUniqueChars();
+ docstring s1 = completion.substr(0, uniqueTo);
+ docstring s2 = completion.substr(uniqueTo);
+
+ if (s1.size() > 0) {
+ f.setColor(Color_inlinecompletion);
+ pi_.pain.text(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);
+ x_ += theFontMetrics(font).width(s2);
+ }
+}
+
} // namespace lyx