/*
* 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 flags;
Uint8 r,g,b;
VALUE vcolor, vflags;
Data_Get_Struct(self, SDL_Surface, surf);
rb_scan_args(argc, argv, "11", &vcolor, &vflags);
if( !NIL_P(vflags) )
{
flags = NUM2UINT(vflags);
}
else
{
flags = SDL_SRCCOLORKEY;
}
if( RTEST(vcolor) )
{
vcolor = convert_color(vcolor);
extract_rgb_u8_as_u8(vcolor, &r, &g, &b);
color = SDL_MapRGB(surf->format, r,g,b);
}
else
{
flags = 0;
color = 0;
}
if(SDL_SetColorKey(surf,flags,color)!=0)
rb_raise(eSDLError,"could not set colorkey: %s",SDL_GetError());
return self;
}