move performClick implementation to WrapperWidget

This commit is contained in:
Julian Winkler
2024-02-09 10:05:22 +01:00
parent 4ab7daa033
commit 6eeb6b0232
2 changed files with 20 additions and 15 deletions

View File

@@ -139,6 +139,17 @@ void wrapper_widget_queue_draw(WrapperWidget *wrapper)
gtk_widget_queue_allocate(GTK_WIDGET(wrapper));
}
static bool on_click(GtkGestureClick *gesture, int n_press, double x, double y, jobject this)
{
JNIEnv *env = get_jni_env();
bool ret = (*env)->CallBooleanMethod(env, this, handle_cache.view.performClick);
if((*env)->ExceptionCheck(env))
(*env)->ExceptionDescribe(env);
return ret;
}
void wrapper_widget_set_jobject(WrapperWidget *wrapper, JNIEnv *env, jobject jobj)
{
JavaVM *jvm;
@@ -167,6 +178,14 @@ void wrapper_widget_set_jobject(WrapperWidget *wrapper, JNIEnv *env, jobject job
if (computeScroll_method != handle_cache.view.computeScroll) {
wrapper->computeScroll_method = computeScroll_method;
}
jmethodID performClick_method = _METHOD(_CLASS(jobj), "performClick", "()Z");
if (performClick_method != handle_cache.view.performClick) {
GtkEventController *controller = GTK_EVENT_CONTROLLER(gtk_gesture_click_new());
g_signal_connect(controller, "released", G_CALLBACK(on_click), _REF(jobj));
gtk_widget_add_controller(wrapper->child, controller);
}
}
void wrapper_widget_set_layout_params(WrapperWidget *wrapper, int width, int height)

View File

@@ -8,15 +8,6 @@
#include "../generated_headers/android_widget_LinearLayout.h"
#include "../generated_headers/android_view_ViewGroup.h"
static void on_click(GtkGestureClick *gesture, int n_press, double x, double y, jobject this)
{
JNIEnv *env = get_jni_env();
(*env)->CallBooleanMethod(env, this, handle_cache.view.performClick);
if((*env)->ExceptionCheck(env))
(*env)->ExceptionDescribe(env);
}
JNIEXPORT jlong JNICALL Java_android_widget_LinearLayout_native_1constructor(JNIEnv *env, jobject this, jobject context, jobject attrs)
{
int orientation = attribute_set_get_int(env, attrs, "orientation", NULL, 0);
@@ -25,17 +16,12 @@ JNIEXPORT jlong JNICALL Java_android_widget_LinearLayout_native_1constructor(JNI
GtkWidget *box = gtk_box_new(orientation ? GTK_ORIENTATION_VERTICAL : GTK_ORIENTATION_HORIZONTAL, 0); // spacing of 0
gtk_box_set_homogeneous(GTK_BOX(box), TRUE);
wrapper_widget_set_child(WRAPPER_WIDGET(wrapper), box);
wrapper_widget_set_jobject(WRAPPER_WIDGET(wrapper), env, this);
gtk_widget_set_name(GTK_WIDGET(box), "LinearLayout");
if (!attrs) {
gtk_widget_set_hexpand_set(box, true); // FIXME: to counteract expand on drawing areas
gtk_widget_set_vexpand_set(box, true); // XXX
}
if (_METHOD(_CLASS(this), "performClick", "()Z") != handle_cache.view.performClick) {
GtkEventController *controller = GTK_EVENT_CONTROLLER(gtk_gesture_click_new());
g_signal_connect(controller, "released", G_CALLBACK(on_click), _REF(this));
gtk_widget_add_controller(box, controller);
}
return _INTPTR(box);
// struct ninepatch_t *ninepatch = ninepatch_new("/home/Mis012/Github_and_other_sources/org.happysanta.gd_29_src.tar.gz/res/drawable-mdpi/btn_br_down.9.png");