/******************************************************************* * * MainTask * ******************************************************************** */ void MainTask_AppClock(void) { WM_HWIN hWinClock; GUI_AUTODEV AutoDev; PARAM Param; int hour = 0; time_t oldtimestamp = 0; time_t curtimestamp = 0; struct tm *currUtime; //Init time curtimestamp = time(0); oldtimestamp = curtimestamp; currUtime=localtime(&curtimestamp); hWinClock = WM_CreateWindowAsChild(0, 0, 320, 240, WM_HBKWIN, WM_CF_SHOW, _cbClock, 0); WM_SelectWindow(hWinClock); WM_SetCreateFlags(WM_CF_MEMDEV); WM_SetFocus(hWinClock); _MoveShiftWindow(&hWinClock, MEMDEV_ANIMATION_LEFT, WM_Shift_ToLCD, 0); /*hWinClock = WM_CreateWindow(0, 0, 320, 240, WM_CF_SHOW, _cbClock, 0); WM_SetFocus(hWinClock); //_MoveShiftWindow(&hWinCalendar, MEMDEV_ANIMATION_LEFT, WM_Shift_ToLCD, 0); WM_EnableMemdev(hWinClock);*/ /* GUI_SetBkColor(GUI_WHITE); GUI_Clear(); GUI_SetColor(GUI_BLACK);*/ GUI_AA_EnableHiRes(); GUI_AA_SetFactor(MAG); GUI_MEMDEV_CreateAuto(&AutoDev); while (!GUI_CheckCancel(APP_Clock)) { GUI_Delay(10); curtimestamp = time(0); currUtime = localtime(&curtimestamp); if (1 == curtimestamp - oldtimestamp) { Param.Angle1 = (59 - currUtime->tm_sec) * 6 * (3.1415926f / 180); Param.Angle2 = (3599 - ((currUtime->tm_min * 60) + (currUtime->tm_sec)))*0.1*(3.1415926f / 180); hour = (currUtime->tm_hour>12) ? (currUtime->tm_hour - 12) : (currUtime->tm_hour); Param.Angle3 = (43199 - ((hour * 3600) + (currUtime->tm_min * 60) + (currUtime->tm_sec)))*0.0083333*(3.1415926f / 180); GUI_RotatePolygon(Param.aPoint1, _aNeedle[0], GUI_COUNTOF(_aNeedle[0]), Param.Angle1); GUI_RotatePolygon(Param.aPoint2, _aNeedle[1], GUI_COUNTOF(_aNeedle[1]), Param.Angle2); GUI_RotatePolygon(Param.aPoint3, _aNeedle[2], GUI_COUNTOF(_aNeedle[2]), Param.Angle3); GUI_MEMDEV_DrawAuto(&AutoDev, &Param.AutoDevInfo, &Draw, &Param); } oldtimestamp = curtimestamp; } WM_DeleteWindow(hWinClock); hWinClock = 0; }
/******************************************************************* * * _ShowHiresAntialiasing * * Function description * This function creates the memory auto devices and handle the * rotation of the pointers */ static void _ShowHiresAntialiasing(void) { GUI_AUTODEV aAuto[2]; PARAM Param; unsigned i; Param.Factor = 3; GUI_SetBkColor(GUI_BLACK); GUI_Clear(); GUI_SetColor(GUI_WHITE); GUI_SetTextAlign(GUI_TA_HCENTER); GUI_SetFont(&GUI_Font24_ASCII); GUI_DispStringAt("AA_HiResAntialiasing - Sample", 160, 5); GUI_SetFont(&GUI_Font6x8); GUI_DispStringHCenterAt("Using\nhigh\nresolution\nmode", 110, 180); GUI_DispStringHCenterAt("Not using\nhigh\nresolution\nmode", 210, 180); // // Create GUI_AUTODEV objects // for (i = 0; i < countof(aAuto); i++) { GUI_MEMDEV_CreateAuto(&aAuto[i]); } // // Calculate pointer for high resolution // for (i = 0; i < countof(_aPointer); i++) { _aPointerHiRes[i].x = _aPointer[i].x * Param.Factor; _aPointerHiRes[i].y = _aPointer[i].y * Param.Factor; } GUI_AA_SetFactor(Param.Factor); /* Set antialiasing factor */ while (1) { for (i = 0; i < 1800; i++) { float Angle = (i >= 900) ? 1800 - i : i; Angle *= 3.1415926f / 1800; // // Draw pointer with high resolution // GUI_AA_EnableHiRes(); GUI_RotatePolygon(Param.aPoints, _aPointerHiRes, countof(_aPointer), Angle); GUI_MEMDEV_DrawAuto(&aAuto[0], &Param.AutoInfo, _DrawHiRes, &Param); // // Draw pointer without high resolution // GUI_AA_DisableHiRes(); GUI_RotatePolygon(Param.aPoints, _aPointer, countof(_aPointer), Angle); GUI_MEMDEV_DrawAuto(&aAuto[1], &Param.AutoInfo, _Draw, &Param); GUI_Delay(2); } } }
/******************************************************************* * * _ShowHiResPixels This is frame-function for the callback. It creates the window and handles the rotation of polygons and colors. */ static void _ShowHiResPixels(void) { WM_HWIN hWindow; const GUI_FONT *font_old; float pi, step, angle; int i, tm; pi = 3.1415926f; step = pi / 180; GUI_SetBkColor(GUI_BLACK); GUI_Clear(); GUI_SetColor(GUI_WHITE); GUI_SetTextAlign(GUI_TA_HCENTER); font_old = GUI_SetFont(&GUI_Font24_ASCII); GUI_DispStringAt("AA_HiResPixels - Sample", 160, 5); GUI_SetFont(font_old); GUI_SetColor(GUI_RED); GUI_DispStringHCenterAt("not\nantialised", 65, 100); GUI_SetColor(GUI_GREEN); GUI_DispStringHCenterAt("antialised", 160, 100); GUI_SetColor(GUI_BLUE); GUI_DispStringHCenterAt("antialised\nwith high\nresolution", 255, 100); hWindow = WM_CreateWindow(35, 140, 250, 60, WM_CF_SHOW | WM_CF_MEMDEV, &_cbWindow, 0); WM_SelectWindow(hWindow); GUI_AA_SetFactor(AA_FACTOR); while (1) { for (i=0, angle=0; i<360; i++) { tm = GUI_GetTime(); angle += step; GUI_RotatePolygon(_aPolygonHiRes, _aPolygonHiRes_src, POLY_POINTS, angle); GUI_RotatePolygon(_aPolygon, _aPolygon_src, POLY_POINTS, angle); _CalcColor(); WM_InvalidateWindow(hWindow); while (((GUI_GetTime()-tm) < 50) || (WM_Exec1() != 0)); } } WM_DeleteWindow(hWindow); }
/******************************************************************* * * _DemoBandingMemdev */ static void _DemoBandingMemdev(void) { tDrawItContext DrawItContext; int i, swap=0; GUI_SetBkColor(GUI_BLACK); GUI_Clear(); GUI_SetColor(GUI_WHITE); GUI_SetFont(&GUI_Font24_ASCII); GUI_DispStringHCenterAt("MEMDEV_Banding - Sample", 160, 5); GUI_SetFont(&GUI_Font8x9); GUI_DispStringHCenterAt("Banding memory device\nwithout flickering", 160, 40); DrawItContext.XPos_Poly = 160; DrawItContext.YPos_Poly = 120; DrawItContext.YPos_Text = 116; while (1) { swap = ~swap; for (i = 0; i < 220; i++) { float angle = i * 3.1415926 / 55; DrawItContext.XPos_Text = (swap) ? i : 220 - i; /* Rotate the polygon */ GUI_RotatePolygon(DrawItContext.aPointsDest, aPoints, SIZE_OF_ARRAY(aPoints), angle); #if USE_BANDING_MEMDEV { GUI_RECT Rect = {0, 70, 320,170}; /* Use banding memory device for drawing */ GUI_MEMDEV_Draw(&Rect, &_DrawIt, &DrawItContext, 0, 0); } #else /* Simple drawing without using memory devices */ _DrawIt((void *)&DrawItContext); #endif #ifdef WIN32 GUI_Delay(20); /* Use a short delay only in the simulation */ #endif } } }
static void _cbDialog(WM_MESSAGE * pMsg) { WM_MESSAGE myMsg; int val; int sldId; int i; GUI_RECT r; switch(pMsg->MsgId) { case USER_MSG_DIM: HSD_SLIDER_Loop(Slideres[1]); break; case USER_MSG_MNT_SWT: break; case USER_MSG_SKIN: pSkin = &(SysWinSkins[pMsg->Data.v]); WINDOW_SetBkColor(pMsg->hWin, pSkin->bkColor); for(i=SLD_NUM; i;) { i--; HSD_SLIDER_SetBkColor(Slideres[i], pSkin->sldBk); HSD_SLIDER_SetFocusBkColor (Slideres[i], pSkin->sldBk); HSD_SLIDER_SetSlotColor(Slideres[i], pSkin->sldSlot); HSD_SLIDER_SetFocusSlotColor(Slideres[i], pSkin->sldSlot); HSD_SLIDER_SetSliderColor(Slideres[i], pSkin->sldSlider); HSD_SLIDER_SetFocusSliderColor(Slideres[i], pSkin->sldFocusSlider); } break; case WM_INIT_DIALOG: agentConf.Brt = SysConf.Brt; agentConf.Shape = SysConf.Shape; agentConf.Skin = SysConf.Skin; agentConf.Unit = SysConf.Unit; agentConf.Vol = SysConf.Vol; pSkin = &(SysWinSkins[SysConf.Skin]); Slideres[0] = WM_GetDialogItem(pMsg->hWin, ID_SLIDER_SKIN); WM_SetCallback(Slideres[0], &sldListener); HSD_SLIDER_SetRange(Slideres[0], SKIN_Day, SKIN_Night); HSD_SLIDER_SetValue(Slideres[0], SysConf.Skin); Slideres[1] = WM_GetDialogItem(pMsg->hWin, ID_SLIDER_BRT); WM_SetCallback(Slideres[1], &sldListener); HSD_SLIDER_SetNumTicks(Slideres[1], 6); HSD_SLIDER_SetRange(Slideres[1], 1, 6); HSD_SLIDER_SetValue(Slideres[1], SysConf.Brt); Slideres[2] = WM_GetDialogItem(pMsg->hWin, ID_SLIDER_VOL); WM_SetCallback(Slideres[2], &sldListener); HSD_SLIDER_SetNumTicks(Slideres[2], 6); HSD_SLIDER_SetRange(Slideres[2], 1, 6); HSD_SLIDER_SetValue(Slideres[2], SysConf.Vol); Slideres[3] = WM_GetDialogItem(pMsg->hWin, ID_SLIDER_UNIT); WM_SetCallback(Slideres[3], &sldListener); HSD_SLIDER_SetRange(Slideres[3], UNIT_nm, UNIT_km); HSD_SLIDER_SetValue(Slideres[3], SysConf.Unit); Slideres[4] = WM_GetDialogItem(pMsg->hWin, ID_SLIDER_SHAPE); WM_SetCallback(Slideres[4], &sldListener); HSD_SLIDER_SetRange(Slideres[4], SHAPE_Boat, SHAPE_Fish); HSD_SLIDER_SetValue(Slideres[4], SysConf.Shape); Slideres[5] = WM_GetDialogItem(pMsg->hWin, ID_SLIDER_REVIVE); WM_SetCallback(Slideres[5], &sldReviveCallback); HSD_SLIDER_SetRange(Slideres[5], 0, 4); HSD_SLIDER_SetValue(Slideres[5], 0); // // hBtRevive = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_REVIVE); // BUTTON_SetText(hBtRevive, "确定"); // BUTTON_SetTextColor(hBtRevive, BUTTON_CI_PRESSED, GUI_BLACK); // BUTTON_SetBkColor(hBtRevive, BUTTON_BI_UNPRESSED, pSkin->sldSlider); // WM_SetCallback(hBtRevive, &myButtonListener); WINDOW_SetBkColor(pMsg->hWin, pSkin->bkColor); for(i=SLD_NUM; i; ) { i--; HSD_SLIDER_SetBkColor(Slideres[i], pSkin->sldBk); HSD_SLIDER_SetFocusBkColor (Slideres[i], pSkin->sldBk); HSD_SLIDER_SetSlotColor(Slideres[i], pSkin->sldSlot); HSD_SLIDER_SetFocusSlotColor(Slideres[i], pSkin->sldSlot); HSD_SLIDER_SetSliderColor(Slideres[i], pSkin->sldSlider); HSD_SLIDER_SetFocusSliderColor(Slideres[i], pSkin->sldFocusSlider); } break; case USER_MSG_REPLY: if(pMsg->Data.v == REPLY_OK) { if(agentConf.Skin != SysConf.Skin) { myMsg.MsgId = USER_MSG_SKIN; myMsg.Data.v = agentConf.Skin; WM_BroadcastMessage(&myMsg); } if(agentConf.Shape != SysConf.Shape) { myMsg.hWin = mapWin; myMsg.MsgId = USER_MSG_SHAPE; myMsg.Data.v = agentConf.Shape; WM_SendMessage(myMsg.hWin, &myMsg); } memcpy(&SysConf, &agentConf, sizeof(SysConf)); sysStore(); } else { /// Roll back HSD_SLIDER_SetValue(Slideres[0], SysConf.Skin); HSD_SLIDER_SetValue(Slideres[1], SysConf.Brt); HSD_SLIDER_SetValue(Slideres[2], SysConf.Vol); HSD_SLIDER_SetValue(Slideres[3], SysConf.Unit); HSD_SLIDER_SetValue(Slideres[4], SysConf.Shape); } WM_SetFocus(Slideres[0]); WM_SetFocus(menuWin); break; case WM_NOTIFY_PARENT: switch(pMsg->Data.v) { case WM_NOTIFICATION_VALUE_CHANGED: sldId = WM_GetId(pMsg->hWinSrc) - ID_SLIDER_SKIN; if(sldId >=0 && sldId < SLD_NUM-1) { val = HSD_SLIDER_GetValue(Slideres[sldId]); ProcChanging[sldId](pMsg, val); } break; } break; case WM_PAINT:{ GUI_POINT aEnlargePoints[11]; WM_GetClientRectEx(pMsg->hWin, &r); GUI_SetColor(pSkin->bkColor); GUI_FillRectEx(&r); GUI_SetColor(pSkin->ClientbkColor); r.x0 = r.x0 + 10; r.x1 = r.x1 - 10; r.y0 = r.y0 + 40; r.y1 = r.y1 - 40; GUI_FillRectEx(&r); GUI_SetFont(&GUI_Font30); GUI_SetTextMode(GUI_TEXTMODE_TRANS); GUI_SetColor(pSkin->txColor); GUI_DispStringAt("夜间模式:", 30, Win_SysSet_txOrg ); GUI_DispStringAt("亮度设置:", 30, Win_SysSet_txOrg+(Win_SysSet_Text_HEIGHT+Win_SysSet_txGrap)); GUI_DispStringAt("音量设置:", 30, Win_SysSet_txOrg+(Win_SysSet_Text_HEIGHT+Win_SysSet_txGrap)*2); GUI_DispStringAt("单位设置:", 30, Win_SysSet_txOrg+(Win_SysSet_Text_HEIGHT+Win_SysSet_txGrap)*3); GUI_DispStringAt("船位设置:", 30, Win_SysSet_txOrg+(Win_SysSet_Text_HEIGHT+Win_SysSet_txGrap)*4); GUI_DispStringAt("关闭", 130,Win_SysSet_txOrg); GUI_DispStringAt("开启", 310,Win_SysSet_txOrg); GUI_DispStringAt("恢复出厂设置", 30, Win_SysSet_txOrg + (Win_SysSet_Text_HEIGHT+Win_SysSet_txGrap)*5); GUI_DispStringAt("系统版本:",30, Win_SysSet_txOrg + (Win_SysSet_Text_HEIGHT+Win_SysSet_txGrap)*6); GUI_DispStringAt(VERSION, 180,Win_SysSet_txOrg + (Win_SysSet_Text_HEIGHT+Win_SysSet_txGrap)*6); // sprintf(pStrBuf, "%s", __TIME__); // GUI_DispStringAt(pStrBuf,400,Win_SysSet_txOrg + (Win_SysSet_Text_HEIGHT+Win_SysSet_txGrap)*5); // sprintf(pStrBuf, "%s", __DATE__); // GUI_DispStringAt(pStrBuf,400,Win_SysSet_txOrg + (Win_SysSet_Text_HEIGHT+Win_SysSet_txGrap)*6); GUI_SetFont (&GUI_Font32_1); GUI_DispStringAt("nm", 140,Win_SysSet_txOrg+(Win_SysSet_Text_HEIGHT+Win_SysSet_txGrap)*3); GUI_DispStringAt("km", 310,Win_SysSet_txOrg+(Win_SysSet_Text_HEIGHT+Win_SysSet_txGrap)*3); GUI_RotatePolygon(aEnlargePoints, Points_fish, 11, -1.57); GUI_DrawPolygon(aEnlargePoints, 11, 330, Win_SysSet_txOrg+(Win_SysSet_Text_HEIGHT+Win_SysSet_txGrap)*4+18 ); GUI_DrawPolygon(Points_boat, 3, 160, Win_SysSet_txOrg+(Win_SysSet_Text_HEIGHT+Win_SysSet_txGrap)*4+18); GUI_SetFont(&GUI_Font24); GUI_DispStringAt("使用",30, Win_SysSet_txOrg+(Win_SysSet_Text_HEIGHT+Win_SysSet_txGrap)*7+10); GUI_DispStringAt("选择选项及调整音量亮度数字",118, Win_SysSet_txOrg+(Win_SysSet_Text_HEIGHT+Win_SysSet_txGrap)*7+10); GUI_SetColor(pSkin->sldSlider); GUI_DispStringAt("左右", 78, Win_SysSet_txOrg+(Win_SysSet_Text_HEIGHT+Win_SysSet_txGrap)*7+10); }break; default: WM_DefaultProc(pMsg); break; } }