X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8c2f37978674e79f0ffd8b41c46d6c698f90ccce..36d9119341753b2f6f606571702a9b906050a07c:/src/gtk1/scrolwin.cpp diff --git a/src/gtk1/scrolwin.cpp b/src/gtk1/scrolwin.cpp index 175fb3494d..fe7bf353ea 100644 --- a/src/gtk1/scrolwin.cpp +++ b/src/gtk1/scrolwin.cpp @@ -276,13 +276,13 @@ bool wxScrolledWindow::Create(wxWindow *parent, m_vAdjust->upper = 1.0; m_vAdjust->value = 0.0; m_vAdjust->step_increment = 1.0; - m_vAdjust->page_increment = 1.0; + m_vAdjust->page_increment = 2.0; gtk_signal_emit_by_name( GTK_OBJECT(m_vAdjust), "changed" ); m_hAdjust->lower = 0.0; m_hAdjust->upper = 1.0; m_hAdjust->value = 0.0; m_hAdjust->step_increment = 1.0; - m_hAdjust->page_increment = 1.0; + m_hAdjust->page_increment = 2.0; gtk_signal_emit_by_name( GTK_OBJECT(m_hAdjust), "changed" ); // Handlers for new scrollbar values @@ -370,15 +370,53 @@ void wxScrolledWindow::AdjustScrollbars() m_targetWindow->GetClientSize( &w, &h ); if (m_xScrollPixelsPerLine == 0) + { + m_hAdjust->upper = 1.0; m_hAdjust->page_size = 1.0; + } else + { m_hAdjust->page_size = (w / m_xScrollPixelsPerLine); + int max = (int)(m_hAdjust->upper - m_hAdjust->page_size + 0.5); + if (max < 0) max = 0; + + int x_pos = m_xScrollPosition; + if (x_pos > max) x_pos = max; + if (x_pos < 0) x_pos = 0; + + int old_x = m_xScrollPosition; + m_xScrollPosition = x_pos; + m_hAdjust->value = x_pos; + + if (x_pos != old_x) + m_targetWindow->ScrollWindow( (old_x-m_xScrollPosition)*m_xScrollPixelsPerLine, 0 ); + } + if (m_yScrollPixelsPerLine == 0) + { + m_vAdjust->upper = 1.0; m_vAdjust->page_size = 1.0; + } else + { m_vAdjust->page_size = (h / m_yScrollPixelsPerLine); + int max = (int)(m_vAdjust->upper - m_vAdjust->page_size + 0.5); + if (max < 0) max = 0; + + int y_pos = m_yScrollPosition; + if (y_pos > max) y_pos = max; + if (y_pos < 0) y_pos = 0; + + int old_y = m_yScrollPosition; + m_yScrollPosition = y_pos; + m_vAdjust->value = y_pos; + + if (y_pos != old_y) + m_targetWindow->ScrollWindow( 0, (old_y-m_yScrollPosition)*m_yScrollPixelsPerLine ); + } + m_xScrollLinesPerPage = (int)(m_hAdjust->page_size + 0.5); m_yScrollLinesPerPage = (int)(m_vAdjust->page_size + 0.5); @@ -573,10 +611,24 @@ void wxScrolledWindow::EnableScrolling (bool x_scroll, bool y_scroll) void wxScrolledWindow::GetVirtualSize (int *x, int *y) const { + wxSize sz(0, 0); + if (m_targetWindow) + sz = m_targetWindow->GetClientSize(); + if ( x ) - *x = m_xScrollPixelsPerLine * m_xScrollLines; + { + if (m_xScrollPixelsPerLine == 0) + *x = sz.x; + else + *x = m_xScrollPixelsPerLine * m_xScrollLines; + } if ( y ) - *y = m_yScrollPixelsPerLine * m_yScrollLines; + { + if (m_yScrollPixelsPerLine == 0) + *y = sz.y; + else + *y = m_yScrollPixelsPerLine * m_yScrollLines; + } } // Where the current view starts from