- BOOST_ASSERT(!paragraphs().empty());
- BOOST_ASSERT(!paragraphs().begin()->rows.empty());
-#if 1
- par_type const pend = paragraphs().size() - 1;
- pit = 0;
- while (int(pars_[pit].y + pars_[pit].height) < y && pit != pend)
- ++pit;
-
- RowList::iterator rit = pars_[pit].rows.end();
- RowList::iterator const rbegin = pars_[pit].rows.begin();
- do {
- --rit;
- } while (rit != rbegin && int(pars_[pit].y + rit->y_offset()) > y);
-
- return rit;
-#else
- pit = paragraphs().size() - 1;
-
- RowList::iterator rit = lastRow();
- RowList::iterator rbegin = firstRow();
-
- while (rit != rbegin && int(pars_[pit].y + rit->y_offset()) > y)
- previousRow(pit, rit);
-
- return rit;
-#endif
-}
-
-
-RowList::iterator LyXText::firstRow() const
-{
- return paragraphs().front().rows.begin();
-}
-
-
-RowList::iterator LyXText::lastRow() const
-{
- return boost::prior(endRow());
-}
-
-
-RowList::iterator LyXText::endRow() const
-{
- return paragraphs().back().rows.end();
-}
-
-
-void LyXText::nextRow(par_type & pit, RowList::iterator & rit) const
-{
- ++rit;
- if (rit == pars_[pit].rows.end()) {
- ++pit;
- if (pit == par_type(paragraphs().size()))
- --pit;
- else
- rit = pars_[pit].rows.begin();
- }