Re: Fwd: Resize and place a background image (Expose Event)



Thank you very much!!

I'm not sure if i have to do this every time an expose event occurs.. I 
think that i just need on start of application.. But i test on start of 
application, i i don't have widget->allocation values, to make the resize..

Now, application crash after start, but i think that is because i make 
the unref of pixbuf, and in next expose event, fails (i think)...

GdkPixbuf-CRITICAL **: gdk_pixbuf_scale_simple: assertion 'GDK_IS_PIXBUF 
(src)' failed
GLib-GObject-CRITICAL **: g_object_unref: assertion 'G_IS_OBJECT 
(object)' failed
Gdk-CRITICAL **: IA__gdk_pixbuf_render_pixmap_and_mask_for_colormap: 
assertion 'GDK_IS_PIXBUF (pixbuf)' failed
GLib-GObject-CRITICAL **: g_object_unref: assertion 'G_IS_OBJECT 
(object)' failed

Às 09:54 de 02/03/2017, Gabriele Greco escreveu:
This works, but application blocks after a while..

I'm quite sure the problem is that you are leaking at least 2 pixbuf and a
pixmap for every expose event your app receives, and anyway, are you sure
you have to do it every time an expose event is thrown and not only when
the window is resized (configure_event)?



      pixbuf = gdk_pixbuf_scale_simple(pixbuf, widget->allocation.width,

If the original pixbuf has been created just for this operation, this call
leaks a pixbuf object, you shoud do something like:

GdkPixbuf *scaled = gdk_pixbuf_scale_simple(pixbuf,
widget->allocation.width, [...]
g_object_unref(pixbuf);


widget->allocation.height, GDK_INTERP_BILINEAR);
      gdk_pixbuf_render_pixmap_and_mask (pixbuf, &background, NULL, 0);

At this point you leak the second pixbuf, use for instance:
g_object_unref(scaled);


      style->bg_pixmap[0] = background;
      gtk_widget_set_style (GTK_WIDGET(widget), GTK_STYLE(style));

I'm quite sure set_style will increase reference count for 'background', so
after this call you should unref that pixmap:

g_object_unref(background);

You'll receive runtime errors if one of my statements here is not correct,
it's better to add a not needed unref in development and fix it that
release a version that leaks memory.



---
Este e-mail foi verificado em termos de vírus pelo software antivírus Avast.
https://www.avast.com/antivirus



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]