dim_.asc = 10;
dim_.des = 10;
- //text_->updateLabels(bv->buffer());
+ //text_->updateBuffer(bv->buffer());
}
void TextMetrics::applyOuterFont(Font & font) const
{
- Font lf(font_);
- lf.fontInfo().reduce(bv_->buffer().params().getFont().fontInfo());
- lf.fontInfo().realize(font.fontInfo());
- lf.setLanguage(font.language());
- font = lf;
+ FontInfo lf(font_.fontInfo());
+ lf.reduce(bv_->buffer().params().getFont().fontInfo());
+ font.fontInfo().realize(lf);
}
bool TextMetrics::redoParagraph(pit_type const pit)
{
Paragraph & par = text_->getPar(pit);
- // IMPORTANT NOTE: We pass 'false' explicitely in order to not call
+ // IMPORTANT NOTE: We pass 'false' explicitly in order to not call
// redoParagraph() recursively inside parMetrics.
Dimension old_dim = parMetrics(pit, false).dim();
ParagraphMetrics & pm = par_metrics_[pit];
LYXERR(Debug::INFO, "MacroContext not initialised!"
<< " Going through the buffer again and hope"
<< " the context is better then.");
- bv_->buffer().updateLabels();
+ bv_->buffer().updateBuffer();
parPos = text_->macrocontextPosition();
LASSERT(!parPos.empty(), /**/);
parPos.pit() = pit;
- right_margin;
Font const & font = ii->inset->noFontChange() ?
bufferfont : displayFont(pit, ii->pos);
- MacroContext mc(buffer, parPos);
+ MacroContext mc(&buffer, parPos);
MetricsInfo mi(bv_, font.fontInfo(), w, mc);
ii->inset->metrics(mi, dim);
Dimension const old_dim = pm.insetDimension(ii->inset);
FontIterator fi = FontIterator(*this, par, pit, pos);
pos_type point = end;
pos_type i = pos;
+
+ ParagraphList const & pars_ = text_->paragraphs();
+ bool const draw_par_end_marker = lyxrc.paragraph_markers
+ && size_type(pit + 1) < pars_.size();
+
for ( ; i < end; ++i, ++fi) {
int thiswidth = pm.singleWidth(i, *fi);
- if (i == end - 1 && lyxrc.paragraph_markers)
- // enlarge the last character to hold the
- // end-of-par marker
+ if (draw_par_end_marker && i == end - 1)
+ // enlarge the last character to hold the end-of-par marker
thiswidth += par_marker_width;
// add inline completion width
// count the paragraph end marker.
if (end == par.size() && lyxrc.paragraph_markers) {
- docstring const s(1, char_type(0x00B6));
- Font f;
- w += theFontMetrics(f).width(s);
+ ParagraphList const & pars_ = text_->paragraphs();
+ if (size_type(pit + 1) < pars_.size()) {
+ // enlarge the last character to hold the
+ // end-of-par marker
+ docstring const s(1, char_type(0x00B6));
+ Font f;
+ w += theFontMetrics(f).width(s);
+ }
}
if (body_pos > 0 && body_pos >= end) {
return 0;
}
+ // if the first character is a separator, we are in RTL
+ // text. This character will not be painted on screen
+ // and thus we should not count it and skip to the next.
+ if (par.isSeparator(bidi.vis2log(vc)))
+ ++vc;
+
while (vc < end && tmpx <= x) {
c = bidi.vis2log(vc);
last_tmpx = tmpx;
if (yy + rit->height() > y)
break;
- if (assert_in_view && yy + rit->height() != y) {
- if (!up) {
+ if (assert_in_view) {
+ if (!up && yy + rit->height() > y) {
if (rit != pm.rows().begin()) {
y = yy;
--rit;
--rit;
y = yy;
}
- } else {
+ } else if (up && yy != y) {
if (rit != rlast) {
y = yy + rit->height();
++rit;
- } else if (pit != int(par_metrics_.size())) {
+ } else if (pit < int(text_->paragraphs().size()) - 1) {
++pit;
newParMetricsDown();
ParagraphMetrics const & pm2 = par_metrics_[pit];
int yy = y; // is modified by getPitAndRowNearY
Row const & row = getPitAndRowNearY(yy, pit, assert_in_view, up);
- bool bound = false;
+ bool bound = false; // is modified by getColumnNearX
int xx = x; // is modified by getColumnNearX
pos_type const pos = row.pos()
+ getColumnNearX(pit, row, xx, bound);
}
ParagraphList const & pars = text_->paragraphs();
- Inset const * insetBefore = pos ? pars[pit].getInset(pos - 1) : 0;
- //Inset * insetBehind = pars[pit].getInset(pos);
+ Inset const * inset_before = pos ? pars[pit].getInset(pos - 1) : 0;
// This should be just before or just behind the
// cursor position set above.
- LASSERT((pos != 0 && inset == insetBefore)
+ LASSERT(inset == inset_before
|| inset == pars[pit].getInset(pos), /**/);
// Make sure the cursor points to the position before
// this inset.
- if (inset == insetBefore) {
+ if (inset == inset_before) {
--cur.pos();
cur.boundary(false);
}
else if (ppos >= end)
cursor_vpos = text_->isRTL(par) ? row_pos : end;
else if (ppos > row_pos && ppos >= end)
+ //FIXME: this code is never reached!
+ // (see http://www.lyx.org/trac/changeset/8251)
// Place cursor after char at (logical) position pos - 1
cursor_vpos = (bidi.level(ppos - 1) % 2 == 0)
? bidi.log2vis(ppos - 1) + 1 : bidi.log2vis(ppos - 1);
skipped_sep_vpos = bidi.log2vis(end - 1);
if (lyxrc.paragraph_markers && text_->isRTL(par)) {
- FontInfo f;
- docstring const s = docstring(1, char_type(0x00B6));
- x += theFontMetrics(f).width(s);
+ ParagraphList const & pars_ = text_->paragraphs();
+ if (size_type(pit + 1) < pars_.size()) {
+ FontInfo f;
+ docstring const s = docstring(1, char_type(0x00B6));
+ x += theFontMetrics(f).width(s);
+ }
}
// Inline completion RTL special case row_pos == cursor_pos: