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

📄 utilhandler.c

📁 神龙卡开发原代码
💻 C
📖 第 1 页 / 共 3 页
字号:
 /* * C Source file to handle utility functions * Copyright (c) Sigma Designs 2002-2003.  All Rights Reserved. */#include <signal.h>#include <assert.h>#include <unistd.h>#include "OsdWindow.h"#include "utilhandler.h"voidSaveRect(OSD_WINDOW *wPtr, GR_PIXELVAL **pixels, GR_COORD x, GR_COORD y, 		GR_SIZE width, GR_SIZE height, GR_COLOR bgcolor){			if (*pixels) free((void *)(*pixels));			*pixels = (GR_PIXELVAL *)malloc(width*height);	assert(*pixels != NULL);	GrReadArea(wPtr->wid, x, y, width, height, *pixels);	GrSetGCForeground(wPtr->gc, bgcolor);	GrFillRect(wPtr->wid,wPtr->gc,x,y,width,height);	GrSetGCForeground(wPtr->gc, MWPALINDEX(255));	//Flush display cache	//asm ("mcr p15, 0, r0, c7, c10, 0\n");	return;}voidRestoreRect(OSD_WINDOW *wPtr, GR_PIXELVAL **pixels, GR_COORD x, GR_COORD y, GR_SIZE width, GR_SIZE height){	if (*pixels) {		GrFillRect(wPtr->wid,wPtr->gc_pal0, x, y, width, height);		GrArea(wPtr->wid, wPtr->gc_pal0, x,y,width,height, *pixels , MWPF_PIXELVAL);		free((void *)(*pixels));		//Flush display cache		//asm ("mcr p15, 0, r0, c7, c10, 0\n");	}	*pixels = NULL;	return;}voidSaveVolRect(OSD_WINDOW *wPtr){		SaveRect(wPtr, &volPixels, VOL_X,VOL_Y, VOL_W,VOL_H, MWPALINDEX(0));	return;}voidSavePopupRect(OSD_WINDOW *wPtr){			SaveRect(wPtr, &popupPixels, POPUP_X, POPUP_Y, POPUP_W, POPUP_H, MWPALINDEX(0));	return;}voidRestoreVolRect(OSD_WINDOW *wPtr){	RestoreRect(wPtr, &volPixels, VOL_X,VOL_Y, VOL_W,VOL_H);	return;}voidRestorePopupRect(OSD_WINDOW *wPtr){	RestoreRect(wPtr, &popupPixels, POPUP_X, POPUP_Y, POPUP_W, POPUP_H);	return;}static void DrawDigit(char *str, char digit, int right_inc){	GR_COORD x;	GR_SIZE retwidth, retheight, retbase;	GR_GC_ID gc_pal64 = GrNewGC();		// png background is index 64		GrSetGCForeground(gc_pal64, MWPALINDEX(64));	GrSetGCBackground(gc_pal64, MWPALINDEX(0));	GrSetGCFont(gc_pal64, OSD_DEFAULT_FONT_NO);	GrSetGCUseBackground(gc_pal64,GR_FALSE);		GrGetGCTextSize(gc1,str,curId,GR_TFASCII, &retwidth, &retheight, &retbase);	x = curX + retwidth;	GrText(wid,gc_pal64,x,curY,&str[curId],1,GR_TFASCII);			str[curId] = digit;	if (right_inc) {		GrText(wid,gc1,x,curY,&str[curId],1,GR_TFASCII);		curId += right_inc;		GrGetGCTextSize(gc1,str,curId,GR_TFASCII, &retwidth, &retheight, &retbase);		GrText(wid,gc_pal244,curX+retwidth,curY,&str[curId],1,GR_TFASCII);	}	else {				GrText(wid,gc_pal244,x,curY,&str[curId],1,GR_TFASCII);	}	GrDestroyGC(gc_pal64);}//-------------------------// Volume Stuff//static int volDrawn = GR_FALSE, laststeps = 0;static void VolumeTimerHandler(OSD_WINDOW *wPtr, DATA_POINTER ptr){		GrDestroyTimer(wPtr->volumeTid);	RestoreVolRect(wPtr);	volDrawn = GR_FALSE;	RedrawOsd(wPtr);	return;}voidCancelVolume(OSD_WINDOW *wPtr){	if (volDrawn)		VolumeTimerHandler(wPtr, NULL);}voidDrawVolBar(OSD_WINDOW *wPtr){	int i, vol, steps;	char vbarImg[] = "img/vol01.png";		GetVolume(&vol);	if (vol < 0) vol = 0;	if (vol > 100) vol = 100;	steps = vol / 8;		if (!volDrawn) {				volDrawn = GR_TRUE;				SaveVolRect(wPtr);		OsdDrawPictureEx(wPtr,VOL_X,VOL_Y,VOL_W,VOL_H,"img/volbkgrnd.png");		if (steps < 9) {			vbarImg[8] = 0x30;	vbarImg[9] = 0x31+steps;		} 		else {			vbarImg[8] = 0x31;	vbarImg[9] = 0x30+steps-9;		}				OsdDrawPictureEx(wPtr,VOL_STEP1_X,VOL_STEP1_Y,VOL_STEP_WIDTH+(VOL_STEP_XINC*steps),VOL_STEP_HEIGHT,vbarImg);	}	else {				if (steps > laststeps) {			for (i=laststeps+1; i <= steps; i++)				OsdDrawPictureEx(wPtr,VOL_STEP1_X+(i*VOL_STEP_XINC),VOL_STEP1_Y,VOL_STEP_WIDTH,VOL_STEP_HEIGHT,"img/vol01.png");					}		else {			//Clear the bar			for (i=laststeps; i > steps; i--)				GrFillRect(wPtr->wid,wPtr->gc_pal6,VOL_STEP1_X+(i*VOL_STEP_XINC),VOL_STEP1_Y,VOL_STEP_WIDTH,VOL_STEP_HEIGHT);		}	}		laststeps = steps;	GrDestroyTimer(wPtr->volumeTid);	wPtr->VolumeTimerHandler = VolumeTimerHandler;	wPtr->volumeTid = GrCreateTimer(wPtr->wid, OSD_TIMEOUT);				return;}//---------------------// Search stuff//voidSearchKeydownHandler(OSD_WINDOW *wPtr,DATA_POINTER ptr){	GR_EVENT *event;	GR_SIZE retwidth, retheight, retbase;	int t = (int)ptr;	char digit;	    event=wPtr->lastevent;		switch (event->keystroke.ch) {			case SHOW_LEFT_KEYDOWN:				GrGetGCTextSize(gc1,txtStr,curId,GR_TFASCII, &retwidth, &retheight, &retbase);			GrText(wid,gc1,POPUP_DATA_X + retwidth,curY,&txtStr[curId],1,GR_TFASCII);					if (curId <= 0) curId = curIdMax;			else {				curId--;				if (curRow == 0) {					if (curId == 2 || curId == 5) curId--;				}				else {					if ((t == DVD_SEARCH) && (curId == 3 || curId == 4 || curId == 5)) curId = 2;				}			}						GrGetGCTextSize(gc1,txtStr,curId,GR_TFASCII, &retwidth, &retheight, &retbase);			GrText(wid,gc_pal244,POPUP_DATA_X + retwidth,curY,&txtStr[curId],1,GR_TFASCII);			break;					case SHOW_RIGHT_KEYDOWN:			GrGetGCTextSize(gc1,txtStr,curId,GR_TFASCII, &retwidth, &retheight, &retbase);			GrText(wid,gc1,POPUP_DATA_X + retwidth,curY,&txtStr[curId],1,GR_TFASCII);								if (curId >= curIdMax) curId = 0;			else {				curId++;				if (curRow == 0) {					if (curId == 2 || curId == 5) curId++;				}				else {					if ((t == DVD_SEARCH) && (curId == 3 || curId == 4 || curId == 5)) curId = 6;				}			}						GrGetGCTextSize(gc1,txtStr,curId,GR_TFASCII, &retwidth, &retheight, &retbase);			GrText(wid,gc_pal244,POPUP_DATA_X + retwidth,curY,&txtStr[curId],1,GR_TFASCII);			break;					case SHOW_CANCEL_KEYDOWN:		{			//Clear current text string to background			GR_GC_ID gc_pal64 = GrNewGC();		// png background is index 64			GrSetGCForeground(gc_pal64, MWPALINDEX(64));			GrSetGCBackground(gc_pal64, MWPALINDEX(0));			GrSetGCFont(gc_pal64, OSD_DEFAULT_FONT_NO);			GrSetGCUseBackground(gc_pal64,GR_FALSE);					GrText(wid,gc_pal64,POPUP_DATA_X,curY,txtStr,-1,GR_TFASCII);					GrDestroyGC(gc_pal64);					if (curRow == 0) {				curId = 0;				curIdMax = 7;			curY = POPUP_TIME_Y;								HMSStr[0] = HMSStr[1] = '0';				HMSStr[3] = HMSStr[4] = '0';				HMSStr[6] = HMSStr[7] = '0';				txtStr = HMSStr;			}			else {				if (t == DVD_SEARCH) {					curId = 0;					curIdMax = 8;			curY = POPUP_CHAPTER_Y;					TitleChapterStr[0] = TitleChapterStr[1] = TitleChapterStr[2] = '0';					TitleChapterStr[6] = TitleChapterStr[7] = TitleChapterStr[8] = '0';					txtStr = TitleChapterStr;				}				else if (t == VCD_SEARCH) {					curId = 0;					curIdMax = 2;			curY = POPUP_CHAPTER_Y;					TrackStr[0] = TrackStr[1] = TrackStr[2] = '0';					txtStr = TrackStr;				}			}			goto Text_Redraw;					}					case SHOW_UP_KEYDOWN:		case SHOW_DOWN_KEYDOWN:			if (t != TIME_SEARCH) {				GrText(wid,gc_pal6,POPUP_DATA_X,curY,txtStr,-1,GR_TFASCII);				if (curRow == 0) {					curRow = 1;		curY = POPUP_CHAPTER_Y;					HMSStr[0] = HMSStr[1] = '0';					HMSStr[3] = HMSStr[4] = '0';					HMSStr[6] = HMSStr[7] = '0';									if (t == DVD_SEARCH) {						curId = 0;	curIdMax = 8;						txtStr = TitleChapterStr;					}					else if (t == VCD_SEARCH) {						curId = 0;	curIdMax = 2;						txtStr = TrackStr;								}				}				else {					curRow = 0;				curId = 0;					curIdMax = 7;			curY = POPUP_TIME_Y;					if (t == DVD_SEARCH) {						TitleChapterStr[0] = TitleChapterStr[1] = TitleChapterStr[2] = '0';						TitleChapterStr[6] = TitleChapterStr[7] = TitleChapterStr[8] = '0';					}					else if (t == VCD_SEARCH){						TrackStr[0] = TrackStr[1] = TrackStr[2] = '0';					}					txtStr = HMSStr;				}				Text_Redraw:								GrText(wid,gc1,POPUP_DATA_X,POPUP_TIME_Y,HMSStr,-1,GR_TFASCII);				if (t == DVD_SEARCH)					GrText(wid,gc1,POPUP_DATA_X,POPUP_CHAPTER_Y,TitleChapterStr,-1,GR_TFASCII);				else if (t == VCD_SEARCH)					GrText(wid,gc1,POPUP_DATA_X,POPUP_CHAPTER_Y,TrackStr,-1,GR_TFASCII);								GrGetGCTextSize(gc_pal244,txtStr,curId,GR_TFASCII, &retwidth, &retheight, &retbase);													GrText(wid,gc_pal244,POPUP_DATA_X + retwidth,curY,&txtStr[curIdMax],1,GR_TFASCII);			}			break;					case SHOW_ZERO_KEYDOWN:			digit = 0x30; goto Search_DrawDigit;		case SHOW_ONE_KEYDOWN:			digit = 0x31; goto Search_DrawDigit;		case SHOW_TWO_KEYDOWN:			digit = 0x32; goto Search_DrawDigit;		case SHOW_THREE_KEYDOWN:			digit = 0x33; goto Search_DrawDigit;		case SHOW_FOUR_KEYDOWN:			digit = 0x34; goto Search_DrawDigit;		case SHOW_FIVE_KEYDOWN:			digit = 0x35; goto Search_DrawDigit;		case SHOW_SIX_KEYDOWN:			digit = 0x36; goto Search_DrawDigit;		case SHOW_SEVEN_KEYDOWN:			digit = 0x37; goto Search_DrawDigit;		case SHOW_EIGHT_KEYDOWN:			digit = 0x38; goto Search_DrawDigit;		case SHOW_NINE_KEYDOWN:			digit = 0x39;				Search_DrawDigit:			if (curRow == 0) {				if (curId == 0 || curId == 3 || curId == 6)					DrawDigit(txtStr, digit,1);				else if (curId == 1 || curId == 4) 					DrawDigit(txtStr, digit,2);				else					DrawDigit(txtStr, digit,0);			}					else {				switch (t) {				case DVD_SEARCH:					if (curId == 2)						DrawDigit(txtStr, digit,4);					else if (curId == curIdMax)						DrawDigit(txtStr, digit,0);					else						DrawDigit(txtStr, digit,1);					break;				case VCD_SEARCH:					if (curId == curIdMax)						DrawDigit(txtStr, digit,0);					else						DrawDigit(txtStr, digit,1);					break;				}			}					break;				case SHOW_ENTER_KEYDOWN:			{			int hour = (HMSStr[0] - 0x30)*10 + (HMSStr[1] - 0x30);			int min = (HMSStr[3] - 0x30)*10 + (HMSStr[4] - 0x30);			int sec = (HMSStr[6] - 0x30)*10 + (HMSStr[7] - 0x30);			switch (t) {			case DVD_SEARCH:				{				int title = (TitleChapterStr[0] - 0x30)*100 + (TitleChapterStr[1] - 0x30)*10 + (TitleChapterStr[2] - 0x30);				int chapter = (TitleChapterStr[6] - 0x30)*100 + (TitleChapterStr[7] - 0x30)*10 + (TitleChapterStr[8] - 0x30);								DVDSearch(hour,min,sec,chapter,title);				}				goto Quit_DVD_VCD_Label;					case VCD_SEARCH:				{				int track = (TrackStr[0] - 0x30)*100 + (TrackStr[1] - 0x30)*10 + (TrackStr[2] - 0x30);				VCDSearch(hour,min,sec,track);				}				goto Quit_DVD_VCD_Label;					case TIME_SEARCH:				AVISearch(hour,min,sec);				goto Quit_AVI_Label;				break;			}			}			break;				case SHOW_POWER_KEYDOWN:		case SHOW_OPEN_KEYDOWN:			if (t == TIME_SEARCH) {				RestorePopupRect(wPtr);				OpenKeydownHandler();			}			else {				//goto Quit_DVD_VCD_Label;				RestorePopupRect(wPtr);				RedrawOsd(wPtr);				MapMainWindow(wPtr, (DATA_POINTER)GR_FALSE);				OsdKbHandler(wPtr, NULL);			}			break;					case SHOW_SEARCH_KEYDOWN:		Quit_DVD_VCD_Label:			RestorePopupRect(wPtr);			RedrawOsd(wPtr);			MapMainWindow(wPtr, (DATA_POINTER)GR_FALSE);			break;		case SHOW_TIME_SEARCH_KEYDOWN:		Quit_AVI_Label:			RestorePopupRect(wPtr);			RedrawOsd(wPtr);			wPtr->KbdHandler = PlayfileKeydownHandler;			break;			}	return;}void MapSearchHandler(OSD_WINDOW *wPtr, DATA_POINTER ptr){	int t = (int)ptr;		gc1 = wPtr->gc;	gc_pal0 = wPtr->gc_pal0;	gc_pal6 = wPtr->gc_pal6;	gc_pal244 = wPtr->gc_pal244;	wid = wPtr->wid;	wPtr->KbdHandler = SearchKeydownHandler;	wPtr->KbdHandler_dptr = ptr;			SavePopupRect(wPtr);	OsdDrawPictureEx(wPtr, POPUP_X, POPUP_Y, POPUP_W,POPUP_H,"img/popup.png");		//Draw 00:00:00	HMSStr[0] = HMSStr[1] = '0';	HMSStr[3] = HMSStr[4] = '0';	HMSStr[6] = HMSStr[7] = '0';	curRow = 0;			curId = 0;	curIdMax = 7;		curY = POPUP_TIME_Y;	txtStr = HMSStr;	curX = POPUP_DATA_X;		TitleChapterStr[0] = TitleChapterStr[1] = TitleChapterStr[2] = '0';	TitleChapterStr[6] = TitleChapterStr[7] = TitleChapterStr[8] = '0';		TrackStr[0] = TrackStr[1] = TrackStr[2] = '0';	switch (t) {		case DVD_SEARCH:		GrText(wid,gc1,POPUP_HEADER_X,POPUP_HEADER_Y,"DVD Search",-1,GR_TFASCII);		GrText(wid,gc1,POPUP_TEXT_X,POPUP_CHAPTER_Y,"Title/Chapter:",-1,GR_TFASCII);		break;			case VCD_SEARCH:

⌨️ 快捷键说明

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