#include <SDL/SDL_events.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_mixer.h>
+#include <SDL/SDL_rotozoom.h>
#include "gacela_SDL.h"
struct surface
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)
{
}
}
+SCM
+gacela_SDL_FreeSurface (SCM surface)
+{
+ return scm_from_int (free_surface (surface));
+}
+
SCM
gacela_SDL_WM_SetCaption (SCM title, SCM icon)
{
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
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)
{
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)
{
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 ("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);
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);