|
|
|
@ -24,6 +24,8 @@ namespace Avalonia.Gtk3 |
|
|
|
Connect<Native.D.signal_onevent>("configure-event", OnConfigured); |
|
|
|
Connect<Native.D.signal_onevent>("button-press-event", OnButton); |
|
|
|
Connect<Native.D.signal_onevent>("button-release-event", OnButton); |
|
|
|
Connect<Native.D.signal_onevent>("motion-notify-event", OnMotion); |
|
|
|
Connect<Native.D.signal_onevent>("scroll-event", OnScroll); |
|
|
|
} |
|
|
|
|
|
|
|
private Size _lastSize; |
|
|
|
@ -85,6 +87,43 @@ namespace Avalonia.Gtk3 |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
private unsafe bool OnMotion(IntPtr w, IntPtr ev, IntPtr userdata) |
|
|
|
{ |
|
|
|
var evnt = (GdkEventMotion*)ev; |
|
|
|
var position = new Point(evnt->x, evnt->y); |
|
|
|
|
|
|
|
|
|
|
|
var e = new RawMouseEventArgs( |
|
|
|
Gtk3Platform.Mouse, |
|
|
|
evnt->time, |
|
|
|
_inputRoot, |
|
|
|
RawMouseEventType.Move, |
|
|
|
position, GetModifierKeys(evnt->state)); |
|
|
|
Input(e); |
|
|
|
return false; |
|
|
|
} |
|
|
|
private unsafe bool OnScroll(IntPtr w, IntPtr ev, IntPtr userdata) |
|
|
|
{ |
|
|
|
var evnt = (GdkEventScroll*)ev; |
|
|
|
var delta = new Vector(); |
|
|
|
var step = (double) 1; |
|
|
|
if (evnt->direction == GdkScrollDirection.Down) |
|
|
|
delta = new Vector(0, -step); |
|
|
|
else if (evnt->direction == GdkScrollDirection.Up) |
|
|
|
delta = new Vector(0, step); |
|
|
|
else if (evnt->direction == GdkScrollDirection.Right) |
|
|
|
delta = new Vector(-step, 0); |
|
|
|
else if (evnt->direction == GdkScrollDirection.Left) |
|
|
|
delta = new Vector(step, 0); |
|
|
|
else if (evnt->direction == GdkScrollDirection.Smooth) |
|
|
|
delta = new Vector(evnt->delta_x, evnt->delta_y); |
|
|
|
|
|
|
|
var e = new RawMouseWheelEventArgs(Gtk3Platform.Mouse, evnt->time, _inputRoot, |
|
|
|
new Point(evnt->x, evnt->y), delta, GetModifierKeys(evnt->state)); |
|
|
|
Input(e); |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
void Connect<T>(string name, T handler) => _disposables.Add(Signal.Connect<T>(GtkWidget, name, handler)); |
|
|
|
|
|
|
|
private bool OnDraw(IntPtr gtkwidget, IntPtr cairocontext, IntPtr userdata) |
|
|
|
|