bool const selection = (pos >= row_.sel_beg && pos < row_.sel_end)
|| pi_.selected;
+ // spelling correct?
+ bool const spell_state =
+ lyxrc.spellcheck_continuously && par_.isMisspelled(pos);
+
char_type prev_char = ' ';
// collect as much similar chars as we can
for (++vpos ; vpos < end ; ++vpos) {
// Selection ends or starts here.
break;
+ bool const new_spell_state =
+ lyxrc.spellcheck_continuously && par_.isMisspelled(pos);
+ if (new_spell_state != spell_state)
+ // Spell checker state changed here.
+ break;
+
Change const & change = par_.lookupChange(pos);
if (!change_running.isSimilarTo(change))
// Track change type or author has changed.
}
-void RowPainter::paintMisspelledMark(double orig_x, int desc)
+void RowPainter::paintMisspelledMark(double orig_x, int desc, bool changed)
{
- int const y = yo_ + desc;
- pi_.pain.line(int(orig_x), y, int(x_), y, Color_red, Painter::line_onoffdash, 0.5);
+ // derive the offset from zoom factor specified by user in percent
+ // if changed the misspelled marker gets placed slightly lower than normal
+ // to avoid drawing at the same vertical offset
+ int const offset = int(1.5 * lyxrc.zoom / 100.0); // [percent]
+ int const y = yo_ + desc + (changed ? offset : 0);
+ pi_.pain.line(int(orig_x), y, int(x_), y, Color_red, Painter::line_onoffdash, 1.0);
}
-void RowPainter::paintFromPos(pos_type & vpos)
+void RowPainter::paintFromPos(pos_type & vpos, bool changed)
{
pos_type const pos = bidi_.vis2log(vpos);
Font const orig_font = text_metrics_.displayFont(pit_, pos);
bool const arabic = lang == "arabic_arabtex" || lang == "arabic_arabi" ||
lang == "farsi";
+ // spelling correct?
+ bool const misspelled_ =
+ lyxrc.spellcheck_continuously && par_.isMisspelled(pos);
+
// draw as many chars as we can
if ((!hebrew && !arabic)
|| (hebrew && !Encodings::isHebrewComposeChar(c))
paintForeignMark(orig_x, orig_font.language());
- if (lyxrc.spellcheck_continuously && orig_font.isMisspelled())
- paintMisspelledMark(orig_x, 2);
+ if (lyxrc.spellcheck_continuously && misspelled_) {
+ paintMisspelledMark(orig_x, 2, changed);
+ }
}
} else {
// paint as many characters as possible.
- paintFromPos(vpos);
+ paintFromPos(vpos, change_running.changed());
}
// Is the inline completion after character?