ui/gtk/image.c

changeset 1238
a40c1ec7883d
parent 1222
163146220e94
equal deleted inserted replaced
1237:7849dc795c3a 1238:a40c1ec7883d
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

mercurial