/*
pygame - Python Game Library
Copyright (C) 2000-2001 Pete Shinners
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Pete Shinners
pete@shinners.org
*/
/*
* extended image module for pygame, note this only has
* the extended load function, which is autmatically used
* by the normal pygame.image module if it is available.
*/
#include "pygame.h"
#include <SDL_image.h>
static char* find_extension(char* fullname)
{
char* dot;
if(!fullname)
return NULL;
dot = strrchr(fullname, '.');
if(!dot)
return fullname;
return dot+1;
}
static PyObject* image_load_ext(PyObject* self, PyObject* arg)
{
PyObject* file, *final;
char* name = NULL;
SDL_Surface* surf;
SDL_RWops *rw;
if(!PyArg_ParseTuple(arg, "O|s", &file, &name))
return NULL;
if(PyString_Check(file) || PyUnicode_Check(file))
{
if(!PyArg_ParseTuple(arg, "s|O", &name, &file))
return NULL;
Py_BEGIN_ALLOW_THREADS
surf = IMG_Load(name);
Py_END_ALLOW_THREADS
}
else
{
if(!name && PyFile_Check(file))
name = PyString_AsString(PyFile_Name(file));
if(!(rw = RWopsFromPython(file)))
return NULL;
if(RWopsCheckPython(rw))
{
surf = IMG_LoadTyped_RW(rw, 1, find_extension(name));
}
else
{
Py_BEGIN_ALLOW_THREADS
surf = IMG_LoadTyped_RW(rw, 1, find_extension(name));
Py_END_ALLOW_THREADS
}
}
if(!surf)
return RAISE(PyExc_SDLError, IMG_GetError());
final = PySurface_New(surf);
if(!final)
SDL_FreeSurface(surf);
return final;
}
static PyMethodDef image_builtins[] =
{
{ "load_extended", image_load_ext, 1, NULL },
{ NULL, NULL }
};
PYGAME_EXPORT
void initimageext(void)
{
/* create the module */
Py_InitModule3("imageext", image_builtins, NULL);
/*imported needed apis*/
import_pygame_base();
import_pygame_surface();
import_pygame_rwobject();
}
syntax highlighted by Code2HTML, v. 0.9.1