2022-10-02 23:06:56 +02:00
|
|
|
#include <gtk/gtk.h>
|
|
|
|
|
|
|
|
|
|
#include "../defines.h"
|
|
|
|
|
#include "../util.h"
|
|
|
|
|
|
|
|
|
|
#include "WrapperWidget.h"
|
|
|
|
|
|
|
|
|
|
#include "../generated_headers/android_widget_ImageView.h"
|
|
|
|
|
|
2024-04-10 23:48:07 +02:00
|
|
|
#define SCALE_TYPE_MATRIX 0
|
|
|
|
|
#define SCALE_TYPE_FIT_XY 1
|
|
|
|
|
#define SCALE_TYPE_FIT_START 2
|
|
|
|
|
#define SCALE_TYPE_FIT_CENTER 3
|
|
|
|
|
#define SCALE_TYPE_FIT_END 4
|
|
|
|
|
#define SCALE_TYPE_CENTER 5
|
|
|
|
|
#define SCALE_TYPE_CENTER_CROP 6
|
|
|
|
|
#define SCALE_TYPE_CENTER_INSIDE 7
|
|
|
|
|
|
2023-08-17 12:59:37 +02:00
|
|
|
JNIEXPORT jlong JNICALL Java_android_widget_ImageView_native_1constructor(JNIEnv *env, jobject this, jobject context, jobject attrs)
|
2022-10-02 23:06:56 +02:00
|
|
|
{
|
2023-08-22 13:49:09 +02:00
|
|
|
GtkWidget *wrapper = g_object_ref(wrapper_widget_new());
|
2024-04-03 01:48:49 +02:00
|
|
|
GtkWidget *image = gtk_picture_new();
|
2022-10-02 23:06:56 +02:00
|
|
|
wrapper_widget_set_child(WRAPPER_WIDGET(wrapper), image);
|
2023-07-14 17:53:12 +02:00
|
|
|
wrapper_widget_set_jobject(WRAPPER_WIDGET(wrapper), env, this);
|
2023-08-17 12:59:37 +02:00
|
|
|
return _INTPTR(image);
|
2022-10-02 23:06:56 +02:00
|
|
|
}
|
|
|
|
|
|
2024-04-20 00:08:09 +02:00
|
|
|
JNIEXPORT void JNICALL Java_android_widget_ImageView_native_1setPixbuf(JNIEnv *env, jobject this, jlong widget_ptr, jlong pixbuf_ptr)
|
2023-06-18 10:57:19 +02:00
|
|
|
{
|
2024-04-20 00:08:09 +02:00
|
|
|
GdkPaintable *paintable = GDK_PAINTABLE(gdk_texture_new_for_pixbuf(_PTR(pixbuf_ptr)));
|
|
|
|
|
Java_android_widget_ImageView_native_1setDrawable(env, this, widget_ptr, _INTPTR(paintable));
|
2023-06-18 10:57:19 +02:00
|
|
|
}
|
2023-12-30 23:35:33 +01:00
|
|
|
|
|
|
|
|
JNIEXPORT void JNICALL Java_android_widget_ImageView_native_1setDrawable(JNIEnv *env, jobject this, jlong widget_ptr, jlong paintable_ptr)
|
|
|
|
|
{
|
|
|
|
|
GtkPicture *picture = _PTR(widget_ptr);
|
|
|
|
|
GdkPaintable *paintable = _PTR(paintable_ptr);
|
|
|
|
|
gtk_picture_set_paintable(picture, paintable);
|
|
|
|
|
}
|
2024-04-10 23:48:07 +02:00
|
|
|
|
|
|
|
|
JNIEXPORT void JNICALL Java_android_widget_ImageView_native_1setScaleType(JNIEnv *env, jobject this, jlong widget_ptr, jint scale_type)
|
|
|
|
|
{
|
|
|
|
|
GtkPicture *picture = _PTR(widget_ptr);
|
|
|
|
|
/* TODO: somehow handle all the types */
|
|
|
|
|
switch (scale_type) {
|
|
|
|
|
case SCALE_TYPE_FIT_XY:
|
|
|
|
|
gtk_picture_set_content_fit(picture, GTK_CONTENT_FIT_FILL);
|
|
|
|
|
break;
|
|
|
|
|
case SCALE_TYPE_CENTER:
|
|
|
|
|
/* should probably let it overflow instead */
|
|
|
|
|
gtk_picture_set_content_fit(picture, GTK_CONTENT_FIT_SCALE_DOWN);
|
|
|
|
|
break;
|
|
|
|
|
case SCALE_TYPE_CENTER_CROP:
|
|
|
|
|
gtk_picture_set_content_fit(picture, GTK_CONTENT_FIT_COVER);
|
|
|
|
|
break;
|
|
|
|
|
case SCALE_TYPE_CENTER_INSIDE:
|
|
|
|
|
gtk_picture_set_content_fit(picture, GTK_CONTENT_FIT_CONTAIN);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|