📄 info.c
字号:
/* * C Source file to handle displaying info stuff * Copyright (c) Sigma Designs 2003. All rights reserved. */#include <signal.h>#include <assert.h>#include <sys/time.h>#include "OsdWindow.h"#include "info.h"voidDrawValTotal(GR_COORD y, int val, int total){ char valTotalStr[] = "--/--"; unsigned int v = (unsigned int)val; unsigned int t = (unsigned int)total; if (v > 99) v = 99; if (t < 99) total = 99; itoa(v,&valTotalStr[0],2); itoa(t,&valTotalStr[3],2); GrFillRect(wid,gc_pal6,VALUE1_X,y-17,55,23); GrText(wid,gc1,VALUE1_X,y,valTotalStr,-1,GR_TFASCII);}voidDrawTime(GR_COORD y, int hour, int min, int sec){ char timeStr[] = "--:--:--"; unsigned int h = (unsigned int)hour; unsigned int m = (unsigned int)min; unsigned int s = (unsigned int)sec; if (h > 99) h = 99; if (m > 99) m = 99; if (s > 99) s = 99; itoa(h,&timeStr[0],2); itoa(m,&timeStr[3],2); itoa(s,&timeStr[6],2); GrFillRect(wid,gc_pal6,VALUE1_X,y-17,80,23); GrText(wid,gc1,VALUE1_X,y,timeStr,-1,GR_TFASCII);}unsigned inthsalarm (unsigned int hsec){ struct itimerval old, new; new.it_interval.tv_usec = 0; new.it_interval.tv_sec = 0; new.it_value.tv_usec = 500000*hsec; new.it_value.tv_sec = 0; if (setitimer(ITIMER_REAL, &new, &old) < 0) return 0; else return old.it_value.tv_sec;}static voidDrawTextTimerHandler(int sig){ if (scrollText) { //GrFillRect(scrollWid,gc_pal6,scrollRect.x,scrollRect.y,scrollRect.width,scrollRect.height); GrClearWindow(scrollWid, GR_FALSE); scrollX -= SCROLL_SPEED; if (scrollX <= - scrollStrExtent) { scrollX = scrollRectW; // wrap around } GrText(scrollWid,gc1,scrollX,YOFF,scrollText,-1,GR_TFASCII); hsalarm(1); } else hsalarm(0); return;}voidDrawText(char *str, int x, int y, int width, int height){ GR_SIZE retheight, retbase; GrGetGCTextSize(gc1,str,-1,GR_TFASCII, &scrollStrExtent, &retheight, &retbase); if (scrollStrExtent > width) { scrollX = 0; scrollRectW = width; scrollRectH = height; scrollText = str; // Create new clipping region scrollWid = GrNewWindow (wid, x, y-YOFF, width, height, 0, MWPALINDEX(6), MWPALINDEX(0)); GrMapWindow(scrollWid); GrText(scrollWid,gc1,0,YOFF,str,-1,GR_TFASCII); signal(SIGALRM, DrawTextTimerHandler); hsalarm(2); } else { scrollText = NULL; GrText(wid,gc1,x,y,str,-1,GR_TFASCII); } return;}voidStopDrawText(){ if (scrollText) { hsalarm(0); scrollText = NULL; GrDestroyWindow(scrollWid); } return;}voidShowFileInfoKeydownHandler(OSD_WINDOW *wPtr,DATA_POINTER ptr){ GR_EVENT *event = wPtr->lastevent; switch (event->keystroke.ch) { case SHOW_PLAY_INFO_UPDATE: { FILE_INFO_EXT fi; GetFileInfo(&fi); DrawTime(TEXT1_Y+(YOFF*3), fi.info->elapsedTimeH, fi.info->elapsedTimeM, fi.info->elapsedTimeS); } break; case SHOW_POWER_KEYDOWN: case SHOW_OPEN_KEYDOWN: RestoreRect(wPtr,&infoPixels, TEXT1_X-20, TEXT1_Y-40, INFORECT_W, INFORECT_H); OpenKeydownHandler(); break; case SHOW_START_PLAYING: //Do nothing here, 'cause we don't want to exit info screen through default break; default: StopDrawText(); RestoreRect(wPtr,&infoPixels, TEXT1_X-20, TEXT1_Y-40, INFORECT_W, INFORECT_H); RedrawOsd(wPtr); wPtr->KbdHandler = PlayfileKeydownHandler; if (event->keystroke.ch != SHOW_OSD_KEYDOWN) PlayfileKeydownHandler(wPtr,NULL); break; } return; }voidShowPlayInfoKeydownHandler(OSD_WINDOW *wPtr,DATA_POINTER ptr){ GR_EVENT *event = wPtr->lastevent; int type = (int)ptr; switch (event->keystroke.ch) { case SHOW_PLAY_INFO_UPDATE: { PLAY_INFO pi; GR_COORD y; switch (type) { case SHOW_DVD_INFO_KEYDOWN: GetDVDPlayInfo(&pi); goto DrawPlayInfo; case SHOW_VCD_INFO_KEYDOWN: GetVCDPlayInfo(&pi); DrawPlayInfo: if ((pi.chapterSec != playInfo.chapterSec) || (pi.chapterMin != playInfo.chapterMin) || (pi.chapterHour != playInfo.chapterHour)) { playInfo.chapterSec = pi.chapterSec; playInfo.chapterMin = pi.chapterMin; playInfo.chapterHour = pi.chapterHour; DrawTime(infoScrn[2].y, playInfo.chapterHour, playInfo.chapterMin, playInfo.chapterSec); } if ((pi.title != playInfo.title) || (pi.titleTotal != playInfo.titleTotal)) { playInfo.title = pi.title; playInfo.titleTotal = pi.titleTotal; DrawValTotal(infoScrn[0].y, playInfo.title, playInfo.titleTotal); } if ((pi.chapter != playInfo.chapter) || (pi.chapterTotal != playInfo.chapterTotal)) { playInfo.chapter = pi.chapter; playInfo.chapterTotal = pi.chapterTotal; DrawValTotal(infoScrn[1].y, playInfo.chapter, playInfo.chapterTotal); } if (pi.audioMode != playInfo.audioMode) { playInfo.audioMode = pi.audioMode; y = infoScrn[3].y; GrFillRect(wid,gc_pal6,VALUE1_X,y-17,165,23); GrText(wid,gc1,VALUE1_X,y,audioModeStr[playInfo.audioMode],-1,GR_TFASCII); } if (pi.hdOutMode != playInfo.hdOutMode || pi.dviOutMode != playInfo.dviOutMode || pi.tvOutMode != playInfo.tvOutMode) { playInfo.hdOutMode = pi.hdOutMode; playInfo.dviOutMode = pi.dviOutMode; playInfo.tvOutMode = pi.tvOutMode; y = infoScrn[4].y; GrFillRect(wid,gc_pal6,VALUE1_X,y-17,165,23); if (playInfo.hdOutMode == HD_OUT_OFF && playInfo.dviOutMode == DVI_OUT_OFF) GrText(wid,gc1,VALUE1_X,y,tvOutStr[playInfo.tvOutMode],-1,GR_TFASCII); else if (playInfo.hdOutMode == HD_OUT_OFF && playInfo.dviOutMode != DVI_OUT_OFF) GrText(wid,gc1,VALUE1_X,y,dviOutStr[playInfo.dviOutMode],-1,GR_TFASCII); else if (playInfo.hdOutMode != HD_OUT_OFF && playInfo.dviOutMode == DVI_OUT_OFF) GrText(wid,gc1,VALUE1_X,y,hdOutStr[playInfo.hdOutMode],-1,GR_TFASCII); } if (pi.tvType != playInfo.tvType) { playInfo.tvType = pi.tvType; y = infoScrn[5].y; GrFillRect(wid,gc_pal6,VALUE1_X,y-17,165,23); GrText(wid,gc1,VALUE1_X,y,tvTypeStr[playInfo.tvType],-1,GR_TFASCII); } if (pi.repeatMode != playInfo.repeatMode) { playInfo.repeatMode = pi.repeatMode; y = infoScrn[6].y; GrFillRect(wid,gc_pal6,VALUE1_X,y-17,165,23); GrText(wid,gc1,VALUE1_X,y,repeatModeStr[playInfo.repeatMode],-1,GR_TFASCII); } if ((int)ptr == SHOW_DVD_INFO_KEYDOWN) { if ((pi.audio != playInfo.audio) || (pi.audioTotal != playInfo.audioTotal)) { playInfo.audio = pi.audio; playInfo.audioTotal = pi.audioTotal; DrawValTotal(infoScrn[7].y, playInfo.audio, playInfo.audioTotal); } if ((pi.angle != playInfo.angle) || (pi.angleTotal != playInfo.angleTotal)) { playInfo.angle = pi.angle; playInfo.angleTotal = pi.angleTotal; DrawValTotal(infoScrn[8].y, playInfo.angle, playInfo.angleTotal); } if ((pi.subtitle != playInfo.subtitle) || (pi.subtitleTotal != playInfo.subtitleTotal)) { playInfo.subtitle = pi.subtitle; playInfo.subtitleTotal = pi.subtitleTotal; DrawValTotal(infoScrn[9].y, playInfo.subtitle, playInfo.subtitleTotal); } } break; case SHOW_AUDIO_CD_INFO_KEYDOWN: GetAudioCDPlayInfo(&pi); if ((pi.chapterSec != playInfo.chapterSec) || (pi.chapterMin != playInfo.chapterMin) || (pi.chapterHour != playInfo.chapterHour)) { playInfo.chapterSec = pi.chapterSec; playInfo.chapterMin = pi.chapterMin; playInfo.chapterHour = pi.chapterHour; DrawTime(TEXT1_Y+YOFF, playInfo.chapterHour, playInfo.chapterMin, playInfo.chapterSec); } if (pi.chapter != playInfo.chapter) { playInfo.chapter = pi.chapter; playInfo.chapterTotal = pi.chapterTotal; DrawValTotal(TEXT1_Y, playInfo.chapter, playInfo.chapterTotal); } if (pi.repeatMode != playInfo.repeatMode) { playInfo.repeatMode = pi.repeatMode; y = TEXT1_Y+(YOFF*2); GrFillRect(wid,gc_pal6,VALUE1_X,y-17,165,23); GrText(wid,gc1,VALUE1_X,y,repeatModeStr[playInfo.repeatMode],-1,GR_TFASCII); } break; } // switch(type) } break; // Quit case SHOW_DVD_INFO_KEYDOWN: case SHOW_VCD_INFO_KEYDOWN: case SHOW_AUDIO_CD_INFO_KEYDOWN: RestoreRect(wPtr,&infoPixels, TEXT1_X-20, TEXT1_Y-40, INFORECT_W, INFORECT_H); MapMainWindow(wPtr, (DATA_POINTER)GR_FALSE); RedrawOsd(wPtr); break; } return; }void MapShowInfoHandler(OSD_WINDOW *wPtr, DATA_POINTER ptr){ int i, s; int type = (int)ptr; gc1 = wPtr->gc; gc_pal0 = wPtr->gc_pal0; gc_pal6 = wPtr->gc_pal6; gc_pal244 = wPtr->gc_pal244; wid = wPtr->wid; ClearMsg(wPtr); SaveRect(wPtr, &infoPixels, TEXT1_X-20, TEXT1_Y-40, INFORECT_W, INFORECT_H, MWPALINDEX(6)); DrawUpperLeft(wid, gc_pal0, TEXT1_X-20,TEXT1_Y-40); DrawLowerLeft(wid, gc_pal0, TEXT1_X-20,TEXT1_Y-40+280); DrawLowerRight(wid, gc_pal0, TEXT1_X-20+INFORECT_W,TEXT1_Y-40+INFORECT_H); DrawUpperRight(wid, gc_pal0, TEXT1_X-20+INFORECT_W,TEXT1_Y-40); wPtr->KbdHandler_dptr = ptr; if (type == AUDIO_LIB || type == VIDEO_LIB || type == PHOTO_LIB) { FILE_INFO_EXT fi; wPtr->KbdHandler = ShowFileInfoKeydownHandler; GetFileInfo(&fi); GrText(wid,gc_pal244,TEXT1_X,TEXT1_Y,"File Name",-1,GR_TFASCII); GrText(wid,gc_pal244,COLON_X,TEXT1_Y,":",1,GR_TFASCII); DrawText(&fi.filename[7],TEXT1_X+10,TEXT1_Y+YOFF,DRAWTEXTRECT_W,DRAWTEXTRECT_H); GrText(wid,gc_pal244,TEXT1_X,TEXT1_Y+(YOFF*2),"File Size",-1,GR_TFASCII); GrText(wid,gc_pal244,COLON_X,TEXT1_Y+(YOFF*2),":",1,GR_TFASCII); GrText(wid,gc1,VALUE1_X,TEXT1_Y+(YOFF*2),fi.filesize,-1,GR_TFASCII); if (type != PHOTO_LIB) { GrText(wid,gc_pal244,TEXT1_X,TEXT1_Y+(YOFF*3),"File Time",-1,GR_TFASCII); GrText(wid,gc_pal244,COLON_X,TEXT1_Y+(YOFF*3),":",1,GR_TFASCII); DrawTime(TEXT1_Y+(YOFF*3), fi.info->elapsedTimeH, fi.info->elapsedTimeM, fi.info->elapsedTimeS); GrText(wid,gc_pal244,TEXT1_X,TEXT1_Y+(YOFF*4),"Length",-1,GR_TFASCII); GrText(wid,gc_pal244,COLON_X,TEXT1_Y+(YOFF*4),":",1,GR_TFASCII); GrText(wid,gc1,VALUE1_X,TEXT1_Y+(YOFF*4),fi.info->infoString[INFO_STRING_LENGTH],-1,GR_TFASCII); switch (type) { case AUDIO_LIB: GrText(wid,gc_pal244,TEXT1_X,TEXT1_Y+(YOFF*5),"Audio Quality",-1,GR_TFASCII); GrText(wid,gc_pal244,COLON_X,TEXT1_Y+(YOFF*5),":",1,GR_TFASCII); GrText(wid,gc1,VALUE1_X,TEXT1_Y+(YOFF*5),fi.info->infoString[INFO_STRING_AUDIO],-1,GR_TFASCII); GrText(wid,gc_pal244,TEXT1_X,TEXT1_Y+(YOFF*6),"Title",-1,GR_TFASCII); GrText(wid,gc_pal244,COLON_X,TEXT1_Y+(YOFF*6),":",1,GR_TFASCII); GrText(wid,gc1,TEXT1_X+10,TEXT1_Y+(YOFF*7),fi.info->infoString[INFO_STRING_TITLE],-1,GR_TFASCII); GrText(wid,gc_pal244,TEXT1_X,TEXT1_Y+(YOFF*8),"Artist",-1,GR_TFASCII); GrText(wid,gc_pal244,COLON_X,TEXT1_Y+(YOFF*8),":",1,GR_TFASCII); GrText(wid,gc1,TEXT1_X+10,TEXT1_Y+(YOFF*9),fi.info->infoString[INFO_STRING_ARTIST],-1,GR_TFASCII); break; case VIDEO_LIB: GrText(wid,gc_pal244,TEXT1_X,TEXT1_Y+(YOFF*5),"Audio Quality",-1,GR_TFASCII); GrText(wid,gc_pal244,COLON_X,TEXT1_Y+(YOFF*5),":",1,GR_TFASCII); GrText(wid,gc1,VALUE1_X,TEXT1_Y+(YOFF*5),fi.info->infoString[INFO_STRING_AUDIO],-1,GR_TFASCII); GrText(wid,gc_pal244,TEXT1_X,TEXT1_Y+(YOFF*6),"Video Quality",-1,GR_TFASCII); GrText(wid,gc_pal244,COLON_X,TEXT1_Y+(YOFF*6),":",1,GR_TFASCII); GrText(wid,gc1,VALUE1_X,TEXT1_Y+(YOFF*6),fi.info->infoString[INFO_STRING_VIDEO],-1,GR_TFASCII); break; } } } else { wPtr->KbdHandler = ShowPlayInfoKeydownHandler; playInfo.title = playInfo.titleTotal = playInfo.chapter = playInfo.chapterTotal = -1; playInfo.chapterHour = playInfo.chapterMin = playInfo.chapterSec = -1; playInfo.audioMode = playInfo.hdOutMode = playInfo.dviOutMode = playInfo.tvOutMode = playInfo.tvType = -1; playInfo.repeatMode = playInfo.audio = playInfo.audioTotal = playInfo.angle = -1; playInfo.angleTotal = playInfo.subtitle = playInfo.subtitleTotal = -1; if (type == SHOW_AUDIO_CD_INFO_KEYDOWN) { GrText(wid,gc_pal244,TEXT1_X,TEXT1_Y,"Track",-1,GR_TFASCII); GrText(wid,gc_pal244,COLON_X,TEXT1_Y,":",1,GR_TFASCII); GrText(wid,gc_pal244,TEXT1_X,TEXT1_Y+YOFF,"Track Time",-1,GR_TFASCII); GrText(wid,gc_pal244,COLON_X,TEXT1_Y+YOFF,":",1,GR_TFASCII); GrText(wid,gc_pal244,TEXT1_X,TEXT1_Y+(YOFF*2),"Repeat Mode",-1,GR_TFASCII); GrText(wid,gc_pal244,COLON_X,TEXT1_Y+(YOFF*2),":",1,GR_TFASCII); OsdMainLoop(SHOW_PLAY_INFO_UPDATE); return; } if (type == SHOW_DVD_INFO_KEYDOWN) s = 10; else s = 7; for (i=0; i<s; i++) { GrText(wid,gc_pal244,TEXT1_X,infoScrn[i].y,infoScrn[i].text,-1,GR_TFASCII); GrText(wid,gc_pal244,COLON_X,infoScrn[i].y,":",1,GR_TFASCII); } OsdMainLoop(SHOW_PLAY_INFO_UPDATE); } return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -