| 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 |