#include "image.h"
#include "container.h"
#include "menu.h"
#include "../common/context.h"
#include "../common/object.h"
UIWIDGET ui_imageviewer_create(UiObject *obj, UiImageViewerArgs args) {
UiObject *current = uic_current_obj(obj);
GtkWidget *scrolledwindow =
SCROLLEDWINDOW_NEW();
#if GTK_CHECK_VERSION(
4,
0,
0)
GtkWidget *image = gtk_picture_new();
#else
GtkWidget *image = gtk_image_new();
#endif
ui_set_name_and_style(image, args.name, args.style_class);
#if GTK_MAJOR_VERSION <
4
GtkWidget *eventbox = gtk_event_box_new();
SCROLLEDWINDOW_SET_CHILD(scrolledwindow, eventbox);
gtk_container_add(
GTK_CONTAINER(eventbox), image);
#else
SCROLLEDWINDOW_SET_CHILD(scrolledwindow, image);
GtkWidget *eventbox = image;
#endif
UI_APPLY_LAYOUT1(current, args);
current->container->add(current->container, scrolledwindow,
TRUE);
UiVar *var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname,
UI_VAR_GENERIC);
if(var) {
UiGeneric *value = var->value;
value->get = ui_imageviewer_get;
value->get_type = ui_imageviewer_get_type;
value->set = ui_imageviewer_set;
value->obj = image;
if(value->value && value->type && !strcmp(value->type,
UI_IMAGE_OBJECT_TYPE)) {
GdkPixbuf *pixbuf = value->value;
value->value =
NULL;
ui_imageviewer_set(value, pixbuf,
UI_IMAGE_OBJECT_TYPE);
}
}
if(args.contextmenu) {
UIMENU menu = ui_contextmenu_create(args.contextmenu, obj, eventbox);
ui_widget_set_contextmenu(eventbox, menu);
}
return scrolledwindow;
}
void* ui_imageviewer_get(UiGeneric *g) {
return g->value;
}
const char* ui_imageviewer_get_type(UiGeneric *g) {
}
int ui_imageviewer_set(UiGeneric *g,
void *value,
const char *type) {
if(!type || strcmp(type,
UI_IMAGE_OBJECT_TYPE)) {
return 1;
}
g->value = value;
g->type = type;
GdkPixbuf *pixbuf = value;
if(pixbuf) {
int width = gdk_pixbuf_get_width(pixbuf);
int height = gdk_pixbuf_get_height(pixbuf);
#if GTK_CHECK_VERSION(
4,
0,
0)
GdkTexture *texture = gdk_texture_new_for_pixbuf(pixbuf);
gtk_picture_set_paintable(
GTK_PICTURE(g->obj),
GDK_PAINTABLE(texture));
#else
gtk_image_set_from_pixbuf(
GTK_IMAGE(g->obj), pixbuf);
#endif
gtk_widget_set_size_request(g->obj, width, height);
}
return 0;
}
int ui_image_load_file(UiGeneric *obj,
const char *path) {
GError *error =
NULL;
GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(path, &error);
if(!pixbuf) {
return 1;
}
if(obj->set) {
obj->set(obj, pixbuf,
UI_IMAGE_OBJECT_TYPE);
}
else {
obj->value = pixbuf;
}
return 0;
}