/* * Draw aa rectangle region (32 bits per pixel)with spcial color * * * */ void fill_rect_with_color_by_32bit(unsigned int *fill_addr, RECT_REGION_T rect, unsigned int src_color, LCM_SCREEN_T phical_screen) { //int virtual_width = phical_screen.width; int virtual_width = phical_screen.needAllign == 0? phical_screen.width:phical_screen.allignWidth; int virtual_height = phical_screen.height; int i = 0; int j = 0; unsigned int * dst_addr = fill_addr; for(i = rect.top; i < rect.bottom; i++) { for(j = rect.left; j < rect.right; j++) { switch (phical_screen.rotation) { case 90: dst_addr = fill_addr + ((virtual_width * i + virtual_width - j)); break; case 270: dst_addr = fill_addr + ((virtual_width * (virtual_height - i - 1)+ j)); break; case 180: dst_addr = fill_addr + virtual_width * (virtual_height - i)- j-1; break; default: dst_addr = fill_addr + virtual_width * i + j; } fill_point_buffer(dst_addr, src_color, phical_screen, 32); } } }
/* * Draw a rectangle region (32 bits perpixel) with logo content * * * */ void fill_rect_with_content_by_32bit(unsigned int *fill_addr, RECT_REGION_T rect, unsigned short *src_addr, LCM_SCREEN_T phical_screen) { int draw_height = rect.bottom - rect.top; int virtual_width = phical_screen.needAllign == 0? phical_screen.width:phical_screen.allignWidth; int virtual_height = phical_screen.height; int i = 0; int j = 0; unsigned int * dst_addr = fill_addr; unsigned int * color_addr = (unsigned int *)src_addr; for(i = rect.top; i < rect.bottom; i++) { for(j = rect.left; j < rect.right; j++) { switch (phical_screen.rotation) { case 90: color_addr = (unsigned int *) (src_addr + draw_height*j + i); dst_addr = fill_addr + ((virtual_width * i + virtual_width - j)); break; case 270: color_addr = (unsigned int *) (src_addr + draw_height*j + i); dst_addr = fill_addr + ((virtual_width * (virtual_height - i - 1)+ j)); break; case 180: // adjust fill in address color_addr = (unsigned int *)src_addr++; dst_addr = fill_addr + virtual_width * (virtual_height - i)- j-1; break; default: color_addr = (unsigned int *)src_addr++; dst_addr = fill_addr + virtual_width * i + j; } //if(((i>rect.bottom-2) || ( i%400==0)) && ((j>rect.right-2) || (j%400 == 0))) //{ // LOG_ANIM("[show_logo_common]dst_addr = %d,color_addr= %d,i= %d,j=%d \n",(int)dst_addr, (int)color_addr, i , j); //} //fill_point_buffer(dst_addr, 0xf800, phical_screen.bits_per_pixel); // fill in red color for test fill_point_buffer(dst_addr, *color_addr, phical_screen.bits_per_pixel); } } }
/* * Draw a rectangle region (32 bits perpixel) with logo content * * * */ void fill_rect_with_content_by_32bit_rgb565(unsigned int *fill_addr, RECT_REGION_T rect, unsigned short *src_addr, LCM_SCREEN_T phical_screen, unsigned int bits) { int draw_height = rect.bottom - rect.top; int virtual_width = phical_screen.needAllign == 0? phical_screen.width:phical_screen.allignWidth; int virtual_height = phical_screen.height; int i = 0; int j = 0; unsigned int * dst_addr = fill_addr; unsigned int * color_addr = (unsigned int *)src_addr; for(i = rect.top; i < rect.bottom; i++) { for(j = rect.left; j < rect.right; j++) { switch (phical_screen.rotation) { case 90: color_addr = (unsigned int *) (src_addr + draw_height*j + i); dst_addr = fill_addr + ((virtual_width * i + virtual_width - j)); break; case 270: color_addr = (unsigned int *) (src_addr + draw_height*j + i); dst_addr = fill_addr + ((virtual_width * (virtual_height - i - 1)+ j)); break; case 180: // adjust fill in address color_addr = (unsigned int *)src_addr++; dst_addr = fill_addr + virtual_width * (virtual_height - i)- j-1-(virtual_width-phical_screen.width); break; default: color_addr = (unsigned int *)src_addr++; dst_addr = fill_addr + virtual_width * i + j; } fill_point_buffer(dst_addr, *color_addr, phical_screen, bits); if((i == rect.top && j == rect.left) || (i == rect.bottom - 1 && j == rect.left) || (i == rect.top && j == rect.right - 1) || (i == rect.bottom - 1 && j == rect.right - 1)){ LOG_ANIM("[show_logo_common]dst_addr= 0x%08x, color_addr= 0x%08x, i= %d, j=%d\n", *dst_addr, *color_addr, i , j); } } } }