/*
Ruby/SDL Ruby extension library for SDL
Copyright (C) 2001-2007 Ohbayashi Ippei
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifdef HAVE_SGE
#include "rubysdl.h"
#include <sge.h>
static VALUE sdl_get_autoLocking(VALUE mod)
{
return BOOL(sge_getLock());
}
static VALUE sdl_set_autoLocking(VALUE mod,VALUE bool)
{
if(RTEST(bool))
sge_Lock_ON();
else
sge_Lock_OFF();
return Qnil;
}
static VALUE sdl_getPixel(VALUE obj,VALUE x,VALUE y)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
return UINT2NUM( sge_GetPixel(surface,NUM2INT(x),NUM2INT(y)) );
}
static VALUE sdl_putPixel(VALUE obj,VALUE x,VALUE y,VALUE color)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_PutPixel(surface,NUM2INT(x),NUM2INT(y),VALUE2COLOR(color,surface->format));
return Qnil;
}
static VALUE sdl_drawLine(VALUE obj,VALUE x1,VALUE y1,VALUE x2,VALUE y2,VALUE color)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_Line( surface,NUM2INT(x1),NUM2INT(y1),NUM2INT(x2),NUM2INT(y2),
VALUE2COLOR(color,surface->format) );
return Qnil;
}
static VALUE sdl_drawAALine(VALUE obj,VALUE x1,VALUE y1,VALUE x2,VALUE y2,VALUE color)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_AALine( surface,NUM2INT(x1),NUM2INT(y1),NUM2INT(x2),NUM2INT(y2),
VALUE2COLOR(color,surface->format) );
return Qnil;
}
static VALUE sdl_drawLineAlpha(VALUE obj,VALUE x1,VALUE y1,VALUE x2,VALUE y2,VALUE color,VALUE alpha)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_LineAlpha( surface,NUM2INT(x1),NUM2INT(y1),NUM2INT(x2),NUM2INT(y2),
VALUE2COLOR(color,surface->format), NUM2UINT(alpha) );
return Qnil;
}
static VALUE sdl_drawAALineAlpha(VALUE obj,VALUE x1,VALUE y1,VALUE x2,VALUE y2,VALUE color,VALUE alpha)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_AALineAlpha( surface,NUM2INT(x1),NUM2INT(y1),NUM2INT(x2),NUM2INT(y2),
VALUE2COLOR(color,surface->format),NUM2UINT(alpha) );
return Qnil;
}
static VALUE sdl_drawRect(VALUE obj,VALUE x,VALUE y,VALUE w,VALUE h,VALUE color)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_Rect( surface,NUM2INT(x),NUM2INT(y),NUM2INT(x)+NUM2INT(w),
NUM2INT(y)+NUM2INT(h),VALUE2COLOR(color,surface->format) );
return Qnil;
}
static VALUE sdl_drawRectAlpha(VALUE obj,VALUE x,VALUE y,VALUE w,VALUE h,VALUE color,VALUE alpha)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_RectAlpha( surface,NUM2INT(x),NUM2INT(y),NUM2INT(x)+NUM2INT(w),
NUM2INT(y)+NUM2INT(h),VALUE2COLOR(color,surface->format),
NUM2UINT(alpha) );
return Qnil;
}
static VALUE sdl_drawFilledRectAlpha(VALUE obj,VALUE x,VALUE y,VALUE w,VALUE h,VALUE color,VALUE alpha)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_FilledRectAlpha( surface,NUM2INT(x),NUM2INT(y),NUM2INT(x)+NUM2INT(w),
NUM2INT(y)+NUM2INT(h),VALUE2COLOR(color,surface->format),
NUM2UINT(alpha) );
return Qnil;
}
static VALUE sdl_drawCircle(VALUE obj,VALUE x,VALUE y,VALUE r,VALUE color)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_Circle( surface,NUM2INT(x),NUM2INT(y),NUM2INT(r),
VALUE2COLOR(color,surface->format) );
return Qnil;
}
static VALUE sdl_drawAACircle(VALUE obj,VALUE x,VALUE y,VALUE r,VALUE color)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_AACircle( surface,NUM2INT(x),NUM2INT(y),NUM2INT(r),
VALUE2COLOR(color,surface->format) );
return Qnil;
}
static VALUE sdl_drawCircleAlpha(VALUE obj,VALUE x,VALUE y,VALUE r,VALUE color,VALUE alpha)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_CircleAlpha( surface,NUM2INT(x),NUM2INT(y),NUM2INT(r),
VALUE2COLOR(color,surface->format),NUM2UINT(alpha) );
return Qnil;
}
static VALUE sdl_drawAACircleAlpha(VALUE obj,VALUE x,VALUE y,VALUE r,VALUE color,
VALUE alpha)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_AACircleAlpha( surface,NUM2INT(x),NUM2INT(y),NUM2INT(r),
VALUE2COLOR(color,surface->format),NUM2UINT(alpha) );
return Qnil;
}
static VALUE sdl_drawFilledCircle(VALUE obj,VALUE x,VALUE y,VALUE r,VALUE color)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_FilledCircle( surface,NUM2INT(x),NUM2INT(y),NUM2INT(r),
VALUE2COLOR(color,surface->format) );
return Qnil;
}
static VALUE sdl_drawAAFilledCircle(VALUE obj,VALUE x,VALUE y,VALUE r,VALUE color)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_AAFilledCircle( surface,NUM2INT(x),NUM2INT(y),NUM2INT(r),
VALUE2COLOR(color,surface->format) );
return Qnil;
}
static VALUE sdl_drawFilledCircleAlpha(VALUE obj,VALUE x,VALUE y,VALUE r,VALUE color,VALUE alpha)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_FilledCircleAlpha( surface,NUM2INT(x),NUM2INT(y),NUM2INT(r),
VALUE2COLOR(color,surface->format),NUM2UINT(alpha) );
return Qnil;
}
static VALUE sdl_drawEllipse(VALUE obj,VALUE x,VALUE y,VALUE rx,VALUE ry,
VALUE color)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_Ellipse( surface,NUM2INT(x),NUM2INT(y),NUM2INT(rx),NUM2INT(ry),
VALUE2COLOR(color,surface->format) );
return Qnil;
}
static VALUE sdl_drawAAEllipse(VALUE obj,VALUE x,VALUE y,VALUE rx,VALUE ry,
VALUE color)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_AAEllipse( surface,NUM2INT(x),NUM2INT(y),NUM2INT(rx),NUM2INT(ry),
VALUE2COLOR(color,surface->format) );
return Qnil;
}
static VALUE sdl_drawEllipseAlpha(VALUE obj,VALUE x,VALUE y,VALUE rx,VALUE ry,
VALUE color,VALUE alpha)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_EllipseAlpha( surface,NUM2INT(x),NUM2INT(y),NUM2INT(rx),NUM2INT(ry),
VALUE2COLOR(color,surface->format),NUM2UINT(alpha) );
return Qnil;
}
static VALUE sdl_drawAAEllipseAlpha(VALUE obj,VALUE x,VALUE y,VALUE rx,VALUE ry,
VALUE color,VALUE alpha)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_AAEllipseAlpha( surface,NUM2INT(x),NUM2INT(y),NUM2INT(rx),NUM2INT(ry),
VALUE2COLOR(color,surface->format),NUM2UINT(alpha) );
return Qnil;
}
static VALUE sdl_drawFilledEllipse(VALUE obj,VALUE x,VALUE y,VALUE rx,VALUE ry,
VALUE color)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_FilledEllipse( surface,NUM2INT(x),NUM2INT(y),NUM2INT(rx),NUM2INT(ry),
VALUE2COLOR(color,surface->format) );
return Qnil;
}
static VALUE sdl_drawAAFilledEllipse(VALUE obj,VALUE x,VALUE y,VALUE rx,VALUE ry,
VALUE color)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_AAFilledEllipse( surface,NUM2INT(x),NUM2INT(y),NUM2INT(rx),NUM2INT(ry),
VALUE2COLOR(color,surface->format) );
return Qnil;
}
static VALUE sdl_drawFilledEllipseAlpha(VALUE obj,VALUE x,VALUE y,VALUE rx,VALUE ry,
VALUE color,VALUE alpha)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_FilledEllipseAlpha( surface,NUM2INT(x),NUM2INT(y),NUM2INT(rx),NUM2INT(ry),
VALUE2COLOR(color,surface->format),NUM2UINT(alpha) );
return Qnil;
}
static VALUE sdl_drawBezier(VALUE obj,VALUE x1,VALUE y1,VALUE x2,VALUE y2,
VALUE x3,VALUE y3,VALUE x4,VALUE y4,
VALUE level,VALUE color)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_Bezier(surface,NUM2INT(x1),NUM2INT(y1),NUM2INT(x2),NUM2INT(y2),
NUM2INT(x3),NUM2INT(y3),NUM2INT(x4),NUM2INT(y4),
NUM2INT(level),VALUE2COLOR(color,surface->format));
return Qnil;
}
static VALUE sdl_drawBezierAlpha(VALUE obj,VALUE x1,VALUE y1,VALUE x2,VALUE y2,
VALUE x3,VALUE y3,VALUE x4,VALUE y4,
VALUE level,VALUE color,VALUE alpha)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_BezierAlpha(surface,NUM2INT(x1),NUM2INT(y1),NUM2INT(x2),NUM2INT(y2),
NUM2INT(x3),NUM2INT(y3),NUM2INT(x4),NUM2INT(y4),
NUM2INT(level),VALUE2COLOR(color,surface->format),
NUM2UINT(alpha));
return Qnil;
}
static VALUE sdl_drawAABezier(VALUE obj,VALUE x1,VALUE y1,VALUE x2,VALUE y2,
VALUE x3,VALUE y3,VALUE x4,VALUE y4,
VALUE level,VALUE color)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_AABezier(surface,NUM2INT(x1),NUM2INT(y1),NUM2INT(x2),NUM2INT(y2),
NUM2INT(x3),NUM2INT(y3),NUM2INT(x4),NUM2INT(y4),
NUM2INT(level),VALUE2COLOR(color,surface->format));
return Qnil;
}
static VALUE sdl_drawAABezierAlpha(VALUE obj,VALUE x1,VALUE y1,VALUE x2,VALUE y2,
VALUE x3,VALUE y3,VALUE x4,VALUE y4,
VALUE level,VALUE color,VALUE alpha)
{
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
sge_AABezierAlpha(surface,NUM2INT(x1),NUM2INT(y1),NUM2INT(x2),NUM2INT(y2),
NUM2INT(x3),NUM2INT(y3),NUM2INT(x4),NUM2INT(y4),
NUM2INT(level),VALUE2COLOR(color,surface->format),
NUM2UINT(alpha));
return Qnil;
}
static VALUE sdl_rotateScaledSurface(VALUE obj,VALUE angle,VALUE scale,VALUE bgcolor)
{
SDL_Surface *surface,*result;
Data_Get_Struct(obj,SDL_Surface,surface);
result=sge_rotate_scaled_surface(surface,NUM2INT(angle),NUM2DBL(scale),
VALUE2COLOR(bgcolor,surface->format) );
if( result==NULL )
rb_raise( eSDLError,"Couldn't Create Surface: %s",SDL_GetError() );
return Data_Wrap_Struct(cSurface,0,sdl_freeSurface,result);
}
/* doesn't respect ColorKey */
static VALUE sdl_rotateXYScaled(VALUE mod,VALUE src,VALUE dst,VALUE x,
VALUE y,VALUE angle,VALUE xscale,
VALUE yscale)
{
SDL_Surface *srcSurface,*dstSurface;
if( !rb_obj_is_kind_of(src,cSurface) || !rb_obj_is_kind_of(dst,cSurface) )
rb_raise(rb_eArgError,"type mismatch(expect Surface)");
Data_Get_Struct(src,SDL_Surface,srcSurface);
Data_Get_Struct(dst,SDL_Surface,dstSurface);
sge_rotate_xyscaled(dstSurface,srcSurface,NUM2INT(x),NUM2INT(y),
NUM2INT(angle),NUM2DBL(xscale),NUM2DBL(yscale));
return Qnil;
}
static VALUE sdl_rotateScaledBlit(VALUE mod,VALUE src,VALUE dst,VALUE x,
VALUE y,VALUE angle,VALUE scale)
{
SDL_Surface *srcSurface,*dstSurface,*tmpSurface;
SDL_Rect destRect;
Uint32 colorkey;
Uint32 flags;
int result;
if( !rb_obj_is_kind_of(src,cSurface) || !rb_obj_is_kind_of(dst,cSurface) )
rb_raise(rb_eArgError,"type mismatch(expect Surface)");
Data_Get_Struct(src,SDL_Surface,srcSurface);
Data_Get_Struct(dst,SDL_Surface,dstSurface);
colorkey=srcSurface->format->colorkey;
flags = srcSurface->flags & ( SDL_RLEACCEL|SDL_SRCCOLORKEY );
tmpSurface = sge_rotate_scaled_surface(srcSurface,NUM2INT(angle),
NUM2DBL(scale),colorkey);
if( tmpSurface==NULL )
rb_raise(eSDLError,"SDL memory allocate failed :%s",SDL_GetError());
SDL_SetColorKey(tmpSurface,flags,colorkey);
destRect.x=NUM2INT(x)-tmpSurface->h/2;
destRect.y=NUM2INT(y)-tmpSurface->w/2;
result = SDL_BlitSurface(tmpSurface,NULL,dstSurface,&destRect);
SDL_FreeSurface(tmpSurface);
if( result == -1 ){
rb_raise(eSDLError,"SDL_BlitSurface fail: %s",SDL_GetError());
}
return INT2NUM(result);
}
static VALUE sdl_transform(VALUE mod,VALUE src,VALUE dst,VALUE angle,
VALUE xscale,VALUE yscale,VALUE px,VALUE py,
VALUE qx,VALUE qy,VALUE flags)
{
SDL_Surface *srcSurface,*dstSurface;
if( !rb_obj_is_kind_of(src,cSurface) || !rb_obj_is_kind_of(dst,cSurface) )
rb_raise(rb_eArgError,"type mismatch(expect Surface)");
Data_Get_Struct(src,SDL_Surface,srcSurface);
Data_Get_Struct(dst,SDL_Surface,dstSurface);
sge_transform(srcSurface,dstSurface,NUM2DBL(angle),NUM2DBL(xscale),
NUM2DBL(yscale),NUM2INT(px),NUM2INT(py),NUM2INT(qx),
NUM2INT(qy),NUM2UINT(flags));
return Qnil;
}
static VALUE sdl_transformSurface(VALUE obj,VALUE bgcolor,VALUE angle,
VALUE xscale,VALUE yscale,VALUE flags)
{
SDL_Surface *surface,*result;
Data_Get_Struct(obj,SDL_Surface,surface);
result = sge_transform_surface(surface,VALUE2COLOR(bgcolor,surface->format),
NUM2DBL(angle),NUM2DBL(xscale),
NUM2DBL(yscale),NUM2UINT(flags));
if( result==NULL )
rb_raise( eSDLError,"Couldn't Create Surface: %s",SDL_GetError() );
return Data_Wrap_Struct(cSurface,0,sdl_freeSurface,result);
}
static VALUE sdl_makeCollisionMap(VALUE obj)
{
sge_cdata * cdata;
SDL_Surface *surface;
Data_Get_Struct(obj,SDL_Surface,surface);
cdata = sge_make_cmap(surface);
if( cdata==NULL )
rb_raise( eSDLError,"Couldn't Create CollisionMap: %s",SDL_GetError() );
return Data_Wrap_Struct(cCollisionMap,0,sge_destroy_cmap,cdata);
}
static sge_cdata * value_to_collision_map(VALUE value)
{
sge_cdata * cdata;
if( !rb_obj_is_kind_of(value, cCollisionMap) )
rb_raise(rb_eArgError,"type mismatch(expect CollisionMap)");
Data_Get_Struct(value, sge_cdata, cdata);
return cdata;
}
static VALUE sdl_classBoundingBoxCheck(VALUE class,
VALUE x1, VALUE y1, VALUE w1, VALUE h1,
VALUE x2, VALUE y2, VALUE w2, VALUE h2)
{
return BOOL(_sge_bbcheck
((Sint16) NUM2INT(x1), (Sint16) NUM2INT(y1),
(Sint16) NUM2INT(w1), (Sint16) NUM2INT(h1),
(Sint16) NUM2INT(x2), (Sint16) NUM2INT(y2),
(Sint16) NUM2INT(w2), (Sint16) NUM2INT(h2)));
}
static VALUE sdl_collisionCheck(VALUE collisionMap1, VALUE x1, VALUE y1,
VALUE collisionMap2, VALUE x2, VALUE y2)
{
sge_cdata * cdata1 = value_to_collision_map(collisionMap1);
sge_cdata * cdata2 = value_to_collision_map(collisionMap2);
int collided;
collided = sge_cmcheck
(cdata1, (Sint16) NUM2INT(x1), (Sint16) NUM2INT(y1),
cdata2, (Sint16) NUM2INT(x2), (Sint16) NUM2INT(y2));
if(!collided)
return Qnil;
return rb_ary_new3(2, INT2NUM(sge_get_cx()), INT2NUM(sge_get_cy()));
}
static VALUE sdl_boundingBoxCheck(VALUE collisionMap1, VALUE x1, VALUE y1,
VALUE collisionMap2, VALUE x2, VALUE y2)
{
sge_cdata * cdata1 = value_to_collision_map(collisionMap1);
sge_cdata * cdata2 = value_to_collision_map(collisionMap2);
return BOOL(sge_bbcheck
(cdata1, (Sint16) NUM2INT(x1), (Sint16) NUM2INT(y1),
cdata2, (Sint16) NUM2INT(x2), (Sint16) NUM2INT(y2)));
}
static VALUE sdl_set_cdata(VALUE obj, VALUE vx, VALUE vy, VALUE vw, VALUE vh)
{
sge_cdata * cdata = value_to_collision_map(obj);
Sint16 x, y, w, h;
x = NUM2INT(vx);
y = NUM2INT(vy);
w = NUM2INT(vw);
h = NUM2INT(vh);
if( x < 0 || y < 0 || x+w > cdata->w || y+h > cdata->h ){
rb_raise(eSDLError,"Couldn't clear that area");
}
sge_set_cdata(cdata, x, y, w, h );
return Qnil;
}
static VALUE sdl_unset_cdata(VALUE obj, VALUE vx, VALUE vy, VALUE vw, VALUE vh)
{
sge_cdata * cdata = value_to_collision_map(obj);
Sint16 x, y, w, h;
x = NUM2INT(vx);
y = NUM2INT(vy);
w = NUM2INT(vw);
h = NUM2INT(vh);
if( x < 0 || y < 0 || x+w > cdata->w || y+h > cdata->h ){
rb_raise(eSDLError,"Couldn't clear that area");
}
sge_unset_cdata(cdata, x, y, w, h);
return Qnil;
}
static VALUE sdl_w_cdata(VALUE obj)
{
sge_cdata * cdata = value_to_collision_map(obj);
return INT2FIX(cdata->w);
}
static VALUE sdl_h_cdata(VALUE obj)
{
sge_cdata * cdata = value_to_collision_map(obj);
return INT2FIX(cdata->h);
}
/* bitmap font */
static void sdl_bf_close(sge_bmpFont* font)
{
if(!rubysdl_is_quit()){
sge_BF_CloseFont(font);
}
}
static VALUE sdl_bf_open(VALUE obj, VALUE file, VALUE flags)
{
sge_bmpFont* font;
font = sge_BF_OpenFont(GETCSTR(file),NUM2UINT(flags));
if( font == NULL )
rb_raise(eSDLError,"Couldn't open font: %s", GETCSTR(file));
return Data_Wrap_Struct(cBMFont,0,sdl_bf_close,font);
}
static VALUE sdl_bf_setColor(VALUE obj,VALUE r,VALUE g,VALUE b)
{
sge_bmpFont* font;
Data_Get_Struct(obj,sge_bmpFont,font);
sge_BF_SetColor(font,NUM2UINT(r),NUM2UINT(g),NUM2UINT(b));
return Qnil;
}
static VALUE sdl_bf_getHeight(VALUE obj)
{
sge_bmpFont* font;
Data_Get_Struct(obj,sge_bmpFont,font);
return INT2FIX(sge_BF_GetHeight(font));
}
static VALUE sdl_bf_getWidth(VALUE obj)
{
sge_bmpFont* font;
Data_Get_Struct(obj,sge_bmpFont,font);
return INT2FIX(sge_BF_GetWidth(font));
}
static VALUE sdl_bf_textSize(VALUE obj, VALUE text)
{
sge_bmpFont* font;
SDL_Rect rect;
Data_Get_Struct(obj,sge_bmpFont,font);
rect = sge_BF_TextSize(font, GETCSTR(text));
return rb_ary_new3(2, INT2FIX(rect.w), INT2FIX(rect.h));
}
static VALUE sdl_bf_textout(VALUE obj,VALUE surface,VALUE string,
VALUE x, VALUE y)
{
sge_bmpFont* font;
SDL_Surface* target;
if(!rb_obj_is_kind_of(surface,cSurface))
rb_raise( rb_eArgError,"type mismatch(expect Surface)" );
Data_Get_Struct(obj,sge_bmpFont,font);
Data_Get_Struct(surface,SDL_Surface,target);
sge_BF_textout(target,font,GETCSTR(string),NUM2INT(x),NUM2INT(y));
return Qnil;
}
static void defineConstForSGE()
{
rb_define_const(mSDL,"TRANSFORM_AA",UINT2NUM(SGE_TAA));
rb_define_const(mSDL,"TRANSFORM_SAFE",UINT2NUM(SGE_TSAFE));
rb_define_const(mSDL,"TRANSFORM_TMAP",UINT2NUM(SGE_TTMAP));
rb_define_const(cBMFont,"TRANSPARENT",UINT2NUM(SGE_BFTRANSP));
rb_define_const(cBMFont,"NOCONVERT",UINT2NUM(SGE_BFNOCONVERT));
rb_define_const(cBMFont,"SFONT",UINT2NUM(SGE_BFSFONT));
rb_define_const(cBMFont,"PALETTE",UINT2NUM(SGE_BFPALETTE));
}
void init_sge_video()
{
sge_Update_OFF();
sge_Lock_ON();
rb_define_module_function(mSDL,"autoLock",sdl_get_autoLocking,0);
rb_define_module_function(mSDL,"autoLock=",sdl_set_autoLocking,1);
rb_define_method(cSurface,"getPixel",sdl_getPixel,2);
rb_define_method(cSurface,"putPixel",sdl_putPixel,3);
rb_define_method(cSurface,"[]",sdl_getPixel,2);
rb_define_method(cSurface,"[]=",sdl_putPixel,3);
/* primitive drawing */
rb_define_method(cSurface,"drawLine",sdl_drawLine,5);
rb_define_method(cSurface,"drawRect",sdl_drawRect,5);
rb_define_method(cSurface,"drawCircle",sdl_drawCircle,4);
rb_define_method(cSurface,"drawFilledCircle",sdl_drawFilledCircle,4);
rb_define_method(cSurface,"drawEllispe",sdl_drawEllipse,5);
rb_define_method(cSurface,"drawFilledEllispe",sdl_drawFilledEllipse,5);
rb_define_method(cSurface,"drawEllipse",sdl_drawEllipse,5);
rb_define_method(cSurface,"drawFilledEllipse",sdl_drawFilledEllipse,5);
rb_define_method(cSurface,"drawBezier",sdl_drawBezier,10);
/* antialiased primitive drawing */
rb_define_method(cSurface,"drawAALine",sdl_drawAALine,5);
rb_define_method(cSurface,"drawAACircle",sdl_drawAACircle,4);
rb_define_method(cSurface,"drawAAFilledCircle",sdl_drawAAFilledCircle,4);
rb_define_method(cSurface,"drawAAEllipse",sdl_drawAAEllipse,5);
rb_define_method(cSurface,"drawAAFilledEllipse",sdl_drawAAFilledEllipse,5);
rb_define_method(cSurface,"drawAABezier",sdl_drawAABezier,10);
/* primitive drawing with alpha */
rb_define_method(cSurface,"drawLineAlpha",sdl_drawLineAlpha,6);
rb_define_method(cSurface,"drawRectAlpha",sdl_drawRectAlpha,6);
rb_define_method(cSurface,"drawFilledRectAlpha",sdl_drawFilledRectAlpha,6);
rb_define_method(cSurface,"drawCircleAlpha",sdl_drawCircleAlpha,5);
rb_define_method(cSurface,"drawFilledCircleAlpha",sdl_drawFilledCircleAlpha,5);
rb_define_method(cSurface,"drawEllipseAlpha",sdl_drawEllipseAlpha,6);
rb_define_method(cSurface,"drawFilledEllipseAlpha",sdl_drawFilledEllipseAlpha,6);
rb_define_method(cSurface,"drawBezierAlpha",sdl_drawBezierAlpha,11);
/* antialiased primitive drawing with alpha */
rb_define_method(cSurface,"drawAALineAlpha",sdl_drawAALineAlpha,6);
rb_define_method(cSurface,"drawAACircleAlpha",sdl_drawAACircleAlpha,5);
rb_define_method(cSurface,"drawAAEllipseAlpha",sdl_drawAAEllipseAlpha,6);
rb_define_method(cSurface,"drawAABezierAlpha",sdl_drawAABezierAlpha,11);
/* rotation and scaling */
rb_define_method(cSurface,"rotateScaledSurface",sdl_rotateScaledSurface,3);
rb_define_module_function(mSDL,"rotateScaledBlit",sdl_rotateScaledBlit,6);
rb_define_module_function(mSDL,"rotateXYScaled",sdl_rotateXYScaled,7);
rb_define_module_function(mSDL,"transform",sdl_transform,10);
rb_define_method(cSurface,"transformSurface",sdl_transformSurface,5);
/* collision detection */
rb_define_method(cSurface,"makeCollisionMap", sdl_makeCollisionMap, 0);
cCollisionMap = rb_define_class_under(mSDL,"CollisionMap",rb_cObject);
rb_define_singleton_method(cCollisionMap,"boundingBoxCheck",
sdl_classBoundingBoxCheck, 8);
rb_define_method(cCollisionMap,"collisionCheck", sdl_collisionCheck, 5);
rb_define_method(cCollisionMap,"boundingBoxCheck", sdl_boundingBoxCheck, 5);
rb_define_method(cCollisionMap,"clear", sdl_unset_cdata, 4);
rb_define_method(cCollisionMap,"set", sdl_set_cdata, 4);
rb_define_method(cCollisionMap,"w", sdl_w_cdata, 0);
rb_define_method(cCollisionMap,"h", sdl_h_cdata, 0);
/* bitmap font */
cBMFont = rb_define_class_under(mSDL,"BMFont",rb_cObject);
rb_define_singleton_method(cBMFont,"open",sdl_bf_open,2);
rb_define_method(cBMFont,"setColor",sdl_bf_setColor,3);
rb_define_method(cBMFont,"height",sdl_bf_getHeight,0);
rb_define_method(cBMFont,"width",sdl_bf_getWidth,0);
rb_define_method(cBMFont,"textSize",sdl_bf_textSize, 1);
rb_define_method(cBMFont,"textout",sdl_bf_textout,4);
defineConstForSGE();
}
#endif /* HAVE_SGE */
syntax highlighted by Code2HTML, v. 0.9.1