📄 ctrlbar.c
字号:
/* 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 + -