X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2Fgacela_SDL.c;h=ba567b52434c3aa802153b600414e28bb22a579f;hb=ca3edcecf937f854c1b5d9eeac566d85dc749cd0;hp=e20877f554a37b8896a0cf9e85ff246de7e815ea;hpb=042f93e750461b4d7235f702c973f0bd1effcae9;p=gacela.git diff --git a/src/gacela_SDL.c b/src/gacela_SDL.c index e20877f..ba567b5 100644 --- a/src/gacela_SDL.c +++ b/src/gacela_SDL.c @@ -20,6 +20,7 @@ #include #include #include +#include #include "gacela_SDL.h" struct surface @@ -59,6 +60,16 @@ get_surface_address (SCM surface_smob) return surface->surface_address; } +SCM +get_surface_filename (SCM surface_smob) +{ + struct surface *surface; + + scm_assert_smob_type (surface_tag, surface_smob); + surface = (struct surface *) SCM_SMOB_DATA (surface_smob); + return surface->filename; +} + SCM get_surface_width (SCM surface_smob) { @@ -75,6 +86,22 @@ get_surface_height (SCM surface_smob) return scm_from_int (surface->h); } +SCM +get_surface_pixels (SCM surface_smob) +{ + SDL_Surface *surface = get_surface_address (surface_smob); + + return scm_from_int (surface->pixels); +} + +SCM +get_surface_format_BytesPerPixel (SCM surface_smob) +{ + SDL_Surface *surface = get_surface_address (surface_smob); + + return scm_from_int (surface->format->BytesPerPixel); +} + SCM mark_surface (SCM surface_smob) { @@ -137,6 +164,12 @@ gacela_SDL_SetVideoMode (SCM width, SCM height, SCM bpp, SCM flags) } } +SCM +gacela_SDL_FreeSurface (SCM surface) +{ + return scm_from_int (free_surface (surface)); +} + SCM gacela_SDL_WM_SetCaption (SCM title, SCM icon) { @@ -166,7 +199,27 @@ gacela_SDL_GetTicks (void) SCM gacela_SDL_DisplayFormat (SCM surface) { - return scm_from_int ((int)SDL_DisplayFormat (get_surface_address (surface))); + SDL_Surface *new = SDL_DisplayFormat (get_surface_address (surface)); + + if (new) { + return make_surface (scm_from_locale_string (get_surface_filename (surface)), new); + } + else { + return SCM_BOOL_F; + } +} + +SCM +gacela_SDL_DisplayFormatAlpha (SCM surface) +{ + SDL_Surface *new = SDL_DisplayFormatAlpha (get_surface_address (surface)); + + if (new) { + return make_surface (scm_from_locale_string (get_surface_filename (surface)), new); + } + else { + return SCM_BOOL_F; + } } SCM @@ -181,6 +234,12 @@ gacela_SDL_SetColorKey (SCM surface, SCM flag, SCM key) return scm_from_int (SDL_SetColorKey (get_surface_address (surface), scm_to_int (flag), scm_to_int (key))); } +SCM +gacela_SDL_SetAlpha (SCM surface, SCM flag, SCM alpha) +{ + return scm_from_int (SDL_SetAlpha (get_surface_address (surface), scm_to_int (flag), scm_to_int (alpha))); +} + SCM gacela_SDL_LoadBMP (SCM file) { @@ -262,6 +321,19 @@ gacela_SDL_EnableKeyRepeat (SCM delay, SCM interval) return scm_from_int (SDL_EnableKeyRepeat (scm_to_int (delay), scm_to_int (interval))); } +SCM +gacela_zoomSurface (SCM src, SCM zoomx, SCM zoomy, SCM smooth) +{ + SDL_Surface *image = zoomSurface (get_surface_address (src), scm_to_double (zoomx), scm_to_double (zoomy), scm_to_int (smooth)); + + if (image) { + return make_surface (get_surface_filename (src), image); + } + else { + return SCM_BOOL_F; + } +} + SCM gacela_Mix_OpenAudio (SCM frequency, SCM format, SCM channels, SCM chunksize) { @@ -353,8 +425,11 @@ SDL_register_functions (void* data) scm_set_smob_mark (surface_tag, mark_surface); scm_set_smob_free (surface_tag, free_surface); scm_set_smob_print (surface_tag, print_surface); + scm_c_define_gsubr ("surface-file", 1, 0, 0, get_surface_filename); scm_c_define_gsubr ("surface-w", 1, 0, 0, get_surface_width); scm_c_define_gsubr ("surface-h", 1, 0, 0, get_surface_height); + scm_c_define_gsubr ("surface-pixels", 1, 0, 0, get_surface_pixels); + scm_c_define_gsubr ("surface-format-BytesPerPixel", 1, 0, 0, get_surface_format_BytesPerPixel); scm_c_define ("SDL_INIT_TIMER", scm_from_int (SDL_INIT_TIMER)); scm_c_define ("SDL_INIT_AUDIO", scm_from_int (SDL_INIT_AUDIO)); @@ -422,13 +497,16 @@ SDL_register_functions (void* data) scm_c_define_gsubr ("SDL_Init", 1, 0, 0, gacela_SDL_Init); scm_c_define_gsubr ("SDL_Quit", 0, 0, 0, gacela_SDL_Quit); scm_c_define_gsubr ("SDL_SetVideoMode", 4, 0, 0, gacela_SDL_SetVideoMode); + scm_c_define_gsubr ("SDL_FreeSurface", 1, 0, 0, gacela_SDL_FreeSurface); scm_c_define_gsubr ("SDL_WM_SetCaption", 2, 0, 0, gacela_SDL_WM_SetCaption); scm_c_define_gsubr ("SDL_Flip", 1, 0, 0, gacela_SDL_Flip); scm_c_define_gsubr ("SDL_Delay", 1, 0, 0, gacela_SDL_Delay); scm_c_define_gsubr ("SDL_GetTicks", 0, 0, 0, gacela_SDL_GetTicks); scm_c_define_gsubr ("SDL_DisplayFormat", 1, 0, 0, gacela_SDL_DisplayFormat); + scm_c_define_gsubr ("SDL_DisplayFormatAlpha", 1, 0, 0, gacela_SDL_DisplayFormatAlpha); scm_c_define_gsubr ("SDL_MapRGB", 4, 0, 0, gacela_SDL_MapRGB); scm_c_define_gsubr ("SDL_SetColorKey", 3, 0, 0, gacela_SDL_SetColorKey); + scm_c_define_gsubr ("SDL_SetAlpha", 3, 0, 0, gacela_SDL_SetAlpha); scm_c_define_gsubr ("SDL_LoadBMP", 1, 0, 0, gacela_SDL_LoadBMP); scm_c_define_gsubr ("IMG_Load", 1, 0, 0, gacela_IMG_Load); scm_c_define_gsubr ("SDL_GetVideoInfo", 0, 0, 0, gacela_SDL_GetVideoInfo); @@ -436,6 +514,7 @@ SDL_register_functions (void* data) scm_c_define_gsubr ("SDL_PollEvent", 0, 0, 0, gacela_SDL_PollEvent); scm_c_define_gsubr ("SDL_GL_SwapBuffers", 0, 0, 0, gacela_SDL_GL_SwapBuffers); scm_c_define_gsubr ("SDL_EnableKeyRepeat", 2, 0, 0, gacela_SDL_EnableKeyRepeat); + scm_c_define_gsubr ("zoomSurface", 4, 0, 0, gacela_zoomSurface); scm_c_define_gsubr ("Mix_OpenAudio", 4, 0, 0, gacela_Mix_OpenAudio); scm_c_define_gsubr ("Mix_LoadMUS", 1, 0, 0, gacela_Mix_LoadMUS); scm_c_define_gsubr ("Mix_LoadWAV", 1, 0, 0, gacela_Mix_LoadWAV);