示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
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;
}
示例#4
0
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;
}
示例#5
0
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;
}