- int noPagePositions = (int) ( (h/(double)m_yScrollPixelsPerLine) + 0.5 );
- if (noPagePositions < 1) noPagePositions = 1;
- if ( noPagePositions > m_yScrollLines )
- noPagePositions = m_yScrollLines;
+ linesPerPage = h / m_yScrollPixelsPerLine;
+ if ( linesPerPage >= m_yScrollLines )
+ {
+ // we're big enough to not need scrolling
+ linesPerPage =
+ m_yScrollLines =
+ m_yScrollPosition = 0;
+ }
+ else // we do need a scrollbar
+ {
+ if ( linesPerPage < 1 )
+ linesPerPage = 1;
+
+ // Correct position if greater than extent of canvas minus
+ // the visible portion of it or if below zero
+ const int posMax = m_yScrollLines - linesPerPage;
+ if ( m_yScrollPosition > posMax )
+ m_yScrollPosition = posMax;
+ else if ( m_yScrollPosition < 0 )
+ m_yScrollPosition = 0;
+ }
+ }