125 lines
3.5 KiB
C
125 lines
3.5 KiB
C
#include "previewwidget.h"
|
|
|
|
|
|
G_DEFINE_TYPE(PreviewWidget, PreviewWidget, GTK_TYPE_BIN)
|
|
|
|
|
|
void kona_download_image( GtkWidget *widget, gpointer data )
|
|
{
|
|
PreviewWidget_set_image(data, "/home/markus/Pictures/ba5431ccdc292f920692d17bdfc2758d.png"); // DEBUG ONLY!
|
|
}
|
|
|
|
void PreviewWidget_set_image(PreviewWidget *widget, gchar *url) {
|
|
int height, width;
|
|
float iheight, iwidth;
|
|
|
|
GdkPixbuf *p, *ps;
|
|
p = gdk_pixbuf_new_from_file(url, NULL);
|
|
iheight = (float) gdk_pixbuf_get_height(p);
|
|
iwidth = (float) gdk_pixbuf_get_width(p);
|
|
if (gdk_pixbuf_get_width(p) < gdk_pixbuf_get_height(p)) {
|
|
height = 150;
|
|
width = iwidth / iheight * 150;
|
|
}
|
|
else {
|
|
width = 200;
|
|
height = iheight / iwidth * 200;
|
|
}
|
|
|
|
ps = gdk_pixbuf_scale_simple(p, width, height, GDK_INTERP_BILINEAR);
|
|
g_object_unref(p);
|
|
gtk_image_set_from_pixbuf(GTK_IMAGE(widget->image), ps);
|
|
|
|
gtk_widget_set_visible(widget->image, TRUE);
|
|
|
|
gtk_widget_set_visible(widget->spinner, FALSE);
|
|
}
|
|
|
|
|
|
|
|
enum {
|
|
PROP_KI=1,
|
|
PROP_COUNT
|
|
};
|
|
static GParamSpec *properties [PROP_COUNT];
|
|
static void preview_widget_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) {
|
|
PreviewWidget *self = (PreviewWidget*)object;
|
|
|
|
switch (prop_id) {
|
|
case PROP_KI:
|
|
g_value_set_pointer(value, self->ki);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
static void preview_widget_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) {
|
|
PreviewWidget *self = (PreviewWidget*)object;
|
|
|
|
switch (prop_id) {
|
|
case PROP_KI:
|
|
self->ki = g_value_get_pointer(value);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
void PreviewWidget_class_init(PreviewWidgetClass *klass)
|
|
{
|
|
GObjectClass *object_class = G_OBJECT_CLASS(klass);
|
|
|
|
object_class->set_property = preview_widget_set_property;
|
|
object_class->get_property = preview_widget_get_property;
|
|
|
|
properties [PROP_KI] =
|
|
g_param_spec_pointer("ki", "ki", "Pointer to corresponding KonaImage struct", G_PARAM_READWRITE);
|
|
|
|
g_object_class_install_properties(object_class, PROP_COUNT, properties);
|
|
}
|
|
|
|
void PreviewWidget_init(PreviewWidget *klass)
|
|
{
|
|
GtkWidget *widget;
|
|
GtkBuilder *builder;
|
|
|
|
builder = gtk_builder_new();
|
|
gtk_builder_add_from_file(builder, "glade/previewWidget.glade", NULL);
|
|
|
|
widget = GTK_WIDGET(gtk_builder_get_object(GTK_BUILDER(builder), "previewWidget"));
|
|
gtk_builder_connect_signals(builder, NULL);
|
|
|
|
gtk_container_add(GTK_CONTAINER(klass), widget);
|
|
|
|
klass->image = GTK_WIDGET(gtk_builder_get_object(builder, "image"));
|
|
klass->button = GTK_WIDGET(gtk_builder_get_object(builder, "button"));
|
|
klass->spinner = GTK_WIDGET(gtk_builder_get_object(builder, "spinner"));
|
|
|
|
g_object_unref(G_OBJECT(builder));
|
|
}
|
|
|
|
GtkWidget *PreviewWidget_new(KonaImage* ki)
|
|
{
|
|
PreviewWidget* w = g_object_new (TYPE_PREVIEWWIDGET, "ki", ki, NULL);
|
|
g_signal_connect(ki, "notify::previewFile", (GCallback)previewImage_update_preview_from_konaImage, w);
|
|
return GTK_WIDGET(w);
|
|
}
|
|
|
|
// TODO: DESTROY etc.
|
|
|
|
void debugfoo(GtkButton *widget, GtkImage *img)
|
|
{
|
|
gtk_image_clear(img);
|
|
|
|
gtk_widget_destroy(GTK_WIDGET(img));
|
|
}
|
|
|
|
|
|
// CALLBACKS FROM KONAIMAGE
|
|
void previewImage_update_preview_from_konaImage( KonaImage *ki, guint propId, PreviewWidget *pv)
|
|
{
|
|
GValue val = G_VALUE_INIT;
|
|
g_value_init(&val, G_TYPE_STRING);
|
|
g_object_get_property(G_OBJECT(ki), "previewFile", &val);
|
|
PreviewWidget_set_image(pv, g_value_get_string(&val));
|
|
}
|