void RichTxt::Paint(PageDraw& pw, RichContext rc, const PaintInfo& _pi) const { PaintInfo pi = _pi; int parti = 0; int pos = 0; RichPara::Number n; while(rc.py < pi.bottom && parti < part.GetCount()) { if(part[parti].Is<RichTable>()) { pi.tablesel--; const RichTable& tab = GetTable(parti); tab.Paint(pw, rc, pi); rc.py = tab.GetHeight(rc); pi.tablesel -= tab.GetTableCount(); } else { const Para& pp = part[parti].Get<Para>(); if(pp.number) { n.TestReset(*pp.number); n.Next(*pp.number); } PageY next = GetNextPageY(parti, rc); if(next >= pi.top) { int nbefore = 0; int nline = 0; if(pp.keepnext && parti + 1 < part.GetCount() && part[parti + 1].Is<Para>()) { Sync(parti + 1, rc); const Para& pp = part[parti + 1].Get<Para>(); nbefore = pp.before; nline = pp.linecy[0]; } RichPara p = Get(parti, rc.styles); if(pi.spellingchecker) { if(!pp.checked) { pp.spellerrors = (*pi.spellingchecker)(p); pp.checked = true; } } else { pp.checked = false; pp.spellerrors.Clear(); } if(IsPainting(pw, pi.zoom, rc.page, rc.py, next)) p.Paint(pw, rc.page, rc.py, pi, n, pp.spellerrors, nbefore, nline); } rc.py = next; } int l = GetPartLength(parti) + 1; pi.highlightpara -= l; pi.sell -= l; pi.selh -= l; pos += l; ++parti; } }