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

📄 sub1handler.c

📁 神龙卡开发原代码
💻 C
字号:
/* * C Source file for sub1handler * Copyright (c) Sigma Designs 2002-2003.  All Rights Reserved. */#include "OsdWindow.h"#include "sub1handler.h"void Sub1KeydownHandler(OSD_WINDOW *wPtr,DATA_POINTER ptr){	GR_EVENT *event;	GR_RECT rect;	int tmp;		rect.x = SUB1_XPOS;	rect.width = SUB1_WIDTH; rect.height = SUB1_HEIGHT;    event=wPtr->lastevent;		switch(event->keystroke.ch) {	case SHOW_UP_KEYDOWN:		// Find next enabled 		tmp = sub1Sel - 1;		while (tmp >= 0) {			if (curSub1[tmp].enabled)				break;			tmp--;		}				if (tmp >= 0) {			// Unhilite current			rect.y = curSub1[sub1Sel].y;			DrawUnHilite(wPtr, &rect);					// Hilite next one			sub1Sel = tmp;			rect.y = curSub1[sub1Sel].y;			DrawHilite(wPtr, &rect);			DrawSub2Menu(wPtr, curSub1[sub1Sel].pSub2, curSub1[sub1Sel].endItems);		}		break;	case SHOW_DOWN_KEYDOWN:		// Find next enabled 			tmp = sub1Sel + 1;		while (tmp < sub1Items) {			if (curSub1[tmp].enabled)				break;			tmp++;		}				if (tmp < sub1Items) {			// Unhilite current			rect.y = curSub1[sub1Sel].y;			DrawUnHilite(wPtr, &rect);					// Hilite next one			sub1Sel = tmp;			rect.y = curSub1[sub1Sel].y;			DrawHilite(wPtr, &rect);			DrawSub2Menu(wPtr, curSub1[sub1Sel].pSub2, curSub1[sub1Sel].endItems);		}		break;			case SHOW_LEFT_KEYDOWN:		// Clear sub2 area		ClearSub2Background(wPtr);			// Unhilite current sub1Sel		rect.y = curSub1[sub1Sel].y;		DrawUnHilite(wPtr, &rect);		MapSetupHandler(wPtr, (DATA_POINTER)GR_FALSE);		break;		case SHOW_ENTER_KEYDOWN:		if (curSub1 == iniSub1 && sub1Sel == INISUB1_CHANGE_PWD_OFFSET) {			MapPwdSetHandler(wPtr, NULL);			break;		}		//else fall through	case SHOW_RIGHT_KEYDOWN:		if (curSub1[sub1Sel].selected != -1) {			if (MapSub2Handler(wPtr, (SUB_ITEM *)&curSub1[sub1Sel], curSub1[sub1Sel].pSub2, curSub1[sub1Sel].endItems) != -1) {				int sel;				GR_SIZE retwidth, retheight, retbase;								rect.y = curSub1[sub1Sel].y;				DrawUnHilite(wPtr, &rect);							// Change sub1Sel item to active color				GrSetGCForeground(wPtr->gc, MWPALINDEX(PALINDEX_GRAY));				GrText(wPtr->wid, wPtr->gc, SUB1_XPOS+12, curSub1[sub1Sel].y+SUB_TEXT_YPOS, curSub1[sub1Sel].text,-1, GR_TFASCII);							sel = curSub1[sub1Sel].selected;					GrGetGCTextSize(wPtr->gc, (void *)curSub1[sub1Sel].pSub2[sel].text,-1, GR_TFASCII, &retwidth, &retheight, &retbase);				GrText(wPtr->wid, wPtr->gc, SUB1_XPOS+SUB1_WIDTH-12-retwidth, curSub1[sub1Sel].y+SUB_TEXT_YPOS, 						curSub1[sub1Sel].pSub2[sel].text,-1, GR_TFASCII);								GrSetGCForeground(wPtr->gc, MWPALINDEX(255));			}		}		break;			// Combination keys (9713) to goto DVI Custom Setting when we're at HD DVI Out selection	case SHOW_NINE_KEYDOWN: showDVICustomSetting = 9; break;	case SHOW_SEVEN_KEYDOWN: showDVICustomSetting += 7; break;	case SHOW_ONE_KEYDOWN: showDVICustomSetting += 1; break;	case SHOW_THREE_KEYDOWN:		if (sub1Sel == 1 && showDVICustomSetting == 17)			MapDVISettingHandler(wPtr, (DATA_POINTER)&vidSub1[1]);		break;	// Quit	case SHOW_SETUP_KEYDOWN:		SaveSettings(wPtr);		MapMainWindow(wPtr, (DATA_POINTER)GR_TRUE);		break;			default:		break;	}}int MapSub1Handler(OSD_WINDOW *wPtr, SUB_ITEM *pSub1, int subItems){	GR_RECT rect;	int i; 	//int sel;	//GR_SIZE retwidth, retheight, retbase;			if (pSub1) {		if (subItems > 0)			sub1Items = subItems;		// refind enabled item		sub1Sel = -1;		curSub1 = pSub1;				for (i=0; i<sub1Items; i++)			if (curSub1[i].enabled) {				sub1Sel = i;				break;			}		if (sub1Sel == -1)				return -1;				DrawSub2Menu(wPtr, curSub1[sub1Sel].pSub2, curSub1[sub1Sel].endItems);	}	// Validate video out settings	//else if (curSub1 == vidSub1) {	else		DrawSub1Menu(wPtr, curSub1, sub1Items);	//}		// Map keyboard handler	wPtr->KbdHandler = Sub1KeydownHandler;	wPtr->KbdHandler_dptr = NULL;	rect.x = SUB1_XPOS; rect.y = curSub1[sub1Sel].y; 	rect.width = SUB1_WIDTH; rect.height = SUB1_HEIGHT;	DrawHilite(wPtr, &rect);		return 0;}void DrawSub1Menu(OSD_WINDOW *wPtr, SUB_ITEM *pSub1, int items){	int i, sel;	GR_RECT rect;	GR_SIZE retwidth, retheight, retbase;	GR_COORD x2,y2;		// Clear sub1 background	GrFillRect(wPtr->wid, wPtr->gc_pal6, SUB1_XPOS, SUB1_YPOS, SUB1_WIDTH, 300);		x2 = SUB1_XPOS + SUB1_WIDTH - 1;	y2 = SUB1_YPOS + 300 - 1;	if (pSub1 == audSub1) {		DrawUpperRight(wPtr->wid, wPtr->gc_pal0, x2, SUB1_YPOS);		DrawLowerRight(wPtr->wid, wPtr->gc_pal0, x2, y2);		DrawLowerLeft(wPtr->wid, wPtr->gc_pal0, SUB1_XPOS, y2);	}	else if (pSub1 == vidSub1) {		DrawUpperLeft(wPtr->wid, wPtr->gc_pal0, SUB1_XPOS, SUB1_YPOS);				DrawUpperRight(wPtr->wid, wPtr->gc_pal0, x2, SUB1_YPOS);		DrawLowerRight(wPtr->wid, wPtr->gc_pal0, x2, y2);		DrawLowerLeft(wPtr->wid, wPtr->gc_pal0, SUB1_XPOS, y2);				// Validate Video settings		// if hdout == off && dviout == off, all are enabled.		if (vidSub1[0].selected == HD_OUT_OFF && vidSub1[1].selected == DVI_OUT_OFF) {			vidSub1[0].enabled = vidSub1[1].enabled = vidSub1[2].enabled = GR_TRUE;		}		// if hdout == off && dviout != off, hdout and tvout are disabled.		else if (vidSub1[0].selected == HD_OUT_OFF && vidSub1[1].selected != DVI_OUT_OFF) {			vidSub1[1].enabled = GR_TRUE;			vidSub1[0].enabled = vidSub1[2].enabled = GR_FALSE;		}		// if hdout != off, dviout and tvout are disabled		else {			vidSub1[1].enabled = GR_FALSE;			vidSub1[1].selected = DVI_OUT_OFF;			vidSub1[2].enabled = GR_FALSE;		}			} else {		DrawUpperLeft(wPtr->wid, wPtr->gc_pal0, SUB1_XPOS, SUB1_YPOS);				DrawUpperRight(wPtr->wid, wPtr->gc_pal0, x2, SUB1_YPOS);		DrawLowerRight(wPtr->wid, wPtr->gc_pal0, x2, y2);	}	for (i=0; i<items; i++) {		rect.x = SUB1_XPOS; rect.y = pSub1->y; rect.width = SUB1_WIDTH;  rect.height = SUB1_HEIGHT;				if (pSub1->enabled)			GrSetGCForeground (wPtr->gc, MWPALINDEX(255));		else 			GrSetGCForeground (wPtr->gc, MWPALINDEX(PALINDEX_DISABLE));		GrText(wPtr->wid, wPtr->gc, SUB1_XPOS+12, pSub1->y+SUB_TEXT_YPOS, pSub1->text,-1, GR_TFASCII);		sel = pSub1->selected;		// We use -1 to indicate that sub1 menu has no sub2 items.		if (sel != -1) {			// Display current sub2 selection for a sub1 item			GrGetGCTextSize(wPtr->gc, (void *)pSub1->pSub2[sel].text,-1, 					GR_TFASCII, &retwidth, &retheight, &retbase);						GrText(wPtr->wid, wPtr->gc, SUB1_XPOS+SUB1_WIDTH-12-retwidth, pSub1->y+SUB_TEXT_YPOS, 					pSub1->pSub2[sel].text,-1, GR_TFASCII);		}		pSub1++;	// Next sub1 item	}		GrSetGCForeground (wPtr->gc, MWPALINDEX(255));}

⌨️ 快捷键说明

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