int SimpleSliderDraw(void * handler, H_LYR layer, RECT * rect, int current) { SimpleSliderDesc * desc; int i; int blocks; OFFSET locat; HTHEME bmpTheme; void * bmpData; #ifndef REGULAR_DRAW HBLOCK backbg; HBLOCK foreg; FB fb; #endif if (NULL == handler) { return -1; } desc = (SimpleSliderDesc *)handler; // To get the current display position current = (current > desc->cls.limit) ? desc->cls.limit : current; blocks = (current * desc->cls.bmp_nr) / desc->cls.limit; blocks = (blocks > desc->cls.bmp_nr) ? desc->cls.bmp_nr : blocks; #ifndef REGULAR_DRAW GUI_LyrWinGetFB(layer, &fb); backbg = GUI_BlockCreateFrom(NULL, fb.size.width, fb.size.height, fb.addr[0], 0); #endif GUI_LyrWinSel(layer); if (desc->drew_position < 0) { for (i = 1; i <= blocks; i++) { if (0 == getStartPoint(&locat, &desc->cls.start_point, desc->cls.direc, i, desc->cls.bmp_nr, &desc->cls.puzzle)) { bmpTheme = dsk_theme_open(desc->bmps[i - 1]); bmpData = dsk_theme_hdl2buf(bmpTheme); #ifdef REGULAR_DRAW GUI_BMP_Draw(bmpData, locat.x + rect->x, locat.y + rect->y); #else eLIBs_memcpy(desc->puzzleData, (void *)((int)bmpData + BITMAPHEADERSIZE), desc->puzzleDataSize); foreg = GUI_BlockCreateFrom(NULL, desc->cls.puzzle.width, desc->cls.puzzle.height, desc->puzzleData, 0); GUI_BlockBitBlit(backbg, locat.x + rect->x, locat.y + rect->y, foreg, NULL, BLITFLAG_COLORALPHA, NULL); GUI_BlockDelete(foreg); #endif dsk_theme_close(bmpTheme); // LogMI("Simple Slider Piece x = %d, y = %d, bmp = %d", locat.x, locat.y, i - 1); } } for (; i <= desc->cls.bmp_nr; i++) { if (0 == getStartPoint(&locat, &desc->cls.start_point, desc->cls.direc, i, desc->cls.bmp_nr, &desc->cls.puzzle)) { bmpTheme = dsk_theme_open(desc->cls.bgbmp_piece); bmpData = dsk_theme_hdl2buf(bmpTheme); #ifdef REGULAR_DRAW GUI_BMP_Draw(bmpData, locat.x + rect->x, locat.y + rect->y); #else eLIBs_memcpy(desc->puzzleData, (void *)((int)bmpData + BITMAPHEADERSIZE), desc->puzzleDataSize); foreg = GUI_BlockCreateFrom(NULL, desc->cls.puzzle.width, desc->cls.puzzle.height, desc->puzzleData, 0); GUI_BlockBitBlit(backbg, locat.x + rect->x, locat.y + rect->y, foreg, NULL, BLITFLAG_COLORALPHA, NULL); GUI_BlockDelete(foreg); #endif dsk_theme_close(bmpTheme); // LogMI("Simple Slider Piece x = %d, y = %d", locat.x, locat.y); } } } else if (desc->drew_position < blocks) { for (i = 1 + desc->drew_position; i <= blocks; i++) { if (0 == getStartPoint(&locat, &desc->cls.start_point, desc->cls.direc, i, desc->cls.bmp_nr, &desc->cls.puzzle)) { bmpTheme = dsk_theme_open(desc->bmps[i - 1]); bmpData = dsk_theme_hdl2buf(bmpTheme); #ifdef REGULAR_DRAW GUI_BMP_Draw(bmpData, locat.x + rect->x, locat.y + rect->y); #else eLIBs_memcpy(desc->puzzleData, (void *)((int)bmpData + BITMAPHEADERSIZE), desc->puzzleDataSize); foreg = GUI_BlockCreateFrom(NULL, desc->cls.puzzle.width, desc->cls.puzzle.height, desc->puzzleData, 0); GUI_BlockBitBlit(backbg, locat.x + rect->x, locat.y + rect->y, foreg, NULL, BLITFLAG_COLORALPHA, NULL); GUI_BlockDelete(foreg); #endif dsk_theme_close(bmpTheme); // LogMI("Simple Slider Piece x = %d, y = %d, bmp = %d", locat.x, locat.y, i - 1); } } } else if (desc->drew_position > blocks) { for (i = desc->drew_position; i > blocks; i--) { if (0 == getStartPoint(&locat, &desc->cls.start_point, desc->cls.direc, i, desc->cls.bmp_nr, &desc->cls.puzzle)) { bmpTheme = dsk_theme_open(desc->cls.bgbmp_piece); bmpData = dsk_theme_hdl2buf(bmpTheme); #ifdef REGULAR_DRAW GUI_BMP_Draw(bmpData, locat.x + rect->x, locat.y + rect->y); #else eLIBs_memcpy(desc->puzzleData, (void *)((int)bmpData + BITMAPHEADERSIZE), desc->puzzleDataSize); foreg = GUI_BlockCreateFrom(NULL, desc->cls.puzzle.width, desc->cls.puzzle.height, desc->puzzleData, 0); GUI_BlockBitBlit(backbg, locat.x + rect->x, locat.y + rect->y, foreg, NULL, BLITFLAG_COLORALPHA, NULL); GUI_BlockDelete(foreg); #endif dsk_theme_close(bmpTheme); // LogMI("Simple Slider Piece x = %d, y = %d", locat.x, locat.y); } } } desc->drew_position = blocks; #ifndef REGULAR_DRAW GUI_BlockDelete(backbg); #endif return 0; }
__u32 TxtLayer_GetLayerInfo(txtlayer_man_t *ptxtlayer) { __u32 ret; FB tmpfb; FB foucs_FB; __layerwincreate_para_t newlyr_info; /*get TxtLayer sceen size*/ ret = GUI_LyrWinGetScnWindow(ptxtlayer->layer,&ptxtlayer->scnrect); if(ret !=0) { __wrn("layer set sceen window failed,layer handle = %d\n",ptxtlayer->layer); return __LINE__; } /*获取图层的framebuffer相关信息*/ ret = GUI_LyrWinGetFB(ptxtlayer->layer,&tmpfb); if(ret != 0) { __wrn("layer get framebuffer failed layer handle = %d\n",ptxtlayer->layer); return __LINE__; } /*设置图层的framebuffer信息至txtbuffer结构*/ ptxtlayer->txtbuffer->buffer = tmpfb.addr[0]; ptxtlayer->txtbuffer->layer_format.type = FB_TYPE_RGB; ptxtlayer->txtbuffer->layer_format = tmpfb.fmt; ptxtlayer->txtbuffer->rectsz.width = tmpfb.size.width; ptxtlayer->txtbuffer->rectsz.height = tmpfb.size.height; ptxtlayer->txtbuffer->vrect.x = 0; ptxtlayer->txtbuffer->vrect.y = 0; foucs_FB = tmpfb; foucs_FB.size.height = ptxtlayer->ptxtbox->item_w * 2; foucs_FB.addr[0] = 0; ptxtlayer->sec_layer.alpha_en = 0; ptxtlayer->sec_layer.alpha_val = 0; ptxtlayer->sec_layer.channel = DISP_LAYER_OUTPUT_CHN_DE_CH1; ptxtlayer->sec_layer.ck_mode = 0; ptxtlayer->sec_layer.fb = &foucs_FB; ptxtlayer->sec_layer.mode = DISP_LAYER_WORK_MODE_NORMAL; ptxtlayer->sec_layer.pipe = 0; ptxtlayer->sec_layer.prio = 0; ptxtlayer->sec_layer.scn_win.x = 0; ptxtlayer->sec_layer.scn_win.y = 0; ptxtlayer->sec_layer.scn_win.width = 0; ptxtlayer->sec_layer.scn_win.height = 0; ptxtlayer->sec_layer.scn_win.x = 0; ptxtlayer->sec_layer.scn_win.y = 0; ptxtlayer->sec_layer.scn_win.width = 0; ptxtlayer->sec_layer.scn_win.height = 0; newlyr_info.initsta = GUI_LYRWIN_STA_SLEEP; newlyr_info.lyrpara = &ptxtlayer->sec_layer; newlyr_info.name = "txtbox sec lyr"; ptxtlayer->focus_lyr = GUI_LyrWinCreate(&newlyr_info); /*获取图层的framebuffer相关信息*/ ret = GUI_LyrWinGetFB(ptxtlayer->focus_lyr,&foucs_FB); if(ret != 0) { __wrn("layer get framebuffer failed layer handle = %d\n",ptxtlayer->layer); return __LINE__; } __HERE__ ptxtlayer->foucs_FB = foucs_FB.addr[0]; return OK; }
static __s32 clockWndProc(__gui_msg_t * msg) { __u32 clockhands[CLOCKHANDS]; FB fb; HTHEME hback; HBLOCK block; void * pic; int length; int start_x; int start_y; ClockPrivate * draw; draw = (ClockPrivate *)GUI_WinGetAttr(msg->h_deswin); if ((!draw) || (-1 == EWin_CheckInherit(&draw->scrolling.ewii)) || (!(draw->scrolling.ewii.mask[0] & SCR_WNDINFOMASK_SBUTTON))) { LogE("Null or wrong scrolling page window private data"); return -1; } switch (msg->id) { case GUI_MSG_CREATE: draw->scrolling.ewii.mask[0] |= SCR_WNDINFOMASK_GESTURE; clockhands[0] = ID_CLOCK_PNG_DIG_HAND_H1_BMP; clockhands[1] = ID_CLOCK_PNG_DIG_HAND_H2_BMP; clockhands[2] = ID_CLOCK_PNG_DIG_HAND_H3_BMP; clockhands[3] = ID_CLOCK_PNG_DIG_HAND_H4_BMP; clockhands[4] = ID_CLOCK_PNG_DIG_HAND_H5_BMP; clockhands[5] = ID_CLOCK_PNG_DIG_HAND_H6_BMP; clockhands[6] = ID_CLOCK_PNG_DIG_HAND_H7_BMP; clockhands[7] = ID_CLOCK_PNG_DIG_HAND_H8_BMP; draw->hhdl = picswap_quadrant_begin(clockhands, 25, 80); clockhands[0] = ID_CLOCK_PNG_DIG_HAND_M1_BMP; clockhands[1] = ID_CLOCK_PNG_DIG_HAND_M2_BMP; clockhands[2] = ID_CLOCK_PNG_DIG_HAND_M3_BMP; clockhands[3] = ID_CLOCK_PNG_DIG_HAND_M4_BMP; clockhands[4] = ID_CLOCK_PNG_DIG_HAND_M5_BMP; clockhands[5] = ID_CLOCK_PNG_DIG_HAND_M6_BMP; clockhands[6] = ID_CLOCK_PNG_DIG_HAND_M7_BMP; clockhands[7] = ID_CLOCK_PNG_DIG_HAND_M8_BMP; draw->mhdl = picswap_quadrant_begin(clockhands, 25, 80); clockhands[0] = ID_CLOCK_PNG_DIG_HAND_S1_BMP; clockhands[1] = ID_CLOCK_PNG_DIG_HAND_S2_BMP; clockhands[2] = ID_CLOCK_PNG_DIG_HAND_S3_BMP; clockhands[3] = ID_CLOCK_PNG_DIG_HAND_S4_BMP; clockhands[4] = ID_CLOCK_PNG_DIG_HAND_S5_BMP; clockhands[5] = ID_CLOCK_PNG_DIG_HAND_S6_BMP; clockhands[6] = ID_CLOCK_PNG_DIG_HAND_S7_BMP; clockhands[7] = ID_CLOCK_PNG_DIG_HAND_S8_BMP; draw->shdl = picswap_quadrant_begin(clockhands, 25, 80); draw->bgicon = ID_CLOCK_BMP_DIGITALCLOCK_BG_BMP; GUI_LyrWinGetFB(draw->scrolling.ewii.lyrLow, &fb); draw->bgblock = GUI_BlockCreateFrom(NULL, fb.size.width, fb.size.height, fb.addr[0], 0); GUI_LyrWinGetFB(draw->scrolling.ewii.lyrHigher, &fb); draw->forgblock = GUI_BlockCreateFrom(NULL, fb.size.width, fb.size.height, fb.addr[0], 0); esTIME_GetTime(&draw->tm); draw->minute = draw->tm.minute; draw->invalidate |= INVALIDATE_BACKGROUND|INVALIDATE_FOREGROUND; break; case GUI_MSG_DESTROY: GUI_BlockDelete(draw->forgblock); GUI_BlockDelete(draw->bgblock); picswap_quadrant_end(draw->shdl); picswap_quadrant_end(draw->mhdl); picswap_quadrant_end(draw->hhdl); esMEMS_Mfree(0, draw); break; case GUI_MSG_PAINT: if (draw->invalidate & INVALIDATE_BACKGROUND) { #ifdef THIS_DEBUG log_d("Invalidate background"); #endif GUI_LyrWinSel(draw->scrolling.ewii.lyrLow); hback = dsk_Systheme_open(draw->bgicon); pic = dsk_Systheme_hdl2buf(hback); GUI_BMP_Draw(pic, draw->scrolling.wndRect.x, draw->scrolling.wndRect.y); dsk_theme_close(hback); pic = picget_clock_pic(draw->hhdl, (draw->tm.hour % 12) * 5 + (draw->tm.minute / 12), &length, &start_x, &start_y); block = GUI_BlockCreateFrom(NULL, length, length, pic, 0); GUI_BlockBitBlit(draw->bgblock, draw->scrolling.wndRect.x + start_x + WATCH_OFFSET_X, draw->scrolling.wndRect.y + start_y + WATCH_OFFSET_Y, block, NULL, BLITFLAG_COLORALPHA, NULL); GUI_BlockDelete(block); pic = picget_clock_pic(draw->mhdl, draw->tm.minute, &length, &start_x, &start_y); block = GUI_BlockCreateFrom(NULL, length, length, pic, 0); GUI_BlockBitBlit(draw->bgblock, draw->scrolling.wndRect.x + start_x + WATCH_OFFSET_X, draw->scrolling.wndRect.y + start_y + WATCH_OFFSET_Y, block, NULL, BLITFLAG_COLORALPHA, NULL); GUI_BlockDelete(block); } if (draw->invalidate & INVALIDATE_FOREGROUND) { GUI_LyrWinSel(draw->scrolling.ewii.lyrHigher); GUI_SetBkColor(0); GUI_ClearRect(draw->scrolling.wndRect.x, draw->scrolling.wndRect.y, draw->scrolling.wndRect.x + draw->scrolling.wndRect.width, draw->scrolling.wndRect.y + draw->scrolling.wndRect.height); } pic = picget_clock_pic(draw->shdl, draw->tm.second, &length, &start_x, &start_y); block = GUI_BlockCreateFrom(NULL, length, length, pic, 0); GUI_BlockBitBlit(draw->forgblock, draw->scrolling.wndRect.x + start_x + WATCH_OFFSET_X, draw->scrolling.wndRect.y + start_y + WATCH_OFFSET_Y, block, NULL, BLITFLAG_COLORSET, NULL); GUI_BlockDelete(block); draw->invalidate = INVALIDATE_NULL; break; //case GUI_MSG_USER_REPAINT_NEIGHBOR: //draw->invalidate |= (INVALIDATE_BACKGROUND | INVALIDATE_FOREGROUND); case GUI_MSG_TIMER: esTIME_GetTime(&draw->tm); if (draw->minute != draw->tm.minute) { draw->minute = draw->tm.minute; draw->invalidate |= INVALIDATE_BACKGROUND; } #ifdef THIS_DEBUG log_mi("time: %d,%d,%d", draw->tm.hour, draw->tm.minute, draw->tm.second); log_mi("Date: %d,%d,%d", draw->date.year, draw->date.month, draw->date.day); #endif __here__; GUI_WinUpdate(msg->h_deswin, ORANGE_TRUE); break; case GUI_MSG_SET_FOCUS: draw->invalidate |= (INVALIDATE_BACKGROUND | INVALIDATE_FOREGROUND); GUI_SetTimer(msg->h_deswin, 1, 100, NULL); __msg("12"); return 0; case GUI_MSG_SET_UNFOCUS: GUI_KillTimer(msg->h_deswin, 1); return 0; default: break; } return GUI_FrmWinDefaultProc(msg); }