// True if screen is full, should terminate the loop.
 internal abstract bool ScreenFull(PageOnScreen curPage, Size screenSize);
 // Advance page by one
 internal abstract void AdvancePage(ref PageOnScreen curPage, Size sceenSize);
 internal override void AdvancePage(ref PageOnScreen curPage, Size screenSize)
 {
     int top = curPage.TopOnScreen;
     curPage = NewPage(curPage.PageNum - 1, screenSize);
     curPage.BottomOnScreen = top - RowSpacing;
 }
        internal override bool ScreenFull(PageOnScreen curPage, Size screenSize)
        {
            // Spilling over to next page
            if (curPage.TopOnScreen <= 0) { return true; }

            // First page (no spill upwards necessary)
            if (curPage.PageNum == 1) { return true; }

            return false;
        }
 internal override void AdvancePage(ref PageOnScreen curPage, Size sceenSize)
 {
     _assembleCurrent.AdvancePage(ref curPage, sceenSize);
 }
 internal override bool ScreenFull(PageOnScreen curPage, Size screenSize)
 {
     return _assembleCurrent.ScreenFull(curPage, screenSize);
 }
        internal override bool ScreenFull(PageOnScreen curPage, Size screenSize)
        {
            // Spilling over to next page
            if (curPage.BottomOnScreen >= screenSize.Height) { return true; }

            // Final page (no spill over necessary)
            if (curPage.PageNum == PageCount) { return true; }

            return false;
        }