📄 main.c
字号:
return length;}void drawInfo(){ char msg[1024]; sprintf(msg,"%s (Flash %d) - Frames = %d - Rate = %d fps", filename,(int)fi.version,(int)fi.frameCount,(int)fi.frameRate); XSetForeground(dpy,gc,WhitePixel(dpy, DefaultScreen(dpy))); XDrawString(dpy,control,gc,10,15,msg, strlen(msg)); sprintf(msg, " (Q)uit (R)eplay (P)ause (C)ontinue"); XDrawString(dpy,control,gc,10,35,msg, strlen(msg)); XFlush(dpy);}void playMovie(FlashHandle flashHandle, Display *dpy, Window movie, int onRoot){ struct timeval wd,de,now; //struct timeval // { // long tv_sec; // long tv_usec; // }; XEvent event; long cmd; /* evMask, */ fd_set fdset; int status; long delay = 0; long wakeUp; long z = 1;/* long x = 0; long y = 0;*/ FlashEvent fe; cmd = FLASH_WAKEUP; wakeUp = FlashExec(flashHandle, cmd, 0, &wd); if (!onRoot) { XSelectInput(dpy, movie, FLASH_XEVENT_MASK|KeyPressMask); } XSync(dpy,False); while(1) { FD_ZERO(&fdset); FD_SET(ConnectionNumber(dpy),&fdset); //printf("WakeUp = %d Delay = %d\n", wakeUp, delay); if (delay < 0) { delay = 20; } if (xc->fd.flash_refresh) { FlashCopyX11(0); xc->fd.flash_refresh = 0; } if (wakeUp) { de.tv_sec = delay/1000; de.tv_usec = (delay%1000)*1000; status = select(ConnectionNumber(dpy)+1, &fdset, 0, 0, &de); } else { status = select(ConnectionNumber(dpy)+1, &fdset, 0, 0, 0); } if (status == 0) { cmd = FLASH_WAKEUP; wakeUp = FlashExec(flashHandle, cmd, 0, &wd); } else { XNextEvent(dpy, &event); //printf("Event %d (%d)\n",event.type,event.xany.serial); if (event.xany.window == movie) { int keycode; KeySym keysym; switch (event.type) { case KeyPress: keycode = event.xkey.keycode; keysym = XLookupKeysym((XKeyEvent*)&event, 0); fe.type = FeKeyPress; fe.key = 0; switch (keysym) { case XK_Up: fe.key = FeKeyUp; break; case XK_Down: fe.key = FeKeyDown; break; case XK_Left: fe.key = FeKeyLeft; break; case XK_Right: fe.key = FeKeyRight; break; case XK_Return: fe.key = FeKeyEnter; break; case XK_Tab: fe.key = FeKeyNext; break; } if (fe.key != 0) { cmd = FLASH_EVENT; if (FlashExec(flashHandle, cmd, &fe, &wd)) { wakeUp = 1; } } else { switch (keysym) {#if 0 case XK_Up: y -= 10; FlashOffset(flashHandle,x,y); break; case XK_Down: y += 10; FlashOffset(flashHandle,x,y); break; case XK_Left: x -= 10; FlashOffset(flashHandle,x,y); break; case XK_Right: x += 10; FlashOffset(flashHandle,x,y); break;#endif case XK_KP_Add: FlashZoom(flashHandle,++z); break; case XK_KP_Subtract: FlashZoom(flashHandle,--z); break; case XK_q: return; break; case XK_c: cmd = FLASH_CONT; wakeUp = FlashExec(flashHandle, cmd, 0, &wd); break; case XK_p: cmd = FLASH_STOP; wakeUp = FlashExec(flashHandle, cmd, 0, &wd); break; case XK_r: cmd = FLASH_REWIND; FlashExec(flashHandle, cmd, 0, &wd); cmd = FLASH_CONT; wakeUp = FlashExec(flashHandle, cmd, 0, &wd); break; } } break; case Expose: FlashCopyX11(1); break; case NoExpose: break; default: cmd = FLASH_EVENT; if (FlashExecX11(flashHandle, cmd, &event, &wd)) { wakeUp = 1; } break; } } if (!onRoot && event.xany.window == control) { if (event.type == Expose) { drawInfo(); } } } /* Recompute delay */ gettimeofday(&now,0); delay = (wd.tv_sec-now.tv_sec)*1000 + (wd.tv_usec-now.tv_usec)/1000; }}voidshowUrl(char *url, char *target, void *client_data){ printf("GetURL : %s\n", url);}voidgetSwf(char *url, int level, void *client_data){ FlashHandle flashHandle; char *buffer; long size; flashHandle = (FlashHandle) client_data; printf("LoadMovie: %s @ %d\n", url, level); if (readFile(url, &buffer, &size) > 0) { FlashParse(flashHandle, level, buffer, size); }}int main(int argc, char **argv){ char *buffer; long size; FlashHandle flashHandle; int status; int onRoot = 0; Screen *screen; if (argc < 2) { fprintf(stderr,"Usage : %s [ -root ] <file.swf>\n", argv[0]); exit(1); } if (argc == 3) { if (!strcmp(argv[1],"-root") || !strcmp(argv[1],"-inroot")) { onRoot = 1; } argc--; argv++; } dpy = XOpenDisplay(getenv("DISPLAY")); if (dpy == 0) { fprintf(stderr,"Can't open X display\n"); exit(1); } screen = DefaultScreenOfDisplay(dpy);//return the default screen of the display dpy gc = DefaultGC(dpy, DefaultScreen(dpy));//DefaultScreen returns the number of the screen belonging to the display dpy filename = argv[1]; if (readFile(filename, &buffer, &size) < 0) { exit(2); } flashHandle = FlashNew(); if (flashHandle == 0) { exit(1); } printf("starting flashparser\n"); // Load level 0 movie do { status = FlashParse(flashHandle, 0, buffer, size); } while (status & FLASH_PARSE_NEED_DATA); printf("flashparser done\n"); free(buffer); FlashGetInfo(flashHandle, &fi); if (onRoot == 0) {//? frame = XCreateSimpleWindow(dpy, RootWindow(dpy, DefaultScreen(dpy))//parent window, 0, 0, fi.frameWidth/20, fi.frameHeight/20+40, 0, WhitePixel(dpy, DefaultScreen(dpy)), BlackPixel(dpy, DefaultScreen(dpy)) );//create a window whose parent is root window XMapWindow(dpy, frame);//enable the window viewable in dpy(if its parent is unviewable,it will wait for its parent becoming viewable by using this function) movie = XCreateSimpleWindow(dpy, frame, 0, 0, fi.frameWidth/20,fi.frameHeight/20, 0, WhitePixel(dpy, DefaultScreen(dpy)), BlackPixel(dpy, DefaultScreen(dpy)) );//its parent is frame XMapWindow(dpy, movie);// control = XCreateSimpleWindow(dpy, frame, 0, fi.frameHeight/20, fi.frameWidth/20,40, 0, BlackPixel(dpy, DefaultScreen(dpy)), BlackPixel(dpy, DefaultScreen(dpy)) );//its parent is frame,too XMapWindow(dpy, control);// XSelectInput(dpy, control, ExposureMask);//select input events from the window "control" with the event mask ExposureMask //this function requests that the X Server report the events associated with the specified event mask drawInfo(); } else { movie = VirtualRootWindowOfScreen(screen); // Auto loop when onRoot FlashSettings(flashHandle, PLAYER_LOOP); } XFlush(dpy);//flushes the output buffer of dpy FlashGraphicInitX11(flashHandle, dpy, movie, onRoot);//initialize X FlashSoundInit(flashHandle, "/dev/dsp"); FlashSetGetUrlMethod(flashHandle, showUrl, 0); FlashSetGetSwfMethod(flashHandle, getSwf, (void*)flashHandle); playMovie(flashHandle, dpy, movie, onRoot); FlashClose(flashHandle); exit(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -