ui/gtk/image.c

changeset 108
77254bd6dccb
parent 103
6606616eca9f
child 112
c3f2f16fa4b8
equal deleted inserted replaced
107:b34bd1557c6c 108:77254bd6dccb
61 return FALSE; 61 return FALSE;
62 } 62 }
63 63
64 #endif 64 #endif
65 65
66 UIWIDGET ui_imageviewer_create(UiObject *obj, UiImageViewerArgs args) { 66 UIWIDGET ui_imageviewer_create(UiObject *obj, UiImageViewerArgs *args) {
67 UiObject *current = uic_current_obj(obj); 67 UiObject *current = uic_current_obj(obj);
68 68
69 GtkWidget *drawingarea = gtk_drawing_area_new(); 69 GtkWidget *drawingarea = gtk_drawing_area_new();
70 GtkWidget *toplevel; 70 GtkWidget *toplevel;
71 GtkWidget *widget = drawingarea; 71 GtkWidget *widget = drawingarea;
76 GtkWidget *eventbox = gtk_event_box_new(); 76 GtkWidget *eventbox = gtk_event_box_new();
77 gtk_container_add(GTK_CONTAINER(eventbox), drawingarea); 77 gtk_container_add(GTK_CONTAINER(eventbox), drawingarea);
78 widget = eventbox; 78 widget = eventbox;
79 #endif 79 #endif
80 80
81 if(args.scrollarea) { 81 if(args->scrollarea) {
82 toplevel = SCROLLEDWINDOW_NEW(); 82 toplevel = SCROLLEDWINDOW_NEW();
83 SCROLLEDWINDOW_SET_CHILD(toplevel, widget); 83 SCROLLEDWINDOW_SET_CHILD(toplevel, widget);
84 args.adjustwidgetsize = TRUE; 84 args->adjustwidgetsize = TRUE;
85 } else { 85 } else {
86 toplevel = widget; 86 toplevel = widget;
87 } 87 }
88 88
89 UiImageViewer *imgviewer = malloc(sizeof(UiImageViewer)); 89 UiImageViewer *imgviewer = malloc(sizeof(UiImageViewer));
90 memset(imgviewer, 0, sizeof(UiImageViewer)); 90 memset(imgviewer, 0, sizeof(UiImageViewer));
91 imgviewer->obj = obj; 91 imgviewer->obj = obj;
92 imgviewer->onbuttonpress = args.onbuttonpress; 92 imgviewer->onbuttonpress = args->onbuttonpress;
93 imgviewer->onbuttonpressdata = args.onbuttonpressdata; 93 imgviewer->onbuttonpressdata = args->onbuttonpressdata;
94 imgviewer->onbuttonrelease = args.onbuttonrelease; 94 imgviewer->onbuttonrelease = args->onbuttonrelease;
95 imgviewer->onbuttonreleasedata = args.onbuttonreleasedata; 95 imgviewer->onbuttonreleasedata = args->onbuttonreleasedata;
96 if(args.image_padding > 0) { 96 if(args->image_padding > 0) {
97 imgviewer->padding_left = args.image_padding; 97 imgviewer->padding_left = args->image_padding;
98 imgviewer->padding_right = args.image_padding; 98 imgviewer->padding_right = args->image_padding;
99 imgviewer->padding_top = args.image_padding; 99 imgviewer->padding_top = args->image_padding;
100 imgviewer->padding_bottom = args.image_padding; 100 imgviewer->padding_bottom = args->image_padding;
101 } else { 101 } else {
102 imgviewer->padding_left = args.image_padding_left; 102 imgviewer->padding_left = args->image_padding_left;
103 imgviewer->padding_right = args.image_padding_right; 103 imgviewer->padding_right = args->image_padding_right;
104 imgviewer->padding_top = args.image_padding_top; 104 imgviewer->padding_top = args->image_padding_top;
105 imgviewer->padding_bottom = args.image_padding_bottom; 105 imgviewer->padding_bottom = args->image_padding_bottom;
106 } 106 }
107 imgviewer->adjustwidgetsize = args.adjustwidgetsize; 107 imgviewer->adjustwidgetsize = args->adjustwidgetsize;
108 imgviewer->autoscale = args.autoscale; 108 imgviewer->autoscale = args->autoscale;
109 imgviewer->useradjustable = args.useradjustable; 109 imgviewer->useradjustable = args->useradjustable;
110 imgviewer->zoom_scale = 20; 110 imgviewer->zoom_scale = 20;
111 111
112 g_object_set_data_full(G_OBJECT(drawingarea), "uiimageviewer", imgviewer, (GDestroyNotify)imageviewer_destroy); 112 g_object_set_data_full(G_OBJECT(drawingarea), "uiimageviewer", imgviewer, (GDestroyNotify)imageviewer_destroy);
113 113
114 UiVar *var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_GENERIC); 114 UiVar *var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_GENERIC);
115 imgviewer->var = var; 115 imgviewer->var = var;
116 imgviewer->widget = drawingarea; 116 imgviewer->widget = drawingarea;
117 117
118 if(var) { 118 if(var) {
119 UiGeneric *value = var->value; 119 UiGeneric *value = var->value;
134 GTK_DRAWING_AREA(drawingarea), 134 GTK_DRAWING_AREA(drawingarea),
135 imageviewer_draw, 135 imageviewer_draw,
136 imgviewer, 136 imgviewer,
137 NULL); 137 NULL);
138 138
139 if(args.useradjustable) { 139 if(args->useradjustable) {
140 gtk_widget_set_focusable(drawingarea, TRUE); 140 gtk_widget_set_focusable(drawingarea, TRUE);
141 } 141 }
142 142
143 GtkEventController *scrollcontroller = gtk_event_controller_scroll_new(GTK_EVENT_CONTROLLER_SCROLL_VERTICAL); 143 GtkEventController *scrollcontroller = gtk_event_controller_scroll_new(GTK_EVENT_CONTROLLER_SCROLL_VERTICAL);
144 g_signal_connect(scrollcontroller, "scroll", G_CALLBACK(ui_imageviewer_scroll), imgviewer); 144 g_signal_connect(scrollcontroller, "scroll", G_CALLBACK(ui_imageviewer_scroll), imgviewer);
180 G_CALLBACK(ui_imageviewer_button_release_event), 180 G_CALLBACK(ui_imageviewer_button_release_event),
181 imgviewer); 181 imgviewer);
182 182
183 #endif 183 #endif
184 184
185 if(args.contextmenu) { 185 if(args->contextmenu) {
186 UIMENU menu = ui_contextmenu_create(args.contextmenu, obj, widget); 186 UIMENU menu = ui_contextmenu_create(args->contextmenu, obj, widget);
187 ui_widget_set_contextmenu(widget, menu); 187 ui_widget_set_contextmenu(widget, menu);
188 } 188 }
189 189
190 UI_APPLY_LAYOUT1(current, args); 190 UI_APPLY_LAYOUT2(current, args);
191 current->container->add(current->container, toplevel, TRUE); 191 current->container->add(current->container, toplevel);
192 192
193 return toplevel; 193 return toplevel;
194 } 194 }
195 195
196 static void imageviewer_reset(UiImageViewer *imgviewer) { 196 static void imageviewer_reset(UiImageViewer *imgviewer) {
334 if(obj->set) { 334 if(obj->set) {
335 obj->set(obj, pixbuf, UI_IMAGE_OBJECT_TYPE); 335 obj->set(obj, pixbuf, UI_IMAGE_OBJECT_TYPE);
336 g_object_unref(pixbuf); 336 g_object_unref(pixbuf);
337 } else { 337 } else {
338 obj->value = pixbuf; 338 obj->value = pixbuf;
339 obj->type = UI_IMAGE_OBJECT_TYPE;
340 }
341
342 return 0;
343 }
344
345 UIEXPORT int ui_image_load_data(UiGeneric *obj, const void *imgdata, size_t size) {
346 GBytes *bytes = g_bytes_new_static(imgdata, size);
347 GInputStream *in = g_memory_input_stream_new_from_bytes(bytes);
348 GError *error = NULL;
349 GdkPixbuf *pixbuf = gdk_pixbuf_new_from_stream(in, NULL, &error);
350 g_object_unref(in);
351 if(!pixbuf) {
352 return 1;
353 }
354
355 if(obj->set) {
356 obj->set(obj, pixbuf, UI_IMAGE_OBJECT_TYPE);
357 g_object_unref(pixbuf);
358 } else {
359 obj->value = pixbuf;
360 obj->type = UI_IMAGE_OBJECT_TYPE;
339 } 361 }
340 362
341 return 0; 363 return 0;
342 } 364 }
343 365
414 UiEvent event; 436 UiEvent event;
415 event.obj = imgviewer->obj; 437 event.obj = imgviewer->obj;
416 event.window = event.obj->window; 438 event.window = event.obj->window;
417 event.document = event.obj->ctx->document; 439 event.document = event.obj->ctx->document;
418 event.eventdata = NULL; 440 event.eventdata = NULL;
441 event.eventdatatype = 0;
419 event.intval = gtk_gesture_single_get_current_button(GTK_GESTURE_SINGLE(gesture)); 442 event.intval = gtk_gesture_single_get_current_button(GTK_GESTURE_SINGLE(gesture));
420 event.set = 0; 443 event.set = 0;
421 callback(&event, userdata); 444 callback(&event, userdata);
422 } 445 }
423 446

mercurial