X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d9bd1494562dc6166fbaab77306ec0b999df16c8..6ef85b1b2ce940b78c92e174e5df040235943c62:/src/gtk/scrolbar.cpp diff --git a/src/gtk/scrolbar.cpp b/src/gtk/scrolbar.cpp index 890112cdbd..b7d24b3460 100644 --- a/src/gtk/scrolbar.cpp +++ b/src/gtk/scrolbar.cpp @@ -17,10 +17,11 @@ #if wxUSE_SCROLLBAR #include "wx/utils.h" + #include -#include "gdk/gdk.h" -#include "gtk/gtk.h" +#include +#include //----------------------------------------------------------------------------- // idle system @@ -36,42 +37,33 @@ extern bool g_isIdle; extern bool g_blockEventsOnDrag; extern bool g_blockEventsOnScroll; +static const float sensitivity = 0.02; + //----------------------------------------------------------------------------- // "value_changed" //----------------------------------------------------------------------------- -static void gtk_scrollbar_callback( GtkWidget *WXUNUSED(widget), wxScrollBar *win ) +static void gtk_scrollbar_callback( GtkAdjustment *adjust, wxScrollBar *win ) { if (g_isIdle) wxapp_install_idle_handler(); if (!win->m_hasVMT) return; if (g_blockEventsOnDrag) return; - float diff = win->m_adjust->value - win->m_oldPos; - if (fabs(diff) < 0.2) return; - win->m_oldPos = win->m_adjust->value; - - wxEventType command = wxEVT_NULL; - - float line_step = win->m_adjust->step_increment; - float page_step = win->m_adjust->page_increment; - - if (win->IsScrolling()) - { - command = wxEVT_SCROLL_THUMBTRACK; - } - else - { - if (fabs(win->m_adjust->value-win->m_adjust->lower) < 0.2) command = wxEVT_SCROLL_BOTTOM; - else if (fabs(win->m_adjust->value-win->m_adjust->upper) < 0.2) command = wxEVT_SCROLL_TOP; - else if (fabs(diff-line_step) < 0.2) command = wxEVT_SCROLL_LINEDOWN; - else if (fabs(diff+line_step) < 0.2) command = wxEVT_SCROLL_LINEUP; - else if (fabs(diff-page_step) < 0.2) command = wxEVT_SCROLL_PAGEDOWN; - else if (fabs(diff+page_step) < 0.2) command = wxEVT_SCROLL_PAGEUP; - else command = wxEVT_SCROLL_THUMBTRACK; - } + float diff = adjust->value - win->m_oldPos; + if (fabs(diff) < sensitivity) return; + + win->m_oldPos = adjust->value; + + GtkRange *range = GTK_RANGE( win->m_widget ); - int value = (int)(win->m_adjust->value+0.5); + wxEventType command = wxEVT_SCROLL_THUMBTRACK; + if (range->scroll_type == GTK_SCROLL_STEP_BACKWARD) command = wxEVT_SCROLL_LINEUP; + else if (range->scroll_type == GTK_SCROLL_STEP_FORWARD) command = wxEVT_SCROLL_LINEDOWN; + else if (range->scroll_type == GTK_SCROLL_PAGE_BACKWARD) command = wxEVT_SCROLL_PAGEUP; + else if (range->scroll_type == GTK_SCROLL_PAGE_FORWARD) command = wxEVT_SCROLL_PAGEDOWN; + + int value = (int)ceil(adjust->value); int orient = win->HasFlag(wxSB_VERTICAL) ? wxVERTICAL : wxHORIZONTAL; @@ -96,7 +88,7 @@ static gint gtk_scrollbar_button_press_callback( GtkRange *WXUNUSED(widget), { if (g_isIdle) wxapp_install_idle_handler(); - win->SetScrolling(TRUE); + win->m_isScrolling = TRUE; // g_blockEventsOnScroll = TRUE; doesn't work in DialogEd return FALSE; @@ -112,7 +104,7 @@ static gint gtk_scrollbar_button_release_callback( GtkRange *WXUNUSED(widget), { if (g_isIdle) wxapp_install_idle_handler(); - win->SetScrolling(FALSE); + win->m_isScrolling = FALSE; // g_blockEventsOnScroll = FALSE; gtk_signal_emit_by_name( GTK_OBJECT(win->m_adjust), "value_changed" ); @@ -140,7 +132,7 @@ bool wxScrollBar::Create(wxWindow *parent, wxWindowID id, if (!PreCreation( parent, pos, size ) || !CreateBase( parent, id, pos, size, style, validator, name )) { - wxFAIL_MSG( _T("wxScrollBar creation failed") ); + wxFAIL_MSG( wxT("wxScrollBar creation failed") ); return FALSE; }