Re: Expose event?
- From: Derethor <derethor thepentagon com>
- To: "gtk-app-devel-list gnome org" <gtk-app-devel-list gnome org>
- Subject: Re: Expose event?
- Date: Wed, 13 Dec 2000 07:55:43 +0000
Havoc Pennington wrote:
Check out the "scribble" example in the GTK tutorial. Just do all your
drawing from the expose event handler; it will work fine.
You can't draw until you get the first expose_event, that's the
definitive moment in time when drawing is allowed. Realization isn't
enough.
I do my init stuff on the "draw" event, and my update stuff on the
"expose_event".. in this case, I create a SDL surface (SDL is a library
for real time graphics designed for videogames)
What are the differences of these events? I was believing it is better
off If I use expose to manage the update stuff and draw to init the
stuff. I attach a surface using the drawarea window, and it works
well...
I'll do some futher research to know exactly which events are
happening...
Butr, If I move all to the expose_event, it doesnt init the stuff (in
this case, attach a sdl surface over a gtkdrawarea)
those are the callbacks:
/* Create the SDL_Surface when the drawarea is visible */
gboolean cbDrawAreaDraw (GtkWidget *widget, gpointer data)
{
dkScreen *screen;
if (! GTK_IS_WIDGET(widget))
{
DK_ERROR ("given widget isnt a real widget");
return (FALSE);
}
screen = screen_get_active ();
if (!screen)
{
DK_ERROR ("screen not valid");
return (FALSE);
}
if ( !screen_sdl_attach (screen) )
{
DK_ERROR ("unable to attach SDL surface");
return (FALSE);
}
return (TRUE);
}
/* update the surface */
gboolean cbDrawAreaExpose (GtkWidget *widget, GdkEventExpose *event,
gpointer data)
{
dkScreen *screen;
SDL_Rect dest;
if (! GTK_IS_WIDGET(widget))
{
DK_ERROR ("given widget isnt a real widget");
return (FALSE);
}
screen = screen_get_active ();
if (!screen)
{
DK_ERROR ("screen not valid");
return (FALSE);
}
if ( GTK_WIDGET_VISIBLE (widget) && (screen->surface) )
{
dest.x = event->area.x;
dest.y = event->area.y;
dest.w = event->area.width;
dest.h = event->area.height;
SDL_UpdateRects (screen->surface, 1, &dest);
}
return (TRUE);
}
--
signed
derethor of centolos
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]