📄 sub1handler.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 + -