let GtkRange clamp scroll position
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48706 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -139,7 +139,7 @@ bool wxScrollBar::Create(wxWindow *parent, wxWindowID id,
|
|||||||
else
|
else
|
||||||
m_widget = gtk_hscrollbar_new( (GtkAdjustment *) NULL );
|
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_signal_connect_after(m_widget, "value_changed",
|
||||||
G_CALLBACK(gtk_value_changed), this);
|
G_CALLBACK(gtk_value_changed), this);
|
||||||
@@ -188,21 +188,11 @@ void wxScrollBar::SetThumbPosition( int viewStart )
|
|||||||
{
|
{
|
||||||
if (GetThumbPosition() != 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,
|
g_signal_handlers_block_by_func(m_widget,
|
||||||
(gpointer)gtk_value_changed, this);
|
(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,
|
g_signal_handlers_unblock_by_func(m_widget,
|
||||||
(gpointer)gtk_value_changed, this);
|
(gpointer)gtk_value_changed, this);
|
||||||
@@ -217,17 +207,15 @@ void wxScrollBar::SetScrollbar(int position, int thumbSize, int range, int pageS
|
|||||||
range =
|
range =
|
||||||
thumbSize = 1;
|
thumbSize = 1;
|
||||||
}
|
}
|
||||||
if (position > range - thumbSize)
|
|
||||||
position = range - thumbSize;
|
|
||||||
if (position < 0)
|
|
||||||
position = 0;
|
|
||||||
GtkAdjustment* adj = ((GtkRange*)m_widget)->adjustment;
|
GtkAdjustment* adj = ((GtkRange*)m_widget)->adjustment;
|
||||||
adj->step_increment = 1;
|
adj->step_increment = 1;
|
||||||
adj->page_increment = pageSize;
|
adj->page_increment = pageSize;
|
||||||
adj->page_size = thumbSize;
|
adj->page_size = thumbSize;
|
||||||
adj->upper = range;
|
adj->value = position;
|
||||||
SetThumbPosition(position);
|
g_signal_handlers_block_by_func(m_widget, (void*)gtk_value_changed, this);
|
||||||
gtk_adjustment_changed(adj);
|
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 )
|
void wxScrollBar::SetPageSize( int pageLength )
|
||||||
|
@@ -4131,7 +4131,8 @@ void wxWindowGTK::SetScrollbar(int orient,
|
|||||||
int range,
|
int range,
|
||||||
bool WXUNUSED(update))
|
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") );
|
wxCHECK_RET( sb, _T("this window is not scrollable") );
|
||||||
|
|
||||||
if (range > 0)
|
if (range > 0)
|
||||||
@@ -4145,17 +4146,20 @@ void wxWindowGTK::SetScrollbar(int orient,
|
|||||||
thumbVisible = 1;
|
thumbVisible = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pos > range - thumbVisible)
|
|
||||||
pos = range - thumbVisible;
|
|
||||||
if (pos < 0)
|
|
||||||
pos = 0;
|
|
||||||
GtkAdjustment * const adj = sb->adjustment;
|
GtkAdjustment * const adj = sb->adjustment;
|
||||||
adj->step_increment = 1;
|
adj->step_increment = 1;
|
||||||
adj->page_increment =
|
adj->page_increment =
|
||||||
adj->page_size = thumbVisible;
|
adj->page_size = thumbVisible;
|
||||||
adj->upper = range;
|
adj->value = pos;
|
||||||
SetScrollPos(orient, pos);
|
|
||||||
gtk_adjustment_changed(adj);
|
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))
|
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.
|
// will not move smoothly while tracking when using wxScrollHelper.
|
||||||
if (GetScrollPos(orient) != pos)
|
if (GetScrollPos(orient) != pos)
|
||||||
{
|
{
|
||||||
GtkAdjustment* adj = sb->adjustment;
|
g_signal_handlers_block_by_func(
|
||||||
const int max = int(adj->upper - adj->page_size);
|
sb, (void*)gtk_scrollbar_value_changed, this);
|
||||||
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],
|
gtk_range_set_value(sb, pos);
|
||||||
(gpointer)gtk_scrollbar_value_changed, this);
|
m_scrollPos[dir] = sb->adjustment->value;
|
||||||
|
|
||||||
gtk_adjustment_value_changed(adj);
|
g_signal_handlers_unblock_by_func(
|
||||||
|
sb, (void*)gtk_scrollbar_value_changed, this);
|
||||||
g_signal_handlers_unblock_by_func(m_scrollBar[dir],
|
|
||||||
(gpointer)gtk_scrollbar_value_changed, this);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4272,7 +4269,7 @@ void wxWindowGTK::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) )
|
|||||||
|
|
||||||
// No scrolling requested.
|
// No scrolling requested.
|
||||||
if ((dx == 0) && (dy == 0)) return;
|
if ((dx == 0) && (dy == 0)) return;
|
||||||
|
|
||||||
m_clipPaintRegion = true;
|
m_clipPaintRegion = true;
|
||||||
|
|
||||||
if (GetLayoutDirection() == wxLayout_RightToLeft)
|
if (GetLayoutDirection() == wxLayout_RightToLeft)
|
||||||
|
Reference in New Issue
Block a user