/* 
 *  call-seq:
 *     set_at([x,y], color)
 *
 *  Set the color of the pixel at the given coordinate.
 *
 *  color can be one of:
 *  * an Array, [r,g,b] or [r,g,b,a] with each component in 0-255
 *  * an instance of ColorRGB, ColorHSV, etc.
 *  * the name of a color in Rubygame::Color, as a Symbol or String
 *
 *  Raises IndexError if the coordinates are out of bounds.
 *
 *--
 *
 *  I'm lazy and just using SDL_FillRect. ;-P
 *  It's easier and less bug-prone this way.
 *  I have no idea about speed comparisons.
 *
 */
VALUE rbgm_surface_setat( int argc, VALUE *argv, VALUE self )
{
        SDL_Surface *surf;
        SDL_Rect *rect;
        Uint32 color;
        Uint8 r,g,b,a;
        VALUE vpos, vcolor;

        Data_Get_Struct(self, SDL_Surface, surf);

        rb_scan_args(argc, argv, "2", &vpos, &vcolor);

        vcolor = convert_color(vcolor);
        extract_rgba_u8_as_u8(vcolor, &r, &g, &b, &a);
        color = SDL_MapRGBA(surf->format, r,g,b,a);

        vpos = convert_to_array(vpos);
        rect = make_rect( NUM2INT(rb_ary_entry(vpos,0)),
                          NUM2INT(rb_ary_entry(vpos,1)),
                          1, 1 );

        SDL_FillRect(surf,rect,color);

        free(rect);

        return self;
}