void drawputpixel( int x, int y, U8 r, U8 g, U8 b ) { if( EGL_GET_TARGET_SURFACE()->bpp == 32 ) putpixel32( x, y, MAKE_RGB888( r, g, b ) ); else putpixel16( x, y, MAKE_RGB565( r, g, b ) ); }
void sysvid_setPalette(img_color_t *pal, U16 n) { U16 i; for (i = 0; i < n; i++) { palette[i] = MAKE_RGB565(pal[i].r, pal[i].g, pal[i].b); } }
SURFACE* LoadSurfaceInfoFromRGB(U8* bmpdata, U8 bpp, U32 w, U32 h, U32 bmpdatasize, U8* pal) { SURFACE *surface = NULL; long i; U32 j; if (!((bpp == 24) || (bpp == 8) || (bpp == 4))) { return 0; } if ((bpp == 8) || (bpp == 4)) { if (!(surface = create_surface(w, h, bpp))) { return 0; } U32 ibpl = (bmpfh.bfSize - bmpfh.bfOffBits) / h; surface->pitch = ibpl; if (bpp == 8) { for (i = 0; i < h; i++) { memcpy(surface->pixels + i*ibpl, bmpdata + (h - 1 - i)*ibpl, surface->w); } surface->pal->nColors = 256; memcpy(surface->pal->colors, pal, 256 * 4); } else { for (i = 0; i < h; i++) { memcpy(surface->pixels + i*ibpl, bmpdata + (h - 1 - i)*ibpl, surface->w / 2); } surface->pal->nColors = 16; memcpy(surface->pal->colors, pal, 16 * 4); } return surface; } // 180 x 120 x 3 (bpp = 24)/////// else if (bpp == 24) { U32 screenbpp = 16; if (!(surface = create_surface(w, h, screenbpp))) { return 0; } if (screenbpp == 32)//screen: 4byte(1byte reserved) per pixel { U32 ibpl; U32* rgb32; ibpl = ((w * 3) + 3) & 0xfffffffc; rgb32 = (U32*)surface->pixels; bmpdata += ((h - 1)*ibpl); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { rgb32[j] = MAKE_RGB888(bmpdata[j * 3 + 2], bmpdata[j * 3 + 1], bmpdata[j * 3 + 0]); } bmpdata -= ibpl; //4byte align rgb32 += (surface->pitch / 4); } surface->pixtype = PIX_FMT_RGB888; } else // convert to rgb888 to rgb565 { U32 ibpl; U16* rgb565data; ibpl = ((w * 3) + 3) & 0xfffffffc; rgb565data = (U16*)surface->pixels; bmpdata += ((h - 1)*ibpl); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { rgb565data[j] = MAKE_RGB565(bmpdata[j * 3 + 2], bmpdata[j * 3 + 1], bmpdata[j * 3 + 0]); } bmpdata -= ibpl; //4byte align rgb565data += (surface->pitch / 2); } surface->pixtype = PIX_FMT_RGB565; } } return surface; }
void r_draw_roundrect(int x0, int y0, int w, int h, int corner ,EGL_COLOR c) { int startaddr; int bpl; register int i; int dx, dy; int Xcenter, Ycenter, X2center, Y2center; int x = 0; int rightInc = 6; int d, diagonalInc; int k; SURFACE* surf = EGL_GET_TARGET_SURFACE(); bpl = surf->pitch; startaddr = ( U32 )surf->pixels; if ( w == 0 || h == 0 ) return; if ( corner != 0 ) { d = w < h ? w : h; --corner; if ( corner != 0 && corner + 2 >= d ) { if ( corner + 2 == d ) --corner; else corner = 0; } } d = 3 - ( corner << 1 ); diagonalInc = 10 - ( corner << 2 ); /*Rectangles*/ dx = w - ( corner << 1 ); Xcenter = x0 + corner; dy = h - ( corner << 1 ); Ycenter = y0 + corner; /*Centers*/ X2center = Xcenter + dx - 1; Y2center = Ycenter + dy - 1; i = dx; if( surf->bpp == 16 ) { int color ; U8 r,g,b; EXTRACT_RGB(c,r,g,b); color = MAKE_RGB565(r,g,b); k = 0; switch( i % 4 ) { do { case 0: putpixel16( Xcenter + k, y0, color ); putpixel16( Xcenter + k, y0 + h - 1, color ); k++; case 3: putpixel16( Xcenter + k, y0, color ); putpixel16( Xcenter + k, y0 + h - 1, color ); k++; case 2: putpixel16( Xcenter + k, y0, color ); putpixel16( Xcenter + k, y0 + h - 1, color ); k++; case 1: putpixel16( Xcenter + k, y0, color ); putpixel16( Xcenter + k, y0 + h - 1, color ); k++; } while( ( i -= 4 ) > 0 ); } if ( h < 3 ) return; k = 0; i = dy; switch( i % 4 ) { do { case 0: putpixel16( x0, Ycenter + k, color ); putpixel16( x0 + w - 1, Ycenter + k, color ); k++; case 3: putpixel16( x0, Ycenter + k, color ); putpixel16( x0 + w - 1, Ycenter + k, color ); k++; case 2: putpixel16( x0, Ycenter + k, color ); putpixel16( x0 + w - 1, Ycenter + k, color ); k++; case 1: putpixel16( x0, Ycenter + k, color ); putpixel16( x0 + w - 1, Ycenter + k, color ); k++; } while( ( i -= 4 ) > 0 ); } while ( x < corner ) { putpixel16( Xcenter - corner, Ycenter - x, color ); putpixel16( Xcenter - x, Ycenter - corner, color ); putpixel16( X2center + x, Ycenter - corner, color ); putpixel16( X2center + corner, Ycenter - x, color ); putpixel16( X2center + x, Y2center + corner, color ); putpixel16( X2center + corner, Y2center + x, color ); putpixel16( Xcenter - x, Y2center + corner, color ); putpixel16( Xcenter - corner, Y2center + x, color ); if ( d >= 0 ) { d += diagonalInc; diagonalInc += 8; --corner; } else { d += rightInc; diagonalInc += 4; } rightInc += 4; ++x; }/*while*/ } else//32 { int color ; U8 r,g,b; EXTRACT_RGB(c,r,g,b); color = MAKE_RGB888(r,g,b); k = 0; switch( i % 4 ) { do { case 0: putpixel32( Xcenter + k, y0, color ); putpixel32( Xcenter + k, y0 + h - 1, color ); k++; case 3: putpixel32( Xcenter + k, y0, color ); putpixel32( Xcenter + k, y0 + h - 1, color ); k++; case 2: putpixel32( Xcenter + k, y0, color ); putpixel32( Xcenter + k, y0 + h - 1, color ); k++; case 1: putpixel32( Xcenter + k, y0, color ); putpixel32( Xcenter + k, y0 + h - 1, color ); k++; } while( ( i -= 4 ) > 0 ); } if ( h < 3 ) return; i = dy; k = 0; switch( i % 4 ) { do { case 0: putpixel32( x0, Ycenter + k, color ); putpixel32( x0 + w - 1, Ycenter + k, color ); k++; case 3: putpixel32( x0, Ycenter + k, color ); putpixel32( x0 + w - 1, Ycenter + k, color ); k++; case 2: putpixel32( x0, Ycenter + k, color ); putpixel32( x0 + w - 1, Ycenter + k, color ); k++; case 1: putpixel32( x0, Ycenter + k, color ); putpixel32( x0 + w - 1, Ycenter + k, color ); k++; } while( ( i -= 4 ) > 0 ); } while ( x < corner ) { putpixel32( Xcenter - corner, Ycenter - x, color ); putpixel32( Xcenter - x, Ycenter - corner, color ); putpixel32( X2center + x, Ycenter - corner, color ); putpixel32( X2center + corner, Ycenter - x, color ); putpixel32( X2center + x, Y2center + corner, color ); putpixel32( X2center + corner, Y2center + x, color ); putpixel32( Xcenter - x, Y2center + corner, color ); putpixel32( Xcenter - corner, Y2center + x, color ); if ( d >= 0 ) { d += diagonalInc; diagonalInc += 8; --corner; } else { d += rightInc; diagonalInc += 4; } rightInc += 4; ++x; }/*while*/ } }