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

_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to