/* ******************************************************************************* * ShowPictureEx * * Description: * 把图片数据解析到指定的地址中,并且显示出来. * 如果指定的地址为NULL, 则可以存放在任何地址。 * * Parameters: * Para : input. Boot阶段的参数。 * Path : input. 图片存放在介质中的位置,如“c:\logo.bmp” * Addr : input. 存放解析后的图片, * * Return value: * 0 : 成功 * !0 : 失败 * * note: * void * ******************************************************************************* */ __u32 ShowPictureEx(char *Path, __u32 address) { Picture_t PictureInfo; __s32 ret = 0; display_layer_info_t *layer_para = NULL; /* 参数初始化 */ if(!board_res.layer_hd) { return 0; } memset(&PictureInfo, 0, sizeof(Picture_t)); ret = Parse_Pic_BMP_ByPath(Path, &PictureInfo, address); if(ret != 0) { DMSG_PANIC("ERR: Parse_Pic_BMP failed\n"); goto error; } /* 显示图片 */ layer_para = ui_AllocLayerPara(&PictureInfo); ShowLayer(board_res.layer_hd, layer_para, board_res.display_source); #ifndef SPEED_UP_BOOT wBoot_timer_delay(50); #endif return (__u32)layer_para; error: return 0; }
/* ******************************************************************************* * ShowPicture * * Description: * 以图片的存储路径来显示一张图片 * * Parameters: * Path : 需要显示的图片路径,只支持BMP格 * picture_group : 图片个数,最多同时有8个 * show_way: 显示方式 参数保留,暂时不支持 * 要求所有图片的大小一致 * Return value: * 0 : 成功 * !0 : 失败 * * note: * void * ******************************************************************************* */ __s32 LCD_DisplayInit(void) { __u32 screen_width = 0; char font_name[16]; display_layer_info_t *layer_para = NULL; /* 参数初始化 */ memset(&display_info, 0, sizeof(display_info_set_t)); memset(font_name, 0, 16); //获取字体大小 screen_width = De_GetSceenWidth(); if(screen_width > 480) { WORD_SIZE = 32; strcpy(font_name, "c:\\font32.sft"); } else { WORD_SIZE = 24; strcpy(font_name, "c:\\font24.sft"); } //申请一个图层用于显示,并获取display buffer的地址 layer_para = LCD_DisplayAllocLayerPara(); if(!layer_para) { return -1; } open_font(font_name, WORD_SIZE, display_info.screen_width, display_info.screen_buf); //打开字库 /* 显示图片 */ ShowLayer(board_res.layer_hd, layer_para); wBoot_timer_delay(50); return 0; }
void CGameLevel::OpenUpgradeLayer() { if (!mUpgradeLayer) { CCArray * ccbNameArr = CCArray::create(); CCArray * loaderArr = CCArray::create(); ccbNameArr->addObject(CCString::create("UpgradeLayer")); ccbNameArr->addObject(CCString::create("PlaneDisplayLayer")); ccbNameArr->addObject(CCString::create("PlanAttributeLayer")); ccbNameArr->addObject(CCString::create("MenuTopBarLayer")); loaderArr->addObject(UpgradeLayerLoader::loader()); loaderArr->addObject(PlaneDisplayLayerLoader::loader()); loaderArr->addObject(PlanAttributeLayerLoader::loader()); loaderArr->addObject(MenuTopBarLayerLoader::loader()); mUpgradeLayer = (UpgradeLayer*)CCBManager::LoadCCBByNameAndLoader(ccbNameArr, loaderArr); mUpgradeLayer->SetDelegate(this); addChild(mUpgradeLayer); } ShowLayer(mUpgradeLayer); }
__u32 ShowBatteryCharge_init(int rate) { bat_charge_show *battery_info = NULL; __s32 ret = 0, i; char pic_name[32]; /* 参数初始化 */ if(!board_res.layer_hd) { return 0; } battery_info = wBoot_malloc(sizeof(bat_charge_show)); if(!battery_info) { return 0; } memset(battery_info, 0, sizeof(bat_charge_show)); memset(pic_name, 0, 32); strcpy(pic_name, "c:\\os_show\\bat0.bmp"); for(i=0;i<10;i++) { pic_name[14] = '0' + i; ret = Parse_Pic_BMP_ByPath(pic_name, &battery_info->battery[i], 0); if(ret != 0) { __inf("parser bmp file %s failed\n", pic_name); return 0; } } ret = Parse_Pic_BMP_ByPath("c:\\os_show\\bat10.bmp", &battery_info->battery[10], 0); if(ret != 0) { __inf("parser bmp file c:\\os_show\\bat10.bmp failed\n"); return 0; } battery_info->PictureInfo.BitCount = battery_info->battery[0].BitCount; battery_info->PictureInfo.Height = battery_info->battery[0].Height; battery_info->PictureInfo.Width = battery_info->battery[0].Width; battery_info->PictureInfo.BufferSize = battery_info->PictureInfo.Width * battery_info->PictureInfo.Height * 4; battery_info->PictureInfo.Buffer = wBoot_malloc(battery_info->PictureInfo.BufferSize); battery_info->PictureInfo.RowSize = battery_info->PictureInfo.Width * 4; battery_info->buffersize = battery_info->PictureInfo.BufferSize; if(!battery_info->PictureInfo.Buffer) { return 0; } memcpy(battery_info->PictureInfo.Buffer, battery_info->battery[0].Buffer, battery_info->PictureInfo.BufferSize); /* 显示图片 */ battery_info->layer_para = ui_AllocLayerPara(&battery_info->PictureInfo); ShowLayer(board_res.layer_hd, battery_info->layer_para, board_res.display_source); return (__u32)battery_info; }
void CGameLevel::OpenBuyPowerLayer() { if (!mBuyPowerLayer) { mBuyPowerLayer = (BuyPowerLayer*)CCBManager::LoadCCBByNameAndLoader("BuyPowerLayer", BuyPowerLayerLoader::loader()); addChild(mBuyPowerLayer); mBuyPowerLayer->SetDelegate(this); } ShowLayer(mBuyPowerLayer); }
void CGameLevel::OpenStartGameLayer() { if (!mStartGameLayer) { mStartGameLayer = (StartGameLayer*)CCBManager::LoadCCBByNameAndLoader("StartGameLayer", StartGameLayerLoader::loader()); mStartGameLayer->SetDelegate(this); addChild(mStartGameLayer); } ShowLayer(mStartGameLayer); }
void CGameLevel::OpenGiftBagLayer() { if (!mGiftBagLayer) { mGiftBagLayer = (GiftBagLayer*)CCBManager::LoadCCBByNameAndLoader("GiftBagLayer", GiftBagLayerLoader::loader()); mGiftBagLayer->SetDelegate(this); addChild(mGiftBagLayer); } ShowLayer(mGiftBagLayer); }
void CLayerTreeDlg::ShowLayer(HTREEITEM hItem, BOOL bShow) { CString sLayerName = m_tree.GetItemText(hItem); HTREEITEM hChild = m_tree.GetNextItem(hItem,TVGN_CHILD); // 只有树叶才有对应的图层 if (hChild == NULL) { ShowLayer(sLayerName, bShow); //如果是面层,还要把它的填充图层打开 CString sHatchLayer; sHatchLayer.Format("%s_填充",sLayerName); bool hasHatch = false; acDocManager->lockDocument(acDocManager->curDocument()); AcDbLayerTable * pLayerTbl = NULL; Acad::ErrorStatus es = acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pLayerTbl,AcDb::kForRead); if (pLayerTbl->has(sHatchLayer)) { AcDbLayerTableRecord * pLayerTbRcd = NULL; es = pLayerTbl->getAt(sHatchLayer,pLayerTbRcd,AcDb::kForWrite); pLayerTbRcd->setIsOff(bShow == 0); pLayerTbRcd->close(); hasHatch = true; } pLayerTbl->close(); acDocManager->unlockDocument(acDocManager->curDocument()); } while(hChild != NULL) { ShowLayer(hChild, bShow); hChild = m_tree.GetNextItem(hChild,TVGN_NEXT); } }
void CGameLevel::InitBottomLayer() { CCArray * ccbNameArr = CCArray::create(); CCArray * loaderArr = CCArray::create(); ccbNameArr->addObject(CCString::create("LevelBottomLayer")); ccbNameArr->addObject(CCString::create("MenuTopBarLayer")); loaderArr->addObject(LevelBottomLayerLoader::loader()); loaderArr->addObject(MenuTopBarLayerLoader::loader()); LevelBottomLayer * layer = (LevelBottomLayer*)CCBManager::LoadCCBByNameAndLoader(ccbNameArr, loaderArr); layer->SetDelegate(this); addChild(layer); ShowLayer(layer); }
/* ******************************************************************************* * ShowPicture * * Description: * 以图片的存储路径来显示一张图片 * * Parameters: * Path : 需要显示的图片路径,只支持BMP格 * picture_group : 图片个数,最多同时有8个 * show_way: 显示方式 参数保留,暂时不支持 * 要求所有图片的大小一致 * Return value: * 0 : 成功 * !0 : 失败 * * note: * void * ******************************************************************************* */ __hdle ShowMultiPicture(pic_name_info_t *pic_name_info, __u32 picture_group, __u32 show_way) { __s32 ret; __u32 i, j = 0; __u32 tmp_left, tmp_top, tmp_width; char *tmp_addr, *base_tmp_addr; char *tmp_pic_addr; __u32 pic_width, pic_height; ui_show_multi_set_t *pic_info = NULL; /* 参数初始化 */ if(!board_res.layer_hd) { return (__hdle)0; } //寻找出所有的图片格式 if(picture_group > 8) { picture_group = 8; } pic_info = (ui_show_multi_set_t *)wBoot_malloc(sizeof(ui_show_multi_set_t)); if(!pic_info) { return (__hdle)0; } memset((void *)pic_info, 0, sizeof(ui_show_multi_set_t)); pic_info->pic_total = picture_group; for(i=0;i<picture_group;i++) { for(j=0;j<pic_name_info[i].valid_num;j++) { ret = Parse_Pic_BMP_ByPath(pic_name_info[i].name[j], &(pic_info->pic[i].PictureInfo[pic_info->pic[i].valid_num]), 0); if(ret) { __inf("decode %s bmp file failed\n", pic_name_info[i].name[j]); } else { pic_info->pic[i].valid_num ++; } } } //申请一个图层用于显示,并获取display buffer的地址 pic_info->layer_para = ui_multi_AllocLayerPara((void *)&(pic_info->lcd_info), 0); //根据获取的用户数据,开始填充参数 //暂时只做左右排列 //按照从左到右摆放的方式,寻找每个编组的图应该在的位置 pic_width = pic_info->pic[0].PictureInfo[0].Width; pic_height = pic_info->pic[0].PictureInfo[0].Height; tmp_top = ( pic_info->lcd_info.lcd_height - pic_height)>>1; tmp_width= pic_info->lcd_info.lcd_width/picture_group; tmp_left = (tmp_width - pic_width)>>1; for(i=0;i<picture_group;i++) { pic_info->pic[i].left = tmp_left + i * tmp_width; pic_info->pic[i].top = tmp_top; } //开始贴图,第一次 base_tmp_addr = (char *)pic_info->lcd_info.display_buffer; base_tmp_addr += tmp_top * pic_info->lcd_info.lcd_width * 4; //开始一个图一个图的开始贴图 for(i=0;i<picture_group;i++) { tmp_addr = base_tmp_addr + (pic_info->pic[i].left<<2); tmp_pic_addr = (char *)pic_info->pic[i].PictureInfo[0].Buffer; for(j=0;j<pic_height;j++) { memcpy(tmp_addr, tmp_pic_addr, pic_width << 2); tmp_addr += pic_info->lcd_info.lcd_width * 4; tmp_pic_addr += pic_width << 2; } } /* 显示图片 */ ShowLayer(board_res.layer_hd, pic_info->layer_para, board_res.display_source); wBoot_timer_delay(50); return (__hdle)pic_info; }
//----------------------------------------------------------------------------- void CLayerTreeDlg::OnNMClickLayerTree(NMHDR *pNMHDR, LRESULT *pResult) { // TODO: 在此添加控件通知处理程序代码 *pResult = 0; UINT uFlag; CPoint pt; CString sSelLayer; HTREEITEM SelRoot,ParRoot,NexRoot; pt = CPoint(this->GetCurrentMessage()->pt); m_tree.ScreenToClient(&pt); SelRoot = m_tree.HitTest(pt,&uFlag); if (NULL == SelRoot) return; if (uFlag & TVHT_ONITEMSTATEICON) { BOOL bChecked = m_tree.GetCheck(SelRoot); //置反选中状态 SetTreeCheck(SelRoot, !bChecked); //分析是否有必要对树枝进行调整 ParRoot = m_tree.GetParentItem(SelRoot); while (ParRoot != NULL) { if (bChecked) m_tree.SetCheck(ParRoot,FALSE);//当前处在被选择状态即将被取消选择 else { int k=0;//当前处在非选择状态即将有可能处于选择状态(标志位) NexRoot=m_tree.GetNextItem(ParRoot,TVGN_CHILD); if(NexRoot!=SelRoot) { if(!m_tree.GetCheck(NexRoot)) k=1; } if(k==0) { while(TRUE) { NexRoot=m_tree.GetNextItem(NexRoot,TVGN_NEXT); if(NexRoot==NULL) break; if(NexRoot==SelRoot) continue; if(!m_tree.GetCheck(NexRoot)) { k=1; break; } } } if(k==0) m_tree.SetCheck(ParRoot); } ParRoot = m_tree.GetParentItem(ParRoot); } m_tree.SetCheck(SelRoot, bChecked); ShowLayer(SelRoot, !bChecked); // sendCommandToAutoCAD("redraw "); } else if(!m_tree.ItemHasChildren(SelRoot)) { CString strLayerName = m_tree.GetItemText(SelRoot); Acad::ErrorStatus es = Acad::eOk; AcDbDatabase* pDB = acdbHostApplicationServices()->workingDatabase(); if (NULL == pDB) return; AcDbLayerTable *pLyTable = NULL; AcDbLayerTableRecord *pLyRcd = NULL; es = pDB->getSymbolTable(pLyTable,AcDb::kForRead); //获得当前数据库中层表指针 if ( es != Acad::eOk ) { acutPrintf("\n获取LayerTable的时候发生错误,请稍后再试。\n"); return; } if ( !pLyTable->has(strLayerName) ) { pLyTable->close(); return; } pLyTable->close(); SetCurrentLayer(strLayerName); } }