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

📄 info.c

📁 神龙卡开发原代码
💻 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 + -