I'm iffy as to whether this really helps, but I'm putting it in for now. 1,000th commit…
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1000 c06c8d41-db1a-0410-9941-cceddc491573
7NFVYCNQ54IN77PF334ADAF4YQT6LEABMAIZF4Y4BH5C3CYXYQGQC
LAMIVDKY7LO5ONX5Z273ZCCEA5UBENOJD5VWNE4AK2EXGFED6BFQC
5ASC3STDYCNLZFEBN6UTMUCGDETHBR2OCBZCF5VIAZ5RRWLOTDYQC
S7LXN4ZS57KFPKGOQNDZ6NZ7LOSQZIUHKO5DDZ2VTLJQSH2HN6MQC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
2GV6OW7P54FXZ5OD2NUMX7MLXH424LYAFMOAUQ2UGSOLKLYDBJGAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
// If, when scrolling forward, we encounter a MEL_TITLE
// somewhere in the newly displayed page, stop scrolling
// just before it becomes visible
int target;
for (target = first_entry; target < first_entry + pagesize; ++target )
{
const int offset = target + pagesize - 1;
if (offset < (int)items.size() && items[offset]->level == MEL_TITLE)
break;
}
first_entry = target;
return (old_first != first_entry);
}
bool formatted_scroller::page_up()
{
int old_first = first_entry;
// If, when scrolling backward, we encounter a MEL_TITLE
// somewhere in the newly displayed page, stop scrolling
// just before it becomes visible
for ( int i = 0; i < pagesize; ++i )
{
if (first_entry == 0 || items[first_entry-1]->level == MEL_TITLE)
break;
--first_entry;
}
return (old_first != first_entry);
}
bool formatted_scroller::line_down()
{
if (first_entry + pagesize < (int) items.size() &&
items[first_entry + pagesize]->level != MEL_TITLE )
{
++first_entry;
return true;
}
return false;
}
bool formatted_scroller::line_up()
{
if (first_entry > 0 && items[first_entry-1]->level != MEL_TITLE)
{
--first_entry;
return true;
}
return false;
}