X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/053f9cc122c63048d9607a3d684e9dca28ae96ac..a79fa1ed13f7aff722a9010de3f6e89f538da56f:/src/generic/scrolwin.cpp diff --git a/src/generic/scrolwin.cpp b/src/generic/scrolwin.cpp index 033b08913b..cc001c2d47 100644 --- a/src/generic/scrolwin.cpp +++ b/src/generic/scrolwin.cpp @@ -390,12 +390,22 @@ void wxScrolledWindow::GetScrollUnitsPerPage (int *x_page, int *y_page) const *x_page = GetScrollPageSize(wxHORIZONTAL); *y_page = GetScrollPageSize(wxVERTICAL); } -#endif + +void wxScrolledWindow::CalcUnscrolledPosition(int x, int y, float *xx, float *yy) const +{ + if ( xx ) + *xx = (float)(x + m_xScrollPosition * m_xScrollPixelsPerLine); + if ( yy ) + *yy = (float)(y + m_yScrollPosition * m_yScrollPixelsPerLine); +} +#endif // WXWIN_COMPATIBILITY void wxScrolledWindow::GetScrollPixelsPerUnit (int *x_unit, int *y_unit) const { - *x_unit = m_xScrollPixelsPerLine; - *y_unit = m_yScrollPixelsPerLine; + if ( x_unit ) + *x_unit = m_xScrollPixelsPerLine; + if ( y_unit ) + *y_unit = m_yScrollPixelsPerLine; } int wxScrolledWindow::GetScrollPageSize(int orient) const @@ -427,6 +437,7 @@ void wxScrolledWindow::Scroll( int x_pos, int y_pos ) if (x_pos != -1) { + int old_x = m_xScrollPosition; m_xScrollPosition = x_pos; // Calculate page size i.e. number of scroll units you get on the @@ -440,9 +451,12 @@ void wxScrolledWindow::Scroll( int x_pos, int y_pos ) m_xScrollPosition = wxMax( 0, m_xScrollPosition ); SetScrollPos( wxHORIZONTAL, m_xScrollPosition, TRUE ); + + ScrollWindow( (old_x-m_xScrollPosition)*m_xScrollPixelsPerLine, 0 ); } if (y_pos != -1) { + int old_y = m_yScrollPosition; m_yScrollPosition = y_pos; // Calculate page size i.e. number of scroll units you get on the @@ -456,14 +470,15 @@ void wxScrolledWindow::Scroll( int x_pos, int y_pos ) m_yScrollPosition = wxMax( 0, m_yScrollPosition ); SetScrollPos( wxVERTICAL, m_yScrollPosition, TRUE ); + + ScrollWindow( 0, (old_y-m_yScrollPosition)*m_yScrollPixelsPerLine ); } - // BAD, BAD, can cause event loops if called from OnPaint(). KB. - // Refresh(); #ifdef __WXMSW__ - // Necessary? - ::UpdateWindow ((HWND) GetHWND()); +// ::UpdateWindow ((HWND) GetHWND()); +#else +// Refresh(); #endif } @@ -475,27 +490,33 @@ void wxScrolledWindow::EnableScrolling (bool x_scroll, bool y_scroll) void wxScrolledWindow::GetVirtualSize (int *x, int *y) const { - *x = m_xScrollPixelsPerLine * m_xScrollLines; - *y = m_yScrollPixelsPerLine * m_yScrollLines; + if ( x ) + *x = m_xScrollPixelsPerLine * m_xScrollLines; + if ( y ) + *y = m_yScrollPixelsPerLine * m_yScrollLines; } // Where the current view starts from void wxScrolledWindow::ViewStart (int *x, int *y) const { - *x = m_xScrollPosition; - *y = m_yScrollPosition; + if ( x ) + *x = m_xScrollPosition; + if ( y ) + *y = m_yScrollPosition; } void wxScrolledWindow::CalcScrolledPosition(int x, int y, int *xx, int *yy) const { - *xx = x - m_xScrollPosition * m_xScrollPixelsPerLine; - *yy = y - m_yScrollPosition * m_yScrollPixelsPerLine; + if ( xx ) + *xx = x - m_xScrollPosition * m_xScrollPixelsPerLine; + if ( yy ) + *yy = y - m_yScrollPosition * m_yScrollPixelsPerLine; } -void wxScrolledWindow::CalcUnscrolledPosition(int x, int y, float *xx, float *yy) const +void wxScrolledWindow::CalcUnscrolledPosition(int x, int y, int *xx, int *yy) const { - *xx = (float)(x + m_xScrollPosition * m_xScrollPixelsPerLine); - *yy = (float)(y + m_yScrollPosition * m_yScrollPixelsPerLine); + if ( xx ) + *xx = x + m_xScrollPosition * m_xScrollPixelsPerLine; + if ( yy ) + *yy = y + m_yScrollPosition * m_yScrollPixelsPerLine; } - -