This example demonstrate the usage of EZ_ServiceEvents
.
Typically, if an application needs to perform calculations
continuously, then one needs to poll events instead of using
the event loop.
In this example, we implement a bouncing label. It bounces continuously according to a sine wave. When the user press the left button over the the main window, the amplitude changes.
/************************** Example 7 ***********************/ #include "EZ.h" float amplitude = 100.0; void EventHandler(EZ_Widget *widget, void *data, int etype, XEvent *xev) { if(xev->type == ButtonPress && xev->xbutton.button == Button1) amplitude = (float)(xev->xbutton.y); } main(int argc, char **argv) { EZ_Widget *frame, *freeLabel; EZ_Initialize(argc,argv,0); frame = EZ_CreateWidget(EZ_WIDGET_FRAME,NULL, EZ_WIDTH, 400, EZ_HEIGHT, 300, EZ_EVENT_HANDLER, EventHandler, NULL, 0); freeLabel = EZ_CreateWidget(EZ_WIDGET_FREE_LABEL,frame, EZ_LABEL_STRING, "A Dog", EZ_PIXMAP_FILE, "dog3.xpm", 0); EZ_DisplayWidget(frame); { float theta = 0.0; int direction = 1; while(1) { float width = (float)(EZ_GetWidgetWidth(frame)); float height = (float)(EZ_GetWidgetHeight(frame)); float tmp = height - amplitude; float dtheta = width * 0.01; int x,y; if(direction > 0) theta += dtheta; else theta -= dtheta; if(theta < 0.0) direction = 1; if(theta >= width -30.0) direction = -1; x = (int)(theta); y = (int)(height - tmp * (float)fabs(sin(theta * 0.01 + 1.5 ))) - 30; EZ_ConfigureWidget(freeLabel, EZ_X, x, EZ_Y, y, 0); EZ_SitForALittleBit(1000); /* or its too fast */ EZ_ServiceEvents(); } } } /************************** Example 7 ***********************/