| 236 if(imgviewer) { |
236 if(imgviewer) { |
| 237 imgviewer->useradjustable = set; |
237 imgviewer->useradjustable = set; |
| 238 } |
238 } |
| 239 } |
239 } |
| 240 |
240 |
| |
241 static void imageviewer_set(UiImageViewer *imgviewer, GdkPixbuf *pixbuf) { |
| |
242 if(imgviewer->pixbuf) { |
| |
243 g_object_unref(imgviewer->pixbuf); |
| |
244 } |
| |
245 |
| |
246 g_object_ref(pixbuf); |
| |
247 imgviewer->pixbuf = pixbuf; |
| |
248 |
| |
249 imageviewer_reset(imgviewer); |
| |
250 if(imgviewer->adjustwidgetsize && !imgviewer->autoscale) { |
| |
251 int width = gdk_pixbuf_get_width(pixbuf); |
| |
252 int height = gdk_pixbuf_get_height(pixbuf); |
| |
253 gtk_widget_set_size_request(imgviewer->widget, width, height); |
| |
254 } |
| |
255 gtk_widget_queue_draw(imgviewer->widget); |
| |
256 } |
| |
257 |
| |
258 void ui_imageviewer_load_file(UIWIDGET w, const char *path) { |
| |
259 UiImageViewer *imgviewer = g_object_get_data(G_OBJECT(w), "uiimageviewer"); |
| |
260 if(imgviewer) { |
| |
261 GError *error = NULL; |
| |
262 GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(path, &error); |
| |
263 if(pixbuf) { |
| |
264 imageviewer_set(imgviewer, pixbuf); |
| |
265 } |
| |
266 } |
| |
267 } |
| |
268 |
| |
269 void ui_imageviewer_load_data(UIWIDGET w, const void *imgdata, size_t size) { |
| |
270 UiImageViewer *imgviewer = g_object_get_data(G_OBJECT(w), "uiimageviewer"); |
| |
271 if(imgviewer) { |
| |
272 GBytes *bytes = g_bytes_new_static(imgdata, size); |
| |
273 GInputStream *in = g_memory_input_stream_new_from_bytes(bytes); |
| |
274 GError *error = NULL; |
| |
275 GdkPixbuf *pixbuf = gdk_pixbuf_new_from_stream(in, NULL, &error); |
| |
276 g_object_unref(in); |
| |
277 if(pixbuf) { |
| |
278 imageviewer_set(imgviewer, pixbuf); |
| |
279 } |
| |
280 } |
| |
281 } |
| |
282 |
| 241 void ui_cairo_draw_image(UiImageViewer *imgviewer, cairo_t *cr, int width, int height) { |
283 void ui_cairo_draw_image(UiImageViewer *imgviewer, cairo_t *cr, int width, int height) { |
| 242 if(!imgviewer->pixbuf) { |
284 if(!imgviewer->pixbuf) { |
| 243 return; |
285 return; |
| 244 } |
286 } |
| 245 |
287 |
| 304 if(!type || strcmp(type, UI_IMAGE_OBJECT_TYPE)) { |
346 if(!type || strcmp(type, UI_IMAGE_OBJECT_TYPE)) { |
| 305 return 1; |
347 return 1; |
| 306 } |
348 } |
| 307 |
349 |
| 308 GdkPixbuf *pixbuf = value; |
350 GdkPixbuf *pixbuf = value; |
| 309 g_object_ref(pixbuf); |
|
| 310 |
|
| 311 UiImageViewer *imgviewer = g->obj; |
351 UiImageViewer *imgviewer = g->obj; |
| 312 g->value = pixbuf; |
352 g->value = pixbuf; |
| 313 |
353 imageviewer_set(imgviewer, pixbuf); |
| 314 imageviewer_reset(imgviewer); |
|
| 315 |
|
| 316 if(imgviewer->pixbuf) { |
|
| 317 g_object_unref(imgviewer->pixbuf); |
|
| 318 } |
|
| 319 imgviewer->pixbuf = pixbuf; |
|
| 320 |
|
| 321 if(imgviewer->adjustwidgetsize && !imgviewer->autoscale) { |
|
| 322 int width = gdk_pixbuf_get_width(pixbuf); |
|
| 323 int height = gdk_pixbuf_get_height(pixbuf); |
|
| 324 gtk_widget_set_size_request(imgviewer->widget, width, height); |
|
| 325 } |
|
| 326 gtk_widget_queue_draw(imgviewer->widget); |
|
| 327 |
354 |
| 328 return 0; |
355 return 0; |
| 329 } |
356 } |
| 330 |
357 |
| 331 |
358 |