X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Frowpainter.cpp;h=5c8f694b505117316ad526b4838715663641ab5f;hb=4594b1425b484138fcae28996f460312d810b8d5;hp=4de10afe2d96fbe8a92738d73f96f827968d7827;hpb=438aaf2ec989d9cdcefe6e59bdc324c8398782bb;p=lyx.git diff --git a/src/rowpainter.cpp b/src/rowpainter.cpp index 4de10afe2d..5c8f694b50 100644 --- a/src/rowpainter.cpp +++ b/src/rowpainter.cpp @@ -60,7 +60,7 @@ RowPainter::RowPainter(PainterInfo & pi, pars_(text.paragraphs()), row_(row), pit_(pit), par_(text.paragraphs()[pit]), pm_(text_metrics_.parMetrics(pit)), - bidi_(bidi), erased_(pi_.erased_), + bidi_(bidi), change_(pi_.change_), xo_(x), yo_(y), width_(text_metrics_.width()) { bidi_.computeTables(par_, pi_.base.bv->buffer(), row_); @@ -106,7 +106,8 @@ void RowPainter::paintInset(Inset const * inset, pos_type const pos) pi_.base.bv->buffer().params().getFont().fontInfo() : font.fontInfo(); pi_.ltr_pos = (bidi_.level(pos) % 2 == 0); - pi_.erased_ = erased_ || par_.isDeleted(pos); + pi_.change_ = change_.changed() ? change_ : par_.lookupChange(pos); + int const x1 = int(x_); pi_.base.bv->coordCache().insets().add(inset, x1, yo_); // insets are painted completely. Recursive @@ -327,6 +328,13 @@ void RowPainter::paintForeignMark(double orig_x, Language const * lang, } +void RowPainter::paintMisspelledMark(double orig_x, int desc) +{ + int const y = yo_ + desc; + pi_.pain.wavyHorizontalLine(int(orig_x), y, int(x_) - int(orig_x), Color_red); +} + + void RowPainter::paintFromPos(pos_type & vpos) { pos_type const pos = bidi_.vis2log(vpos); @@ -354,6 +362,9 @@ void RowPainter::paintFromPos(pos_type & vpos) } paintForeignMark(orig_x, orig_font.language()); + + if (orig_font.isMisspelled()) + paintMisspelledMark(orig_x, 3); } @@ -595,7 +606,7 @@ void RowPainter::paintLast() FontMetrics const & fm = theFontMetrics(pi_.base.bv->buffer().params().getFont()); int const length = fm.maxAscent() / 2; - ColorCode col = change.color(); + Color col = change.color(); pi_.pain.line(int(x_) + 1, yo_ + 2, int(x_) + 1, yo_ + 2 - length, col, Painter::line_solid, Painter::line_thick); @@ -654,15 +665,17 @@ void RowPainter::paintLast() void RowPainter::paintOnlyInsets() { + CoordCache const & cache = pi_.base.bv->coordCache(); pos_type const end = row_.endpos(); for (pos_type pos = row_.pos(); pos != end; ++pos) { // If outer row has changed, nested insets are repaint completely. Inset const * inset = par_.getInset(pos); if (!inset) continue; - if (x_ > pi_.base.bv->workWidth()) + if (x_ > pi_.base.bv->workWidth() + || !cache.getInsets().has(inset)) continue; - x_ = pi_.base.bv->coordCache().getInsets().x(inset); + x_ = cache.getInsets().x(inset); bool const pi_selected = pi_.selected; Cursor const & cur = pi_.base.bv->cursor(); @@ -759,7 +772,7 @@ void RowPainter::paintText() Inset const * inset = par_.getInset(pos); bool const highly_editable_inset = inset - && inset->editable() == Inset::HIGHLY_EDITABLE; + && inset->editable(); // If we reach the end of a change or if the author changes, paint it. // We also don't paint across things like tables