]> git.saurik.com Git - wxWidgets.git/commitdiff
let GtkRange clamp scroll position
authorPaul Cornett <paulcor@bullseye.com>
Sat, 15 Sep 2007 02:58:14 +0000 (02:58 +0000)
committerPaul Cornett <paulcor@bullseye.com>
Sat, 15 Sep 2007 02:58:14 +0000 (02:58 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48706 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/gtk/scrolbar.cpp
src/gtk/window.cpp

index dc05a81b0af74e547f3e2440eeb3a6a4fc0c2fea..343e27f8489d17a082ead4525ae07160b60e1d47 100644 (file)
@@ -139,7 +139,7 @@ bool wxScrollBar::Create(wxWindow *parent, wxWindowID id,
     else
         m_widget = gtk_hscrollbar_new( (GtkAdjustment *) NULL );
 
-    m_scrollBar[int(isVertical)] = (GtkRange*)m_widget;
+    m_scrollBar[0] = (GtkRange*)m_widget;
 
     g_signal_connect_after(m_widget, "value_changed",
                      G_CALLBACK(gtk_value_changed), this);
@@ -188,21 +188,11 @@ void wxScrollBar::SetThumbPosition( int viewStart )
 {
     if (GetThumbPosition() != viewStart)
     {
-        GtkAdjustment* adj = ((GtkRange*)m_widget)->adjustment;
-        const int i = (GtkRange*)m_widget == m_scrollBar[1];
-        const int max = int(adj->upper - adj->page_size);
-        if (viewStart > max)
-            viewStart = max;
-        if (viewStart < 0)
-            viewStart = 0;
-
-        m_scrollPos[i] =
-        adj->value = viewStart;
-        
         g_signal_handlers_block_by_func(m_widget,
             (gpointer)gtk_value_changed, this);
 
-        gtk_adjustment_value_changed(adj);
+        gtk_range_set_value((GtkRange*)m_widget, viewStart);
+        m_scrollPos[0] = gtk_range_get_value((GtkRange*)m_widget);
 
         g_signal_handlers_unblock_by_func(m_widget,
             (gpointer)gtk_value_changed, this);
@@ -217,17 +207,15 @@ void wxScrollBar::SetScrollbar(int position, int thumbSize, int range, int pageS
         range =
         thumbSize = 1;
     }
-    if (position > range - thumbSize)
-        position = range - thumbSize;
-    if (position < 0)
-        position = 0;
     GtkAdjustment* adj = ((GtkRange*)m_widget)->adjustment;
     adj->step_increment = 1;
     adj->page_increment = pageSize;
     adj->page_size = thumbSize;
-    adj->upper = range;
-    SetThumbPosition(position);
-    gtk_adjustment_changed(adj);
+    adj->value = position;
+    g_signal_handlers_block_by_func(m_widget, (void*)gtk_value_changed, this);
+    gtk_range_set_range((GtkRange*)m_widget, 0, range);
+    m_scrollPos[0] = adj->value;
+    g_signal_handlers_unblock_by_func(m_widget, (void*)gtk_value_changed, this);
 }
 
 void wxScrollBar::SetPageSize( int pageLength )
index 38223d79fb909b15cef123e4f1a1ad9433346059..8c8cdec0cc976a38fdc5cf9055a4b3a6f782729a 100644 (file)
@@ -4131,7 +4131,8 @@ void wxWindowGTK::SetScrollbar(int orient,
                                int range,
                                bool WXUNUSED(update))
 {
-    GtkRange * const sb = m_scrollBar[ScrollDirFromOrient(orient)];
+    const int dir = ScrollDirFromOrient(orient);
+    GtkRange* const sb = m_scrollBar[dir];
     wxCHECK_RET( sb, _T("this window is not scrollable") );
 
     if (range > 0)
@@ -4145,17 +4146,20 @@ void wxWindowGTK::SetScrollbar(int orient,
         thumbVisible = 1;
     }
 
-    if (pos > range - thumbVisible)
-        pos = range - thumbVisible;
-    if (pos < 0)
-        pos = 0;
     GtkAdjustment * const adj = sb->adjustment;
     adj->step_increment = 1;
     adj->page_increment =
     adj->page_size = thumbVisible;
-    adj->upper = range;
-    SetScrollPos(orient, pos);
-    gtk_adjustment_changed(adj);
+    adj->value = pos;
+
+    g_signal_handlers_block_by_func(
+        sb, (void*)gtk_scrollbar_value_changed, this);
+
+    gtk_range_set_range(sb, 0, range);
+    m_scrollPos[dir] = sb->adjustment->value;
+
+    g_signal_handlers_unblock_by_func(
+        sb, (void*)gtk_scrollbar_value_changed, this);
 }
 
 void wxWindowGTK::SetScrollPos(int orient, int pos, bool WXUNUSED(refresh))
@@ -4168,21 +4172,14 @@ void wxWindowGTK::SetScrollPos(int orient, int pos, bool WXUNUSED(refresh))
     //   will not move smoothly while tracking when using wxScrollHelper.
     if (GetScrollPos(orient) != pos)
     {
-        GtkAdjustment* adj = sb->adjustment;
-        const int max = int(adj->upper - adj->page_size);
-        if (pos > max)
-            pos = max;
-        if (pos < 0)
-            pos = 0;
-        m_scrollPos[dir] = adj->value = pos;
-
-        g_signal_handlers_block_by_func(m_scrollBar[dir],
-            (gpointer)gtk_scrollbar_value_changed, this);
+        g_signal_handlers_block_by_func(
+            sb, (void*)gtk_scrollbar_value_changed, this);
 
-        gtk_adjustment_value_changed(adj);
+        gtk_range_set_value(sb, pos);
+        m_scrollPos[dir] = sb->adjustment->value;
 
-        g_signal_handlers_unblock_by_func(m_scrollBar[dir],
-            (gpointer)gtk_scrollbar_value_changed, this);
+        g_signal_handlers_unblock_by_func(
+            sb, (void*)gtk_scrollbar_value_changed, this);
     }
 }
 
@@ -4272,7 +4269,7 @@ void wxWindowGTK::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) )
 
     // No scrolling requested.
     if ((dx == 0) && (dy == 0)) return;
-    
+
     m_clipPaintRegion = true;
 
     if (GetLayoutDirection() == wxLayout_RightToLeft)