Re: Simple draw question



I have been able, using GDK, to draw while entering and leaving. One example could be in trying to create
a highlight effect as you enter a window.

Chris

Kevin DeKorte wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Cédric Lucantis wrote:
Le samedi 5 mai 2007 00:48, Kevin DeKorte a écrit :

You should never draw anything in an enter/leave callback, but only in an expose event. Also note that creating/destroying a GC each time you draw it is very slow, so you should do something like this instead:


Ok, I have questions here and they are because I really want to know why
and not start anything.

1. Why is drawing in the enter in leave callback not something you
should do? Is it because if you do to much it can cause a backlog of
events?

2. Actually while creating and destroying a GC may be slow (and I don't
think it is actually that slow) it seems that in this case I should have
just looked them up off the widget (which I didn't know there were
several GCs off of the widget style).

3. I did try what you recommended and basically I found this. The expose
event was not fired enough. I _think_ what happens is that GTK optimizes
calls to event handlers and so if you send it 5 requests to expose on
the same object and they stack up in the dispatcher, you only get one
expose event called (this is actually the right thing to do) and so when
I was testing this, I would get only one call to expose and so the box
would never be drawn. (my guess could be totally wrong here).

enter_button_callback()
{
        gtk_widget_set_state(widget, GTK_STATE_PRELIGHT);

        /* not sure this is required, as it's maybe called by set_state? */
        /* you may use gdk_window_invalidate_* instead for better performances,
         * see the docs for more infos */
        gtk_widget_queue_draw(widget);
}

leave_button_callback()
{
        /* same with GTK_STATE_NORMAL */
}

expose_button_callback()
{
        gdk_draw_rectangle(widget->window, widget->state->fg_gc[widget->state], ...)
}


Oh for others reading this the line should be

gdk_draw_rectangle(widget->window, widget->style->fg_gc[widget->state], ...)

Kevin
- --
Get my public GnuPG key from
http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x7D0BD5D1
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: Using GnuPG with Remi - http://enigmail.mozdev.org

iD8DBQFGPIaa6w2kMH0L1dERAnTrAJ9dP2jchOhrHVAGf8FBNjCm4lMtPQCdHjtT
516nI5zuTdUxRaXbRHpJ/Ew=
=/rw5
-----END PGP SIGNATURE-----
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list





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