/*
 *  call-seq:
 *     set_alpha(alpha, flags=Rubygame::SRC_ALPHA)
 *
 *  Set the per-surface alpha (opacity; non-transparency) of the surface.
 *
 *  This function takes these arguments:
 *  alpha:: requested opacity of the surface. Alpha must be from 0 
 *          (fully transparent) to 255 (fully opaque).
 *  flags:: 0 or Rubygame::SRC_ALPHA (default). 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_SetAlpha.
 */
VALUE rbgm_surface_set_alpha(int argc, VALUE *argv, VALUE self)
{
        SDL_Surface *surf;
        Uint8 alpha;
        Uint32 flags = SDL_SRCALPHA;

        switch(argc)
        {
                case 2: flags = NUM2UINT(argv[1]);
                        /* no break */
                case 1: 
                  {
                        int temp;
                        temp = NUM2INT(argv[0]);
                        if(temp<0) alpha = 0;
                        else if(temp>255) alpha = 255;
                        else alpha = (Uint8) temp;
                        break;
                  }
                default:
                        rb_raise(rb_eArgError,\
                                "Wrong number of args to set mode (%d for 1)",argc);
        }

        Data_Get_Struct(self,SDL_Surface,surf);
        if(SDL_SetAlpha(surf,flags,alpha)!=0)
                rb_raise(eSDLError,"%s",SDL_GetError());
        return self;
}