You've already forked android_translation_layer
mirror of
https://gitlab.com/android_translation_layer/android_translation_layer.git
synced 2025-10-27 11:48:10 -07:00
WrapperWidget: handle View.computeScroll()
Currently the scrolling is purely visual.
This commit is contained in:
@@ -48,10 +48,25 @@ void skia_draw_func(SKArea *sk_area, sk_canvas_t *canvas, void *user_data)
|
||||
(*env)->ExceptionDescribe(env);
|
||||
}
|
||||
|
||||
/*void wrapper_snapshot(GtkWidget* widget, GtkSnapshot* snapshot)
|
||||
void wrapper_snapshot(GtkWidget* widget, GtkSnapshot* snapshot)
|
||||
{
|
||||
gtk_widget_snapshot_child(widget, gtk_widget_get_first_child(widget), snapshot);
|
||||
}*/
|
||||
WrapperWidget *wrapper = WRAPPER_WIDGET(widget);
|
||||
if (wrapper->computeScroll_method) {
|
||||
JNIEnv *env;
|
||||
(*wrapper->jvm)->GetEnv(wrapper->jvm, (void**)&env, JNI_VERSION_1_6);
|
||||
(*env)->CallVoidMethod(env, wrapper->jobj, wrapper->computeScroll_method);
|
||||
if((*env)->ExceptionCheck(env))
|
||||
(*env)->ExceptionDescribe(env);
|
||||
graphene_point_t translation = {
|
||||
.x = -(*env)->CallIntMethod(env, wrapper->jobj, handle_cache.view.getScrollX),
|
||||
.y = -(*env)->CallIntMethod(env, wrapper->jobj, handle_cache.view.getScrollY),
|
||||
};
|
||||
gtk_snapshot_translate(snapshot, &translation);
|
||||
}
|
||||
gtk_widget_snapshot_child(widget, wrapper->child, snapshot);
|
||||
if (wrapper->sk_area)
|
||||
gtk_widget_snapshot_child(widget, wrapper->sk_area, snapshot);
|
||||
}
|
||||
|
||||
|
||||
static void wrapper_widget_class_init(WrapperWidgetClass *class)
|
||||
@@ -61,7 +76,7 @@ static void wrapper_widget_class_init(WrapperWidgetClass *class)
|
||||
|
||||
object_class->dispose = wrapper_widget_dispose;
|
||||
|
||||
// widget_class->snapshot = wrapper_snapshot;
|
||||
widget_class->snapshot = wrapper_snapshot;
|
||||
|
||||
gtk_widget_class_set_layout_manager_type(widget_class, GTK_TYPE_BIN_LAYOUT);
|
||||
}
|
||||
@@ -119,4 +134,9 @@ void wrapper_widget_set_jobject(WrapperWidget *wrapper, JNIEnv *env, jobject job
|
||||
/* use wrapper->child since the jobject may not have the "widget" variable set yet */
|
||||
_setOnTouchListener(env, jobj, wrapper->child, NULL);
|
||||
}
|
||||
|
||||
jmethodID computeScroll_method = _METHOD(_CLASS(jobj), "computeScroll", "()V");
|
||||
if (computeScroll_method != handle_cache.view.computeScroll) {
|
||||
wrapper->computeScroll_method = computeScroll_method;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ struct _WrapperWidget
|
||||
jobject canvas;
|
||||
jmethodID draw_method;
|
||||
jmethodID measure_method;
|
||||
jmethodID computeScroll_method;
|
||||
};
|
||||
|
||||
struct _WrapperWidgetClass
|
||||
|
||||
@@ -1195,6 +1195,8 @@ public class View extends Object {
|
||||
measure(width | MeasureSpec.EXACTLY, height | MeasureSpec.EXACTLY);
|
||||
}
|
||||
boolean changed = oldWidth != width || oldHeight != height;
|
||||
if (changed)
|
||||
onSizeChanged(width, height, oldWidth, oldHeight);
|
||||
onLayout(changed, 0, 0, width, height);
|
||||
oldWidth = width;
|
||||
oldHeight = height;
|
||||
@@ -1526,4 +1528,6 @@ public class View extends Object {
|
||||
public void setLayerType(int layerType, Paint paint) {}
|
||||
|
||||
public float getZ() {return 0.f;}
|
||||
|
||||
protected void onSizeChanged(int w, int h, int oldw, int oldh) {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user