void wxScrollHelperNative::AdjustScrollbars() { // this flag indicates which window has the scrollbars m_win->m_hasScrolling = m_xScrollPixelsPerLine != 0 || m_yScrollPixelsPerLine != 0; int vw, vh; m_targetWindow->GetVirtualSize( &vw, &vh ); int w; m_targetWindow->GetClientSize(&w, NULL); DoAdjustHScrollbar(w, vw); int h; m_targetWindow->GetClientSize(NULL, &h); DoAdjustVScrollbar(h, vh); const int w_old = w; m_targetWindow->GetClientSize(&w, NULL); if ( w != w_old ) { // It is necessary to repeat the calculations in this case to avoid an // observed infinite series of size events, involving alternating // changes in visibility of the scrollbars. // At this point, GTK+ has already queued a resize, which will cause // AdjustScrollbars() to be called again. If the scrollbar visibility // is not correct before then, yet another resize will occur, possibly // leading to an unending series if the sizes are just right. DoAdjustHScrollbar(w, vw); m_targetWindow->GetClientSize(NULL, &h); DoAdjustVScrollbar(h, vh); } }
void wxScrollHelper::AdjustScrollbars() { int vw, vh; m_targetWindow->GetVirtualSize(&vw, &vh); int w, h; const wxSize availSize = GetSizeAvailableForScrollTarget( m_win->GetSize() - m_win->GetWindowBorderSize()); if ( availSize.x >= vw && availSize.y >= vh ) { w = availSize.x; h = availSize.y; // we know that the scrollbars will be removed DoAdjustHScrollbar(w, vw); DoAdjustVScrollbar(h, vh); return; } m_targetWindow->GetClientSize(&w, NULL); DoAdjustHScrollbar(w, vw); m_targetWindow->GetClientSize(NULL, &h); DoAdjustVScrollbar(h, vh); const int w_old = w; m_targetWindow->GetClientSize(&w, NULL); if ( w != w_old ) { // It is necessary to repeat the calculations in this case to avoid an // observed infinite series of size events, involving alternating // changes in visibility of the scrollbars. // At this point, GTK+ has already queued a resize, which will cause // AdjustScrollbars() to be called again. If the scrollbar visibility // is not correct before then, yet another resize will occur, possibly // leading to an unending series if the sizes are just right. DoAdjustHScrollbar(w, vw); m_targetWindow->GetClientSize(NULL, &h); DoAdjustVScrollbar(h, vh); } }