Files
android_translation_layer/src/api-impl-jni/widgets/WrapperWidget.h
Julian Winkler f82af6ecb7 allocate transparent {WrapperWidget / JavaWidget} 0x0 and draw children in overflow area
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.
2024-05-11 07:07:24 +02:00

43 lines
1.1 KiB
C

#ifndef WRAPPER_WIDGET_H
#define WRAPPER_WIDGET_H
#include <jni.h>
#include <gtk/gtk.h>
G_DECLARE_FINAL_TYPE (WrapperWidget, wrapper_widget, WRAPPER, WIDGET, GtkWidget)
struct _WrapperWidget
{
GtkWidget parent_instance;
GtkWidget *child;
GtkWidget *sk_area;
GtkWidget *background;
JavaVM *jvm;
jobject jobj;
jobject canvas;
jmethodID draw_method;
jmethodID measure_method;
jmethodID computeScroll_method;
int layout_width;
int layout_height;
int real_width;
int real_height;
gboolean needs_allocation;
};
struct _WrapperWidgetClass
{
GtkWidgetClass parent_class;
};
GtkWidget * wrapper_widget_new(void);
void wrapper_widget_set_child(WrapperWidget *parent, GtkWidget *child);
void wrapper_widget_set_jobject(WrapperWidget *wrapper, JNIEnv *env, jobject jobj);
void wrapper_widget_queue_draw(WrapperWidget *wrapper);
void wrapper_widget_set_layout_params(WrapperWidget *wrapper, int width, int height);
void wrapper_widget_set_background(WrapperWidget *wrapper, GdkPaintable *paintable);
void _setOnTouchListener(JNIEnv *env, jobject this, GtkWidget *widget, jobject on_touch_listener);
#endif