- // Correct position if greater than extent of canvas minus
- // the visible portion of it or if below zero
- m_xScrollPosition = wxMin( m_xScrollLines-noPagePositions, m_xScrollPosition);
- m_xScrollPosition = wxMax( 0, m_xScrollPosition );
+ if (m_xScrollPixelsPerLine == 0)
+ {
+ m_xScrollLines = 0;
+ m_xScrollPosition = 0;
+ m_win->SetScrollbar (wxHORIZONTAL, 0, 0, 0, FALSE);
+ }
+ else
+ {
+ m_xScrollLines = m_targetWindow->GetVirtualSize().GetWidth() / m_xScrollPixelsPerLine;
+
+ // Calculate page size i.e. number of scroll units you get on the
+ // current client window
+ int noPagePositions = (int) ( (w/(double)m_xScrollPixelsPerLine) + 0.5 );
+ if (noPagePositions < 1) noPagePositions = 1;
+ if ( noPagePositions > m_xScrollLines )
+ noPagePositions = m_xScrollLines;
+
+ // Correct position if greater than extent of canvas minus
+ // the visible portion of it or if below zero
+ m_xScrollPosition = wxMin( m_xScrollLines - noPagePositions, m_xScrollPosition);
+ m_xScrollPosition = wxMax( 0, m_xScrollPosition );
+
+ m_win->SetScrollbar(wxHORIZONTAL, m_xScrollPosition, noPagePositions, m_xScrollLines);
+ // The amount by which we scroll when paging
+ SetScrollPageSize(wxHORIZONTAL, noPagePositions);
+ }