/*
 *  call-seq:
 *     set_colorkey(color,flags=0)
 *
 *  Set the colorkey of the surface. See Surface#colorkey for a description
 *  of colorkeys.
 *
 *  This method takes these arguments:
 *  color:: color to use as the key, in the form [r,g,b]. Can be +nil+ to
 *          un-set the colorkey.
 *  flags:: 0 or Rubygame::SRC_COLORKEY (default) or 
 *          Rubygame::SRC_COLORKEY|Rubygame::SDL_RLEACCEL. Most people will 
 *          want the default, in which case this argument can be omitted. For
 *          advanced users: this flag affects the surface as described in the
 *          docs for the SDL C function, SDL_SetColorkey.
 */
VALUE rbgm_surface_set_colorkey( int argc, VALUE *argv, VALUE self)
{
        SDL_Surface *surf;
        Uint32 color;
        Uint32 flag;
        Uint8 r,g,b;

        Data_Get_Struct(self, SDL_Surface, surf);
        if(argv[0] == Qnil)
        {
                flag = 0;
                color = 0;
        }
        else
        {
                if(argc > 1)
                        flag = NUM2UINT(argv[1]);
                else
                        flag = SDL_SRCCOLORKEY;

                r = NUM2UINT(rb_ary_entry(argv[0],0));
                g = NUM2UINT(rb_ary_entry(argv[0],1));
                b = NUM2UINT(rb_ary_entry(argv[0],2));
                //printf("RGB: %d,%d,%d  ",r,g,b);
                color = SDL_MapRGB(surf->format, r,g,b);
                //printf("colorkey: %d\n", color);
        }

        if(SDL_SetColorKey(surf,flag,color)!=0)
                rb_raise(eSDLError,"could not set colorkey: %s",SDL_GetError());
        return self;
}