Browse Source

Ignore duplicated scroll events

pull/875/head
Nikita Tsukanov 9 years ago
parent
commit
3b3633ad26
  1. 7
      src/Gtk/Avalonia.Gtk3/TopLevelImpl.cs

7
src/Gtk/Avalonia.Gtk3/TopLevelImpl.cs

@ -22,6 +22,7 @@ namespace Avalonia.Gtk3
private Size _lastSize; private Size _lastSize;
private Point _lastPosition; private Point _lastPosition;
private uint _lastKbdEvent; private uint _lastKbdEvent;
private uint _lastSmoothScrollEvent;
public TopLevelImpl(GtkWindow gtkWidget) public TopLevelImpl(GtkWindow gtkWidget)
{ {
@ -145,6 +146,11 @@ namespace Avalonia.Gtk3
private unsafe bool OnScroll(IntPtr w, IntPtr ev, IntPtr userdata) private unsafe bool OnScroll(IntPtr w, IntPtr ev, IntPtr userdata)
{ {
var evnt = (GdkEventScroll*)ev; var evnt = (GdkEventScroll*)ev;
//Ignore duplicates
if (evnt->time - _lastSmoothScrollEvent < 10 && evnt->direction != GdkScrollDirection.Smooth)
return true;
var delta = new Vector(); var delta = new Vector();
const double step = (double) 1; const double step = (double) 1;
if (evnt->direction == GdkScrollDirection.Down) if (evnt->direction == GdkScrollDirection.Down)
@ -158,6 +164,7 @@ namespace Avalonia.Gtk3
else if (evnt->direction == GdkScrollDirection.Smooth) else if (evnt->direction == GdkScrollDirection.Smooth)
{ {
delta = new Vector(-evnt->delta_x, -evnt->delta_y); delta = new Vector(-evnt->delta_x, -evnt->delta_y);
_lastSmoothScrollEvent = evnt->time;
} }
var e = new RawMouseWheelEventArgs(Gtk3Platform.Mouse, evnt->time, _inputRoot, var e = new RawMouseWheelEventArgs(Gtk3Platform.Mouse, evnt->time, _inputRoot,
new Point(evnt->x, evnt->y), delta, GetModifierKeys(evnt->state)); new Point(evnt->x, evnt->y), delta, GetModifierKeys(evnt->state));

Loading…
Cancel
Save