/*  call-seq:
 *    render_unicode(string, aa, fg, bg)  ->  Surface
 *
 *  Renders a string to a Surface with the font's style and the given color(s).
 *
 *  This method takes these arguments:
 *  string:: the text string to render
 *  aa::     Use anti-aliasing if true. Enabling this makes the text
 *           look much nicer (smooth curves), but is much slower.
 *  fg::     the color to render the text, in the form [r,g,b]
 *  bg::     the color to use as a background for the text. This option can
 *           be omitted to have a transparent background.
 */
VALUE rbgm_ttf_render_unicode(int argc, VALUE *argv, VALUE self)
{
        //TODO:... ->unicode
        SDL_Surface *surf;
        TTF_Font *font;
        int antialias;
        SDL_Color fore, back; /* foreground and background colors */
 
        if(argc<3)
                rb_raise(rb_eArgError,"wrong number of arguments (%d for 3)",argc);
 
        Data_Get_Struct(self,TTF_Font,font);
 
        antialias = argv[1];
        fore.r = NUM2UINT(rb_ary_entry(argv[2],0));
        fore.g = NUM2UINT(rb_ary_entry(argv[2],1));
        fore.b = NUM2UINT(rb_ary_entry(argv[2],2));
 
        if(argc>3)
        {
                back.r = NUM2UINT(rb_ary_entry(argv[3],0));
                back.g = NUM2UINT(rb_ary_entry(argv[3],1));
                back.b = NUM2UINT(rb_ary_entry(argv[3],2));
        }
 
        if(antialias) /* anti-aliasing enabled */
        {
                if(argc>3) /* background color provided */
                        surf = TTF_RenderUNICODE_Shaded(font,(Uint16*)StringValuePtr(argv[0]),fore,back);
                else /* no background color */
                        surf = TTF_RenderUNICODE_Blended(font,(Uint16*)StringValuePtr(argv[0]),fore);
        }
        else /* anti-aliasing not enabled */
        {
                if(argc>3) /* background color provided */   
                {
                        /* remove colorkey, set color index 0 to background color */
                        surf = TTF_RenderUNICODE_Solid(font,(Uint16*)StringValuePtr(argv[0]),fore);
                        SDL_SetColors(surf,&back,0,1);
                        SDL_SetColorKey(surf,0,0);
                }
                else /* no background color */
                {
                        surf = TTF_RenderUNICODE_Solid(font,(Uint16*)StringValuePtr(argv[0]),fore);
                }
        }
 
        if(surf==NULL)
                rb_raise(eSDLError,"could not render font object: %s",TTF_GetError());
        return Data_Wrap_Struct(cSurface,0,SDL_FreeSurface,surf);
}