static bool BCallBack(struct t_x11 *x11,XEvent *event, Window w, void *data) { t_sc *sc; sc=(t_sc *)data; switch (event->type) { case Expose: XSetForeground(x11->disp,x11->gc,sc->col[sc->ncol-1].xc.pixel); TextInWin(x11,&sc->but,sc->but.text,eXCenter,eYCenter); break; case ConfigureNotify: sc->but.width=event->xconfigure.width; sc->but.height=event->xconfigure.height; break; case EnterNotify: LightBorder(x11->disp,sc->but.self,sc->col[sc->ncol-1].xc.pixel); break; case LeaveNotify: LightBorder(x11->disp,sc->but.self,sc->col[0].xc.pixel); break; case ButtonPress: x11->UnRegisterCallback(x11,sc->wd.self); x11->UnRegisterCallback(x11,sc->but.self); return TRUE; } return FALSE; }
static gmx_bool appCallBack(struct t_x11 *x11, XEvent *event, Window w, void *data) { t_app *app; int win; app = (t_app *)data; for (win = 0; (win < ebutNR); win++) { if (app->but[win].self == w) { break; } } if (win == ebutNR) { return FALSE; } switch (event->type) { case Expose: TextInWin(x11, &(app->but[win]), app->but[win].text, eXCenter, eYCenter); break; case ButtonPress: switch (win) { case ebQuit: exit(1); case ebStart: app->status = esGo; ExposeWin(x11->disp, app->xrwd.self); break; case ebStop: app->status = esStop; break; case ebRewind: rewind_trj(app->xr->traj); break; case ebGly: app->bShowGly = !app->bShowGly; ExposeWin(x11->disp, app->xrwd.self); break; default: XBell(x11->disp, 50); break; } break; } return FALSE; }
static gmx_bool ButtonCallBack(t_x11 *x11, XEvent *event, Window w, void *data) { XEvent letter; t_mwbut *but; t_windata *wd; but = (t_mwbut *)data; wd = &(but->wd); switch (event->type) { case Expose: XSetForeground(x11->disp, x11->gc, WHITE); XDrawRoundRect(x11->disp, wd->self, x11->gc, 0, 0, wd->width-1, wd->height-1); TextInWin(x11, wd, wd->text, eXCenter, eYCenter); XSetForeground(x11->disp, x11->gc, x11->fg); break; case EnterNotify: /* LightBorder(x11->disp,wd->self,WHITE);*/ XSetForeground(x11->disp, x11->gc, WHITE); XDrawRoundRect(x11->disp, wd->self, x11->gc, 1, 1, wd->width-3, wd->height-3); XSetForeground(x11->disp, x11->gc, x11->fg); break; case LeaveNotify: /* LightBorder(x11->disp,wd->self,BLUE);*/ XSetForeground(x11->disp, x11->gc, BLUE); XDrawRoundRect(x11->disp, wd->self, x11->gc, 1, 1, wd->width-3, wd->height-3); XSetForeground(x11->disp, x11->gc, x11->fg); break; case ButtonPress: letter.type = ClientMessage; letter.xclient.display = x11->disp; letter.xclient.window = wd->Parent; letter.xclient.message_type = 0; letter.xclient.format = 32; letter.xclient.data.l[0] = but->ID; letter.xclient.data.l[1] = (long)event->xbutton.button; XSendEvent(x11->disp, wd->Parent, True, 0, &letter); break; default: break; } return FALSE; }
static bool TitleCallBack(t_x11 *x11,XEvent *event, Window w, void *data) { t_windata *wd; wd=(t_windata *)data; switch (event->type) { case Expose: if (wd->text && (wd->width > 10)) { XSetForeground(x11->disp,x11->gc,WHITE); TextInWin(x11,wd,wd->text,eXCenter,eYCenter); XDrawLine(x11->disp,wd->self,x11->gc,0,wd->height, wd->width,wd->height); } break; case ConfigureNotify: wd->width=event->xconfigure.width; wd->height=event->xconfigure.height; break; } return FALSE; }
static gmx_bool butCallBack(struct t_x11 *x11, XEvent *event, Window wd, void *data) { XSetWindowAttributes attr; t_xhighway *xhw; t_windata *win; const char *label; int i; xhw = (t_xhighway *)data; for (i = 0; (i < NBUT); i++) { if (xhw->but[i].self == wd) { break; } } if (i == NBUT) { fprintf(stderr, "Incorrect window: %x in butcallback\n", (unsigned)wd); return FALSE; } win = &(xhw->but[i]); switch (event->type) { case Expose: XClearWindow(x11->disp, win->self); switch (i) { case StartStop: label = Driving[xhw->bDriving]; break; case Fog: label = Fogs[xhw->bFog]; break; default: label = win->text; } XSetForeground(x11->disp, x11->gc, WHITE); TextInWin(x11, win, label, eXCenter, eYCenter); break; case ConfigureNotify: win->width = event->xconfigure.width; win->height = event->xconfigure.height; break; case ButtonPress: switch (i) { case Quit: return TRUE; case StartStop: xhw->bDriving = 1-xhw->bDriving; ExposeWin(x11->disp, win->self); if (xhw->bDriving) { ExposeWin(x11->disp, xhw->win.self); } break; case Fog: xhw->bFog = 1-xhw->bFog; if (xhw->bFog) { attr.background_pixel = DARKGREY; } else { attr.background_pixel = BLACK; } XChangeWindowAttributes(x11->disp, xhw->win.self, CWBackPixel, &attr); /*ExposeWin(x11->disp,win->self);*/ break; default: break; } break; default: break; } return FALSE; }