⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ctrlbar.c

📁 MPEG2 PLAYER in linux
💻 C
📖 第 1 页 / 共 3 页
字号:
  /* Create main control window */    ctrlwindow = XCreateSimpleWindow (display,				    DefaultRootWindow(display),                                    hint.x, hint.y,                                    hint.base_width, hint.base_height,                                    CtrlBarBorder, fgcolor, bgcolor);  /* Create child windows */  xpos = ChildMargin;  ypos = ChildMargin;  frametotalwin = XCreateSimpleWindow (display, ctrlwindow, xpos, ypos,             ftw_width, ftw_height, ChildBorder, fgcolor, bgcolor);  xpos += ftw_width + 2*ChildBorder + ChildMargin;  rewindwin = XCreateSimpleWindow (display, ctrlwindow, xpos, ypos,             rww_width, rww_height, ChildBorder, fgcolor, bgcolor);  xpos += rww_width + 2*ChildBorder + ChildMargin;  pausewin = XCreateSimpleWindow (display, ctrlwindow, xpos, ypos,             psw_width, psw_height, ChildBorder, fgcolor, bgcolor);  xpos += psw_width + 2*ChildBorder + ChildMargin;  stepwin = XCreateSimpleWindow (display, ctrlwindow, xpos, ypos,             stw_width, stw_height, ChildBorder, fgcolor, bgcolor);  xpos += stw_width + 2*ChildBorder + ChildMargin;  playwin = XCreateSimpleWindow (display, ctrlwindow, xpos, ypos,             plw_width, plw_height, ChildBorder, fgcolor, bgcolor);  xpos += plw_width + 2*ChildBorder + ChildMargin;  loopwin = XCreateSimpleWindow (display, ctrlwindow, xpos, ypos,             lpw_width, lpw_height, ChildBorder, fgcolor, bgcolor);  xpos += lpw_width + 2*ChildBorder + ChildMargin;  exitwin = XCreateSimpleWindow (display, ctrlwindow, xpos, ypos,             exw_width, exw_height, ChildBorder, fgcolor, bgcolor);  /* Set up windows */  XSelectInput(display, ctrlwindow, StructureNotifyMask);  XSetStandardProperties(display, ctrlwindow, ctrlname, ctrlname, None,                         NULL, 0, &hint);  /*Safety*/  XResizeWindow(display,ctrlwindow, hint. base_width, hint. base_height);  XSelectInput(display, rewindwin, ExposureMask | ButtonPressMask);  XSelectInput(display, pausewin,  ExposureMask | ButtonPressMask);  XSelectInput(display, stepwin,   ExposureMask | ButtonPressMask);  XSelectInput(display, playwin,   ExposureMask | ButtonPressMask);  XSelectInput(display, loopwin,   ExposureMask | ButtonPressMask);  XSelectInput(display, exitwin,   ExposureMask | ButtonPressMask);  XSelectInput(display, frametotalwin, ExposureMask );  /* Add "Delete" option to system menus */  protocol_atom = XInternAtom(display,"WM_PROTOCOLS",False);  delete_atom   = XInternAtom(display,"WM_DELETE_WINDOW",False);  if ( protocol_atom != (Atom)None && delete_atom != (Atom)None) {    XSetWMProtocols(display, xinfo->window, &delete_atom, 1);/* Video window */    XSetWMProtocols(display, ctrlwindow, &delete_atom, 1);  /* Control bar */  }  /* Map windows (or not ;-) */  XMapSubwindows(display, ctrlwindow);  ShowHideControls(xinfo);  ctrl_init = 1;  /* Control Bar successfully initialized */}/* *-------------------------------------------------------------- * * Child window draw functions -- * *        (Re)draws child window * * Results: *        None. * * Side effects: *        None. * *-------------------------------------------------------------- */#if __STDC__static void WriteCenteredText(Window win,			      GC gc,			      int winwidth,			      int winheight,			      char *str,			      Display *display)#elsestatic void WriteCenteredText(win,gc,winwidth,winheight,str,display)Window win;GC gc;int winwidth, winheight;char *str;Display *display;#endif{  int xpos, ypos, len;  len = strlen(str);  ypos = (winheight + ctrlfont->ascent)/2 - 1; /* Ignore descenders */  xpos = (winwidth - len*fontwidth)/2;  XDrawImageString(display, win, gc, xpos, ypos, str, len);}#if __STDC__static void ExposeWindow(Window win, Display *display)#elsestatic void ExposeWindow(win,display)Window win;Display *display;#endif{  static XEvent event;  event.xexpose.type = Expose;  event.xexpose.serial = 0;  event.xexpose.send_event = TRUE;  event.xexpose.display = display;  event.xexpose.window = win;  event.xexpose.x = 0;        event.xexpose.y = 0;  event.xexpose.width = 0;  event.xexpose.height = 0;  event.xexpose.count = 0;  XSendEvent(display, win, FALSE, ExposureMask, &event);}#if __STDC__static void NormalColors(GC gc, Display *display)#elsestatic void NormalColors(gc,display)GC gc;Display *display;#endif{  XSetForeground(display, gc, fgcolor);  XSetBackground(display, gc, bgcolor);  }#if __STDC__static void InvertColors(GC gc, Display *display)#elsestatic void InvertColors(gc,display)GC gc;Display *display;#endif{  XSetForeground(display, gc, bgcolor);  XSetBackground(display, gc, fgcolor);  }#if __STDC__static void DrawRewind(GC gc, Display *display)#elsestatic void DrawRewind(gc,display)GC gc;Display *display;#endif{  if (ControlState == CTRL_REWIND) {    XFillRectangle(display, rewindwin, gc, 0, 0, rww_width, rww_height);    InvertColors(gc,display);    WriteCenteredText(rewindwin, gc, rww_width, rww_height, "Rewind",display);    NormalColors(gc,display);  }  else {    WriteCenteredText(rewindwin, gc, rww_width, rww_height, "Rewind",display);  }}#if __STDC__static void DrawPause(GC gc, Display *display)#elsestatic void DrawPause(gc,display)GC gc;Display *display;#endif{  if (ControlState == CTRL_EOF || ControlState == CTRL_FFWD      || ControlState == CTRL_PAUSE) {    XFillRectangle(display,pausewin,gc,0,0,psw_width,psw_height);    InvertColors(gc,display);    switch(ControlState) {    case CTRL_EOF:      WriteCenteredText(pausewin,gc,psw_width,psw_height,"End",display);      break;    case CTRL_FFWD:      WriteCenteredText(pausewin,gc,psw_width,psw_height,"Wait",display);      break;    default:      WriteCenteredText(pausewin,gc,psw_width,psw_height,"Pause",display);      break;    }    NormalColors(gc,display);  }  else {    WriteCenteredText(pausewin,gc,psw_width,psw_height,"Pause",display);  }}#if __STDC__static void DrawStep(GC gc, Display *display)#elsestatic void DrawStep(gc,display)GC gc;Display *display;#endif{  if (ControlState == CTRL_STEP) {    XFillRectangle(display, stepwin, gc, 0, 0, stw_width, stw_height);    InvertColors(gc,display);  }  WriteCenteredText(stepwin, gc, stw_width, stw_height, "Step",display);  if (ControlState == CTRL_STEP) {    NormalColors(gc,display);  }}#if __STDC__static void DrawPlay(GC gc, Display *display)#elsestatic void DrawPlay(gc,display)GC gc;Display *display;#endif{  if (ControlState == CTRL_PLAY ||     (ControlState == CTRL_EOF && ControlMotion == CTRLMOTION_ON)) {    XFillRectangle(display, playwin, gc, 0, 0, plw_width, plw_height);    InvertColors(gc,display);    WriteCenteredText(playwin, gc, plw_width, plw_height, "Play",display);    NormalColors(gc,display);  }  else {    WriteCenteredText(playwin, gc, plw_width, plw_height, "Play",display);  }}#if __STDC__static void DrawLoop(GC gc, Display *display)#elsestatic void DrawLoop(gc,display)GC gc;Display *display;#endif{  if (loopFlag) {    XFillRectangle(display, loopwin, gc, 0, 0, lpw_width, lpw_height);    InvertColors(gc,display);    WriteCenteredText(loopwin, gc, lpw_width, lpw_height, "Loop ON",display);    NormalColors(gc,display);  }  else WriteCenteredText(loopwin, gc, lpw_width, lpw_height, "Loop OFF",			 display);}#if __STDC__static void DrawExit(GC gc, Display *display)#elsestatic void DrawExit(gc,display)GC gc;Display *display;#endif{  if (ControlState == CTRL_EXIT) {    XFillRectangle(display,exitwin, gc, 0, 0, exw_width, exw_height);    InvertColors(gc,display);  }  WriteCenteredText(exitwin, gc, exw_width, exw_height, "Exit",display);  if (ControlState == CTRL_EXIT) {    NormalColors(gc,display);  }}void UpdateFrameTotal(display)Display *display;{  if (!ctrl_init) {    return;  }  ExposeWindow(frametotalwin,display);}void UpdateControlDisplay(display)Display *display;{  if (!ctrl_init) {    return;  }  ExposeWindow(rewindwin,display);  ExposeWindow(pausewin,display);  ExposeWindow(stepwin,display);  ExposeWindow(playwin,display);  ExposeWindow(loopwin,display);  ExposeWindow(exitwin,display);  ExposeWindow(frametotalwin,display);}#if __STDC__static void DrawFrameTotal(GC gc, VidStream **vid_stream, Display *display,			   int numMovies)#elsestatic void DrawFrameTotal(gc, vid_stream, display, numMovies)GC gc;VidStream **vid_stream;Display *display;int numMovies;#endif{  char str[32];  double dtemp;  int totNumFrames=0, i;  dtemp = StopWatch(STOPWATCH_READ);  for (i=0;i<numMovies;i++) {     if ((vid_stream[i]!=NULL) && 	 (vid_stream[i]->totNumFrames > totNumFrames)) {	 totNumFrames= vid_stream[i]->totNumFrames;     }  }  if (dtemp > 0.0) {    sprintf(str, "Frame/Rate%4d/%4.1f",	totNumFrames, TotalFrameCount/dtemp);  }  else {    sprintf(str, "Frame/Rate%4d/----", totNumFrames);  }  WriteCenteredText(frametotalwin, gc, ftw_width, ftw_height, str, display);}#if __STDC__static GC CreateCtrlGC(Display *display)#elsestatic GC CreateCtrlGC(display)Display *display;#endif{  XGCValues gcv;  GC gc;  gcv.foreground = BlackPixel(display, screen);  gcv.background = WhitePixel(display, screen);  gcv.font = ctrlfont->fid;  gcv.subwindow_mode = ClipByChildren;/*  gcv.subwindow_mode = IncludeInferiors; */  gc=XCreateGC(display, ctrlwindow,               GCForeground|GCBackground|GCFont|GCSubwindowMode, &gcv);  return gc;}/* *-------------------------------------------------------------- * * GetStateButton -- * *        Determines the window of the button associated with the *        import ctrlstate. * * Results: *        The associated window, if any; Otherwise 0. * * Side effects: *        None. * *-------------------------------------------------------------- */#if __STDC__static Window GetStateButton(int ctrlstate)#elsestatic Window GetStateButton(ctrlstate)int ctrlstate;#endif{  switch(ctrlstate) {    case CTRL_REWIND:      return rewindwin;    case CTRL_PAUSE:    case CTRL_FFWD:    case CTRL_EOF:      return pausewin;    case CTRL_STEP:      return stepwin;    case CTRL_PLAY:      return playwin;    case CTRL_EXIT:      return exitwin;    default:      break;    }  return (Window)0;}/* *-------------------------------------------------------------- * * DrawButton -- * *        Calls the draw button function associated with the import *        window button. * * Results: *        None. * * Side effects: *        None. * *-------------------------------------------------------------- */#if __STDC__static void DrawButton(Window button, GC gc,		       Display *display,		       VidStream **vid_stream,		       int num)#elsestatic void DrawButton(button,gc,display,vid_stream, num)Window button;GC gc;Display *display;VidStream **vid_stream;int num;#endif{  if (button == frametotalwin)  DrawFrameTotal(gc,vid_stream,display,num);  else if (button == rewindwin) DrawRewind(gc,display);  else if (button == pausewin)  DrawPause(gc,display);  else if (button == stepwin)   DrawStep(gc,display);  else if (button == playwin)   DrawPlay(gc,display);  else if (button == loopwin)   DrawLoop(gc,display);  else if (button == exitwin)   DrawExit(gc,display);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -