X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3d9ecb8771f553bbabbb368cb808c83c8e9cc90b..f51723055aa4334a355a19e87bb2b478b4204d15:/src/gtk/scrolwin.cpp diff --git a/src/gtk/scrolwin.cpp b/src/gtk/scrolwin.cpp index 2f9bc568fa..f5e5b78e8c 100644 --- a/src/gtk/scrolwin.cpp +++ b/src/gtk/scrolwin.cpp @@ -10,14 +10,6 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -// ============================================================================ -// declarations -// ============================================================================ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -26,68 +18,31 @@ #endif #include "wx/scrolwin.h" -#include "wx/gtk/private.h" -// ============================================================================ -// implementation -// ============================================================================ +#include // ---------------------------------------------------------------------------- // wxScrollHelper implementation // ---------------------------------------------------------------------------- -void wxScrollHelperNative::SetScrollbars(int pixelsPerUnitX, int pixelsPerUnitY, - int noUnitsX, int noUnitsY, - int xPos, int yPos, - bool noRefresh) +void wxScrollHelper::SetScrollbars(int pixelsPerUnitX, int pixelsPerUnitY, + int noUnitsX, int noUnitsY, + int xPos, int yPos, + bool noRefresh) { - int xs, ys; - GetViewStart(& xs, & ys); - - int old_x = m_xScrollPixelsPerLine * xs; - int old_y = m_yScrollPixelsPerLine * ys; - - m_xScrollPixelsPerLine = pixelsPerUnitX; - m_yScrollPixelsPerLine = pixelsPerUnitY; - - m_win->m_scrollBar[wxWindow::ScrollDir_Horz]->adjustment->value = - m_xScrollPosition = xPos; - m_win->m_scrollBar[wxWindow::ScrollDir_Vert]->adjustment->value = - m_yScrollPosition = yPos; - - // Setting hints here should arguably be deprecated, but without it - // a sizer might override this manual scrollbar setting in old code. - // m_targetWindow->SetVirtualSizeHints( noUnitsX * pixelsPerUnitX, noUnitsY * pixelsPerUnitY ); - - int w = noUnitsX * pixelsPerUnitX; - int h = noUnitsY * pixelsPerUnitY; - m_targetWindow->SetVirtualSize( w ? w : wxDefaultCoord, - h ? h : wxDefaultCoord); - - // If the target is not the same as the window with the scrollbars, - // then we need to update the scrollbars here, since they won't have - // been updated by SetVirtualSize(). - if (m_targetWindow != m_win) - { - AdjustScrollbars(); - } - - if (!noRefresh) - { - int new_x = m_xScrollPixelsPerLine * m_xScrollPosition; - int new_y = m_yScrollPixelsPerLine * m_yScrollPosition; - - m_targetWindow->ScrollWindow( old_x - new_x, old_y - new_y ); - } + m_win->m_scrollBar[wxWindow::ScrollDir_Horz]->adjustment->value = xPos; + m_win->m_scrollBar[wxWindow::ScrollDir_Vert]->adjustment->value = yPos; + base_type::SetScrollbars( + pixelsPerUnitX, pixelsPerUnitY, noUnitsX, noUnitsY, xPos, yPos, noRefresh); } -void wxScrollHelperNative::DoAdjustScrollbar(GtkRange* range, - int pixelsPerLine, - int winSize, - int virtSize, - int *pos, - int *lines, - int *linesPerPage) +void wxScrollHelper::DoAdjustScrollbar(GtkRange* range, + int pixelsPerLine, + int winSize, + int virtSize, + int *pos, + int *lines, + int *linesPerPage) { int upper; int page_size; @@ -119,7 +74,7 @@ void wxScrollHelperNative::DoAdjustScrollbar(GtkRange* range, *pos = *lines; } -void wxScrollHelperNative::AdjustScrollbars() +void wxScrollHelper::AdjustScrollbars() { int vw, vh; m_targetWindow->GetVirtualSize(&vw, &vh); @@ -163,7 +118,7 @@ void wxScrollHelperNative::AdjustScrollbars() } } -void wxScrollHelperNative::DoScroll(int orient, +void wxScrollHelper::DoScrollOneDir(int orient, int pos, int pixelsPerLine, int *posOld) @@ -181,10 +136,51 @@ void wxScrollHelperNative::DoScroll(int orient, } } -void wxScrollHelperNative::Scroll( int x_pos, int y_pos ) +void wxScrollHelper::DoScroll( int x_pos, int y_pos ) { wxCHECK_RET( m_targetWindow != 0, _T("No target window") ); - DoScroll(wxHORIZONTAL, x_pos, m_xScrollPixelsPerLine, &m_xScrollPosition); - DoScroll(wxVERTICAL, y_pos, m_yScrollPixelsPerLine, &m_yScrollPosition); + DoScrollOneDir(wxHORIZONTAL, x_pos, m_xScrollPixelsPerLine, &m_xScrollPosition); + DoScrollOneDir(wxVERTICAL, y_pos, m_yScrollPixelsPerLine, &m_yScrollPosition); +} + +// ---------------------------------------------------------------------------- +// scrollbars visibility +// ---------------------------------------------------------------------------- + +namespace +{ + +GtkPolicyType GtkPolicyFromWX(wxScrollbarVisibility visibility) +{ + GtkPolicyType policy; + switch ( visibility ) + { + case wxSHOW_SB_NEVER: + policy = GTK_POLICY_NEVER; + break; + + case wxSHOW_SB_DEFAULT: + policy = GTK_POLICY_AUTOMATIC; + break; + + case wxSHOW_SB_ALWAYS: + policy = GTK_POLICY_ALWAYS; + break; + } + + return policy; +} + +} // anonymous namespace + +void wxScrollHelper::DoShowScrollbars(wxScrollbarVisibility horz, + wxScrollbarVisibility vert) +{ + GtkScrolledWindow * const scrolled = GTK_SCROLLED_WINDOW(m_win->m_widget); + wxCHECK_RET( scrolled, "window must be created" ); + + gtk_scrolled_window_set_policy(scrolled, + GtkPolicyFromWX(horz), + GtkPolicyFromWX(vert)); }