static void repaint_window (EyesWidget w) { if (XtIsRealized ((Widget) w)) { eyeLiner (w, XtWindow (w), w->eyes.outGC, w->eyes.centerGC, 0); eyeLiner (w, XtWindow (w), w->eyes.outGC, w->eyes.centerGC, 1); computePupils (w->eyes.mouse, w->eyes.pupil); eyeBall (w, w->eyes.pupGC, 0); eyeBall (w, w->eyes.pupGC, 1); } }
static void repaint_window (EyesWidget w) { if (XtIsRealized ((Widget) w)) { eyeLiner (w, TRUE, 0); eyeLiner (w, TRUE, 1); computePupils (w, w->eyes.mouse, w->eyes.pupil); eyeBall (w, TRUE, NULL, 0); eyeBall (w, TRUE, NULL, 1); } }
/* ARGSUSED */ static void draw_it ( XtPointer client_data, XtIntervalId *id) /* unused */ { EyesWidget w = (EyesWidget)client_data; Window rep_root, rep_child; int rep_rootx, rep_rooty; unsigned int rep_mask; int dx, dy; TPoint mouse; Display *dpy = XtDisplay (w); Window win = XtWindow (w); TPoint newpupil[2]; XPoint xnewpupil, xpupil; if (XtIsRealized((Widget)w)) { XQueryPointer (dpy, win, &rep_root, &rep_child, &rep_rootx, &rep_rooty, &dx, &dy, &rep_mask); mouse.x = Tx(dx, dy, &w->eyes.t); mouse.y = Ty(dx, dy, &w->eyes.t); if (!TPointEqual (mouse, w->eyes.mouse)) { computePupils (mouse, newpupil); xpupil.x = Xx(w->eyes.pupil[0].x, w->eyes.pupil[0].y, &w->eyes.t); xpupil.y = Xy(w->eyes.pupil[0].x, w->eyes.pupil[0].y, &w->eyes.t); xnewpupil.x = Xx(newpupil[0].x, newpupil[0].y, &w->eyes.t); xnewpupil.y = Xy(newpupil[0].x, newpupil[0].y, &w->eyes.t); if (!XPointEqual (xpupil, xnewpupil)) { if (w->eyes.pupil[0].x != -1000 || w->eyes.pupil[0].y != -1000) eyeBall (w, w->eyes.centerGC, 0); w->eyes.pupil[0] = newpupil[0]; eyeBall (w, w->eyes.pupGC, 0); } xpupil.x = Xx(w->eyes.pupil[1].x, w->eyes.pupil[1].y, &w->eyes.t); xpupil.y = Xy(w->eyes.pupil[1].x, w->eyes.pupil[1].y, &w->eyes.t); xnewpupil.x = Xx(newpupil[1].x, newpupil[1].y, &w->eyes.t); xnewpupil.y = Xy(newpupil[1].x, newpupil[1].y, &w->eyes.t); if (!XPointEqual (xpupil, xnewpupil)) { if (w->eyes.pupil[1].x != -1 || w->eyes.pupil[1].y != -1) eyeBall (w, w->eyes.centerGC, 1); w->eyes.pupil[1] = newpupil[1]; eyeBall (w, w->eyes.pupGC, 1); } w->eyes.mouse = mouse; w->eyes.update = 0; } else { if (delays[w->eyes.update + 1] != 0) ++w->eyes.update; } } w->eyes.interval_id = XtAppAddTimeOut(XtWidgetToApplicationContext((Widget) w), delays[w->eyes.update], draw_it, (XtPointer)w); } /* draw_it */
static void drawEyes(EyesWidget w, TPoint mouse) { TPoint newpupil[2]; int num; if (TPointEqual (mouse, w->eyes.mouse)) { if (delays[w->eyes.update + 1] != 0) ++w->eyes.update; return; } computePupils (w, mouse, newpupil); for (num = 0; num < 2; num ++) { drawEye(w, newpupil[num], num); } w->eyes.mouse = mouse; w->eyes.update = 0; }