Androids button consumes touch events, while GTKs button lets touch
events propagate to the parent. This previously caused some glitches
with buttons inside a CoordinatorLayout.
Most widgets want to draw something behind the default content.
If we replace SkArea with GskCanvas in the future, we could draw
the default content, when the super.onDraw() gets called.
This prevents overlay widgets from blocking touch events.
Androids ViewGroup.dispatchTouchEvent() loops over all children and only breaks if an eventhandler returns true. Gtk on the other hand stops at the first sensitive child. Even if the eventhandler returned false.
onTouchEvent was previously incorrectly handled in GLSurfaceView; move it
to View so that it works properly with any of it's descendants.
This is done by reusing the existing setOnTouchListener implementation
and changing it to use GtkEventControllerLegacy which provides motion
events.
Technically some of the code is in WrapperWidget.c since every widget
calls wrapper_widget_set_jobject and we already have related code
there.
Using the C API provided by SkiaSharp's skia fork instead of using cairo
significantly improves performance. The API is also closer to the android
Canvas API, which makes the implementation more straightforward.