// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-// ============================================================================
-// declarations
-// ============================================================================
-
-// ----------------------------------------------------------------------------
-// headers
-// ----------------------------------------------------------------------------
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#endif
#include "wx/scrolwin.h"
-#include "wx/gtk/private.h"
-// ============================================================================
-// implementation
-// ============================================================================
+#include <gtk/gtk.h>
// ----------------------------------------------------------------------------
// wxScrollHelper implementation
int xPos, int yPos,
bool noRefresh)
{
- int old_x = m_xScrollPosition * m_xScrollPixelsPerLine;
- int old_y = m_yScrollPosition * m_yScrollPixelsPerLine;
-
- 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;
-
- // To get everything right, have to call ScrollWindow()
- // both before and after calling SetVirtualSize()
- int new_x = m_xScrollPosition * m_xScrollPixelsPerLine;
- int new_y = m_yScrollPosition * m_yScrollPixelsPerLine;
- if (!noRefresh)
- {
- m_targetWindow->ScrollWindow(old_x - new_x, old_y - new_y);
- old_x = new_x;
- old_y = new_y;
- }
-
- int w = noUnitsX * pixelsPerUnitX;
- int h = noUnitsY * pixelsPerUnitY;
- m_targetWindow->SetVirtualSize( w ? w : wxDefaultCoord,
- h ? h : wxDefaultCoord);
-
- if (!noRefresh)
- {
- new_x = m_xScrollPosition * m_xScrollPixelsPerLine;
- new_y = m_yScrollPosition * m_yScrollPixelsPerLine;
- m_targetWindow->ScrollWindow(old_x - new_x, old_y - new_y);
- }
-
- // 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();
- }
+ m_win->m_scrollPos[wxWindow::ScrollDir_Horz] =
+ m_win->m_scrollBar[wxWindow::ScrollDir_Horz]->adjustment->value = xPos;
+ m_win->m_scrollPos[wxWindow::ScrollDir_Vert] =
+ m_win->m_scrollBar[wxWindow::ScrollDir_Vert]->adjustment->value = yPos;
+ base_type::SetScrollbars(
+ pixelsPerUnitX, pixelsPerUnitY, noUnitsX, noUnitsY, xPos, yPos, noRefresh);
}
void wxScrollHelper::DoAdjustScrollbar(GtkRange* range,
int *lines,
int *linesPerPage)
{
+ if (!range)
+ return;
+
int upper;
int page_size;
if (pixelsPerLine > 0 && winSize > 0 && winSize < virtSize)
GtkAdjustment* adj = range->adjustment;
adj->step_increment = 1;
- adj->page_increment =
+ adj->page_increment =
adj->page_size = page_size;
gtk_range_set_range(range, 0, upper);
void wxScrollHelper::DoScroll( int x_pos, int y_pos )
{
- wxCHECK_RET( m_targetWindow != 0, _T("No target window") );
+ wxCHECK_RET( m_targetWindow != 0, wxT("No target window") );
DoScrollOneDir(wxHORIZONTAL, x_pos, m_xScrollPixelsPerLine, &m_xScrollPosition);
DoScrollOneDir(wxVERTICAL, y_pos, m_yScrollPixelsPerLine, &m_yScrollPosition);
policy = GTK_POLICY_AUTOMATIC;
break;
+ default:
+ wxFAIL_MSG( wxS("unknown scrollbar visibility") );
+ // fall through
+
case wxSHOW_SB_ALWAYS:
policy = GTK_POLICY_ALWAYS;
break;
GtkPolicyFromWX(horz),
GtkPolicyFromWX(vert));
}
-