+ CoordCache::InnerParPosCache::const_iterator last = et; last--;
+
+ // If we are off-screen (before the visible part)
+ if (y < 0
+ // and even before the first paragraph in the cache.
+ && y < it->second.y_ - int(pars_[it->first].ascent())) {
+ // and we are not at the first paragraph in the inset.
+ if (it->first == 0)
+ return 0;
+ // then this is the paragraph we are looking for.
+ pit = it->first - 1;
+ // rebreak it and update the CoordCache.
+ redoParagraph(bv, pit);
+ bv.coordCache().parPos()[this][pit] =
+ Point(0, it->second.y_ - pars_[it->first].descent());
+ return pit;
+ }
+
+ // If we are off-screen (after the visible part)
+ if (y > bv.workHeight()
+ // and even after the first paragraph in the cache.
+ && y >= last->second.y_ + int(pars_[last->first].descent())) {
+ pit = last->first + 1;
+ // and we are not at the last paragraph in the inset.
+ if (pit == pars_.size())
+ return it->first;
+ // then this is the paragraph we are looking for.
+ // rebreak it and update the CoordCache.
+ redoParagraph(bv, pit);
+ bv.coordCache().parPos()[this][pit] =
+ Point(0, last->second.y_ + pars_[last->first].ascent());
+ return pit;
+ }
+