/*
* call-seq:
* zoom_to(width, height, smooth=false) -> Surface
*
* Return a zoomed version of the Surface.
*
* This method takes these arguments:
* width:: the width to scale to. If nil is given, will keep x axis unscaled.
* height:: the height to scale to. If nil is given, will keep x axis
* unscaled.
* smooth:: whether to anti-alias the new surface. This option can be
* omitted, in which case the surface will not be anti-aliased.
* If true, the new surface will be 32bit RGBA.
*/
VALUE rbgm_transform_zoom_to(int argc, VALUE *argv, VALUE self)
{
SDL_Surface *src, *dst;
VALUE v_width, v_height, v_smooth;
double zoomx, zoomy;
int smooth;
rb_scan_args(argc, argv, "21", &v_width, &v_height, &v_smooth);
Data_Get_Struct(self,SDL_Surface,src);
smooth = RTEST(v_smooth) ? 1 : 0;
zoomx = NIL_P(v_width) ? 1.0 : NUM2DBL(v_width)/src->w;
zoomy = NIL_P(v_height) ? 1.0 : NUM2DBL(v_height)/src->h;
dst = zoomSurface(src,zoomx,zoomy,smooth);
if(dst == NULL)
rb_raise(eSDLError,"Could not rotozoom surface: %s",SDL_GetError());
return Data_Wrap_Struct(cSurface,0,SDL_FreeSurface,dst);
}