diff options
author | Joilnen Leite <joilnen.leite@gmail.com> | 2005-05-05 01:26:29 +0400 |
---|---|---|
committer | Joilnen Leite <joilnen.leite@gmail.com> | 2005-05-05 01:26:29 +0400 |
commit | cc008dbc308152faeb3d4a0ac3c6dee65b3d5785 (patch) | |
tree | bb787923782b0f21d9ab677c247d7f289e5a1e61 /source/blender/python/api2_2x/Font.c | |
parent | 6db7d23b5fb7c028c205ba2d7db404665d204b4b (diff) |
it wrapping font stuff like font file info
.
Diffstat (limited to 'source/blender/python/api2_2x/Font.c')
-rw-r--r-- | source/blender/python/api2_2x/Font.c | 285 |
1 files changed, 285 insertions, 0 deletions
diff --git a/source/blender/python/api2_2x/Font.c b/source/blender/python/api2_2x/Font.c new file mode 100644 index 00000000000..5e432a7086d --- /dev/null +++ b/source/blender/python/api2_2x/Font.c @@ -0,0 +1,285 @@ +/* + * ***** BEGIN GPL/BL DUAL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. The Blender + * Foundation also sells licenses for use in proprietary software under + * the Blender License. See http://www.blender.org/BL/ for information + * about this. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * This is a new part of Blender. + * + * Contributor(s): Joilnen Leite + * + * ***** END GPL/BL DUAL LICENSE BLOCK ***** + */ + +#include "BKE_global.h" +#include "BKE_packedFile.h" +#include "DNA_vfont_types.h" +#include "DNA_packedFile_types.h" +#include "Text3d.h" +#include "Font.h" + +extern PyObject *M_Text3d_LoadFont( PyObject * self, PyObject * args ); + +/*--------------------Python API function prototypes for the Font module----*/ +PyObject *M_Font_New( PyObject * self, PyObject * args ); +static PyObject *M_Font_Get( PyObject * self, PyObject * args ); + +/*------------------------Python API Doc strings for the Font module--------*/ +char M_Font_doc[] = "The Blender Font module\n\n\ +This module provides control over **Font Data** objects in Blender.\n\n\ +Example::\n\n\ + from Blender import Text3d.Font\n\ + l = Text3d.Font.New()\n"; +char M_Font_New_doc[] = "(name) - return a new Font of name 'name'."; +char M_Font_Get_doc[] = "(name) - return a new Font of name 'name'."; + +/*----- Python method structure definition for Blender.Text3d.Font module---*/ +struct PyMethodDef M_Font_methods[] = { + {"New", ( PyCFunction ) M_Font_New, METH_VARARGS, M_Font_New_doc}, + {"Get", ( PyCFunction ) M_Font_Get, METH_VARARGS, M_Font_New_doc}, + {NULL, NULL, 0, NULL} +}; + +/*--------------- Python BPy_Bone methods declarations:-------------------*/ +static PyObject *Font_getName( BPy_Font * self ); +static PyObject *Font_setName( BPy_Font * self, PyObject * args ); +static PyObject *Font_pack( BPy_Font * self, PyObject * args ); +static PyObject *Font_isPacked( BPy_Font * self ); + +/*--------------- Python BPy_Font methods table:--------------------------*/ +static PyMethodDef BPy_Font_methods[] = { + {"GetName", ( PyCFunction ) Font_getName, METH_NOARGS, + "() - return Font name"}, + {"getName", ( PyCFunction ) Font_getName, METH_NOARGS, + "() - return Font name"}, + {"setName", ( PyCFunction ) Font_setName, METH_VARARGS, + "() - return Font name"}, + {"pack", ( PyCFunction ) Font_pack, METH_VARARGS, + "() - pack/unpack Font"}, + {"isPacked", ( PyCFunction ) Font_isPacked, METH_NOARGS, + "() - pack/unpack Font"}, + {NULL, NULL, 0, NULL} +}; + +/*--------------- Python TypeBone callback function prototypes----------*/ +static void Font_dealloc( BPy_Font * font ); +static PyObject *Font_getAttr( BPy_Font * bone, char *name ); +static int Font_setAttr( BPy_Font * font, char *name, PyObject * v ); +static int Font_compare( BPy_Font * a1, BPy_Font * a2 ); +static PyObject *Font_repr( BPy_Font * font ); + +PyTypeObject Font_Type = { + PyObject_HEAD_INIT( NULL ) + 0, /* ob_size */ + "Font", /* tp_name */ + sizeof( BPy_Font ), /* tp_basicsize */ + 0, /* tp_itemsize */ + /* methods */ + ( destructor ) Font_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + ( getattrfunc ) Font_getAttr, /* tp_getattr */ + ( setattrfunc ) Font_setAttr, /* tp_setattr */ + ( cmpfunc ) Font_compare, /* tp_compare */ + ( reprfunc ) Font_repr, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_as_hash */ + 0, 0, 0, 0, 0, 0, + 0, /* tp_doc */ + 0, 0, 0, 0, 0, 0, + BPy_Font_methods, /* tp_methods */ + 0, /* tp_members */ +}; + +/*--------------- Font Module Init-----------------------------*/ +PyObject *Font_Init( void ) +{ + PyObject *submodule; + + Font_Type.ob_type = &PyType_Type; + + submodule = Py_InitModule3( "Blender.Text3d.Font", + M_Font_methods, M_Font_doc ); + + return ( submodule ); +} + +/*--------------- Bone module internal callbacks-----------------*/ +/*---------------BPy_Bone internal callbacks/methods-------------*/ + +//--------------- dealloc------------------------------------------ +static void Font_dealloc( BPy_Font * self ) +{ + PyObject_DEL( self ); +} + +/*---------------getattr-------------------------------------------*/ +static PyObject *Font_getAttr( BPy_Font * self, char *name ) +{ + return Py_FindMethod( BPy_Font_methods, ( PyObject * ) self, name ); +} + +/*--------------- setattr-------------------------------------------*/ +static int Font_setAttr( BPy_Font * self, char *name, PyObject * value ) +{ + return 0; +} + +/*--------------- repr---------------------------------------------*/ +static PyObject *Font_repr( BPy_Font * self ) +{ + if( self->font ) + return PyString_FromFormat( "[Font \"%s\"]", + self->font->name ); + else + return PyString_FromString( "NULL" ); +} + +/*--------------- compare------------------------------------------*/ +static int Font_compare( BPy_Font * a, BPy_Font * b ) +{ + VFont *pa = a->font, *pb = b->font; + return ( pa == pb ) ? 0 : -1; +} + +/*--------------- Font_CreatePyObject---------------------------------*/ +PyObject *Font_CreatePyObject( struct VFont * font ) +{ + BPy_Font *blen_font; + + blen_font = ( BPy_Font * ) PyObject_NEW( BPy_Font, &Font_Type ); + + /*set the all important Bone flag*/ + blen_font->font = font; + + return ( ( PyObject * ) blen_font ); +} + +/*--------------- Font_CheckPyObject--------------------------------*/ +int Font_CheckPyObject( PyObject * py_obj ) +{ + return ( py_obj->ob_type == &Font_Type ); +} + +/*--------------- Font_FromPyObject---------------------------------*/ +struct VFont *Font_FromPyObject( PyObject * py_obj ) +{ + BPy_Font *blen_obj; + + blen_obj = ( BPy_Font * ) py_obj; + if( !( ( BPy_Font * ) py_obj )->font ) { /*test to see if linked to text3d*/ + //use python vars + return NULL; + } else { + //use bone datastruct + return ( blen_obj->font ); + } +} + +/*--------------- Python Font Module methods------------------------*/ + +/*--------------- Blender.Text3d.Font.New()-----------------------*/ +PyObject *M_Font_New( PyObject * self, PyObject * args ) +{ + char *name_str = "<builtin>"; + char *parent_str = ""; + BPy_Font *py_font = NULL; /* for Font Data object wrapper in Python */ + + if( !PyArg_ParseTuple( args, "|s", &name_str ) ) + return ( EXPP_ReturnPyObjError( PyExc_AttributeError, + "expected string or empty argument" ) ); + + /*create python font*/ + if( !S_ISDIR(BLI_exist(name_str)) ) + py_font= M_Text3d_LoadFont (self, Py_BuildValue("(s)", name_str)); + else + return EXPP_incr_ret( Py_None ); + return ( PyObject * ) py_font; +} + +/*--------------- Blender.Text3d.Font.Get()-----------------------*/ +static PyObject *M_Font_Get( PyObject * self, PyObject * args ) +{ + return M_Font_New (self, args); +} + +/*--------------- Python BPy_Font methods---------------------------*/ + +/*--------------- BPy_Font.getName()--------------------------------*/ +static PyObject *Font_getName( BPy_Font * self ) +{ + PyObject *attr = NULL; + + if( self->font ) + attr = PyString_FromString( self->font->name ); + if( attr ) + return attr; + + return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, + "couldn't get Bone.name attribute" ) ); +} + +/*--------------- BPy_Font.setName()---------------------------------*/ +static PyObject *Font_setName( BPy_Font * self, PyObject * args ) +{ + char *name; + char buf[256]; + + if( !PyArg_ParseTuple( args, "s", &name ) ) + return ( EXPP_ReturnPyObjError + ( PyExc_AttributeError, + "expected string argument" ) ); + + /* guarantee a null terminated string of reasonable size */ + PyOS_snprintf( buf, sizeof( buf ), "%s", name ); + + if( self->font ) + BLI_strncpy( self->font->name, buf, sizeof( buf ) ); + return EXPP_incr_ret( Py_None ); +} + +/*--------------- BPy_Font.pack()---------------------------------*/ +static PyObject *Font_pack( BPy_Font * self, PyObject * args ) +{ + int pack= 0; + if( !PyArg_ParseTuple( args, "i", &pack ) ) + return ( EXPP_ReturnPyObjError + ( PyExc_AttributeError, + "expected string argument" ) ); + if( pack && !self->font->packedfile ) + self->font->packedfile = newPackedFile(self->font->name); + else if (self->font->packedfile) + if (unpackVFont(self->font, PF_ASK) == RET_OK) + G.fileflags &= ~G_AUTOPACK; + + + return EXPP_incr_ret( Py_None ); +} + +/*--------------- BPy_Font.ispack()---------------------------------*/ +static PyObject *Font_isPacked( BPy_Font * self ) +{ + if (G.fileflags & G_AUTOPACK) + return EXPP_incr_ret_True(); + else + return EXPP_incr_ret_False(); +} + |