Mercurial > enso_osx
changeset 21:df405fded717
Modified pycairo to work with Quartz-based cairo surfaces and to be mounted at enso_osx.cairo, added it to the build system, and created an enso_osx.cairo shadow package.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Mon, 25 Feb 2008 19:57:19 -0800 |
parents | 92de49b0276c |
children | d70c53c55480 |
files | enso_osx/__init__.py enso_osx/cairo/__init__.py src/SConscript src/pycairo/SConscript src/pycairo/cairomodule.c src/pycairo/pycairo-context.c src/pycairo/pycairo-font.c src/pycairo/pycairo-matrix.c src/pycairo/pycairo-path.c src/pycairo/pycairo-pattern.c src/pycairo/pycairo-private.h src/pycairo/pycairo-surface.c src/pycairo/pycairo.h |
diffstat | 13 files changed, 156 insertions(+), 33 deletions(-) [+] |
line wrap: on
line diff
--- a/enso_osx/__init__.py Mon Feb 25 19:54:19 2008 -0800 +++ b/enso_osx/__init__.py Mon Feb 25 19:57:19 2008 -0800 @@ -5,5 +5,8 @@ elif name == "graphics": import enso_osx.graphics return enso_osx.graphics + elif name == "cairo": + import enso_osx.cairo + return enso_osx.cairo else: return None
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/enso_osx/cairo/__init__.py Mon Feb 25 19:57:19 2008 -0800 @@ -0,0 +1,1 @@ +from enso_osx.cairo._cairo import *
--- a/src/SConscript Mon Feb 25 19:54:19 2008 -0800 +++ b/src/SConscript Mon Feb 25 19:57:19 2008 -0800 @@ -49,7 +49,7 @@ qcbEnv = env.Copy() qcbEnv.Append( - CPPPATH=[os.path.join( sys.prefix, "include/pycairo" )], + CPPPATH=["pycairo"], CCFLAGS=cairoIncludeFlags.split(), LINKFLAGS=cairoLibFlags, LIBS=["python", "cairo"], @@ -71,3 +71,14 @@ ) env.Install( "#bin", keyNotifier ) + +# Pycairo + +pycairoEnv = env.Copy() + +pycairoEnv.Append( + CCFLAGS=cairoIncludeFlags.split(), + LINKFLAGS=cairoLibFlags + ) + +SConscript( "pycairo/SConscript", exports="pycairoEnv" )
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/pycairo/SConscript Mon Feb 25 19:57:19 2008 -0800 @@ -0,0 +1,15 @@ +Import( "pycairoEnv" ) + +import glob + +sourceList = [ + glob.glob( "*.c" ) + ] + +pycairoLib = pycairoEnv.LoadableModule( + target="_cairo.so", + source=sourceList, + LIBS=["python", "cairo"] + ) + +pycairoEnv.Install( "#enso_osx/cairo", pycairoLib )
--- a/src/pycairo/cairomodule.c Mon Feb 25 19:54:19 2008 -0800 +++ b/src/pycairo/cairomodule.c Mon Feb 25 19:57:19 2008 -0800 @@ -125,6 +125,11 @@ #else 0, #endif +#ifdef CAIRO_HAS_QUARTZ_SURFACE + &PycairoQuartzSurface_Type, +#else + 0, +#endif PycairoSurface_FromSurface, Pycairo_Check_Status, @@ -226,8 +231,13 @@ if (PyType_Ready(&PycairoXlibSurface_Type) < 0) return; #endif +#ifdef CAIRO_HAS_QUARTZ_SURFACE + PycairoQuartzSurface_Type.tp_base = &PycairoSurface_Type; + if (PyType_Ready(&PycairoQuartzSurface_Type) < 0) + return; +#endif - m = Py_InitModule("cairo._cairo", cairo_functions); + m = Py_InitModule("enso_osx.cairo._cairo", cairo_functions); PyModule_AddStringConstant(m, "version", pycairo_version_string); PyModule_AddObject(m, "version_info", @@ -299,11 +309,17 @@ (PyObject *)&PycairoXlibSurface_Type); #endif +#ifdef CAIRO_HAS_QUARTZ_SURFACE + Py_INCREF(&PycairoQuartzSurface_Type); + PyModule_AddObject(m, "QuartzSurface", + (PyObject *)&PycairoQuartzSurface_Type); +#endif + PyModule_AddObject(m, "CAPI", PyCObject_FromVoidPtr(&CAPI, NULL)); /* Add 'cairo.Error' to the module */ if (CairoError == NULL) { - CairoError = PyErr_NewException("cairo.Error", NULL, NULL); + CairoError = PyErr_NewException("enso_osx.cairo.Error", NULL, NULL); if (CairoError == NULL) return; }
--- a/src/pycairo/pycairo-context.c Mon Feb 25 19:54:19 2008 -0800 +++ b/src/pycairo/pycairo-context.c Mon Feb 25 19:57:19 2008 -0800 @@ -1405,7 +1405,7 @@ PyTypeObject PycairoContext_Type = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ - "cairo.Context", /* tp_name */ + "enso_osx.cairo.Context", /* tp_name */ sizeof(PycairoContext), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)pycairo_dealloc, /* tp_dealloc */
--- a/src/pycairo/pycairo-font.c Mon Feb 25 19:54:19 2008 -0800 +++ b/src/pycairo/pycairo-font.c Mon Feb 25 19:57:19 2008 -0800 @@ -37,7 +37,7 @@ #include "pycairo-private.h" -/* class cairo.FontFace --------------------------------------------------- */ +/* class enso_osx.cairo.FontFace --------------------------------------------------- */ /* PycairoFontFace_FromFontFace * Create a new PycairoFontFace from a cairo_font_face_t @@ -99,7 +99,7 @@ PyTypeObject PycairoFontFace_Type = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ - "cairo.FontFace", /* tp_name */ + "enso_osx.cairo.FontFace", /* tp_name */ sizeof(PycairoFontFace), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)font_face_dealloc, /* tp_dealloc */ @@ -142,7 +142,7 @@ }; -/* class cairo.ScaledFont ------------------------------------------------- */ +/* class enso_osx.cairo.ScaledFont ------------------------------------------------- */ /* PycairoScaledFont_FromScaledFont * Create a new PycairoScaledFont from a cairo_scaled_font_t @@ -258,7 +258,7 @@ PyTypeObject PycairoScaledFont_Type = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ - "cairo.ScaledFont", /* tp_name */ + "enso_osx.cairo.ScaledFont", /* tp_name */ sizeof(PycairoScaledFont), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)scaled_font_dealloc, /* tp_dealloc */ @@ -301,7 +301,7 @@ }; -/* class cairo.FontOptions ------------------------------------------------ */ +/* class enso_osx.cairo.FontOptions ------------------------------------------------ */ /* PycairoFontOptions_FromFontOptions * Create a new PycairoFontOptions from a cairo_font_options_t @@ -457,7 +457,7 @@ PyTypeObject PycairoFontOptions_Type = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ - "cairo.FontOptions", /* tp_name */ + "enso_osx.cairo.FontOptions", /* tp_name */ sizeof(PycairoFontOptions), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)font_options_dealloc, /* tp_dealloc */
--- a/src/pycairo/pycairo-matrix.c Mon Feb 25 19:54:19 2008 -0800 +++ b/src/pycairo/pycairo-matrix.c Mon Feb 25 19:57:19 2008 -0800 @@ -112,7 +112,7 @@ { char buf[256]; - PyOS_snprintf(buf, sizeof(buf), "cairo.Matrix(%g, %g, %g, %g, %g, %g)", + PyOS_snprintf(buf, sizeof(buf), "enso_osx.cairo.Matrix(%g, %g, %g, %g, %g, %g)", o->matrix.xx, o->matrix.yx, o->matrix.xy, o->matrix.yy, o->matrix.x0, o->matrix.y0); @@ -283,11 +283,11 @@ static PyMethodDef matrix_methods[] = { /* Do not need to wrap all cairo_matrix_init_*() functions * C API Matrix constructors Python equivalents - * cairo_matrix_init() cairo.Matrix(xx,yx,xy,yy,x0,y0) - * cairo_matrix_init_identity() cairo.Matrix() - * cairo_matrix_init_translate() cairo.Matrix(x0=x0,y0=y0) - * cairo_matrix_init_scale() cairo.Matrix(xx=xx,yy=yy) - * cairo_matrix_init_rotate() cairo.Matrix.init_rotate(radians) + * cairo_matrix_init() enso_osx.cairo.Matrix(xx,yx,xy,yy,x0,y0) + * cairo_matrix_init_identity() enso_osx.cairo.Matrix() + * cairo_matrix_init_translate() enso_osx.cairo.Matrix(x0=x0,y0=y0) + * cairo_matrix_init_scale() enso_osx.cairo.Matrix(xx=xx,yy=yy) + * cairo_matrix_init_rotate() enso_osx.cairo.Matrix.init_rotate(radians) */ {"init_rotate", (PyCFunction)matrix_init_rotate, METH_VARARGS | METH_CLASS }, @@ -304,7 +304,7 @@ PyTypeObject PycairoMatrix_Type = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ - "cairo.Matrix", /* tp_name */ + "enso_osx.cairo.Matrix", /* tp_name */ sizeof(PycairoMatrix), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matrix_dealloc, /* tp_dealloc */
--- a/src/pycairo/pycairo-path.c Mon Feb 25 19:54:19 2008 -0800 +++ b/src/pycairo/pycairo-path.c Mon Feb 25 19:57:19 2008 -0800 @@ -184,7 +184,7 @@ PyTypeObject PycairoPath_Type = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ - "cairo.Path", /* tp_name */ + "enso_osx.cairo.Path", /* tp_name */ sizeof(PycairoPath), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)path_dealloc, /* tp_dealloc */ @@ -307,7 +307,7 @@ PyTypeObject PycairoPathiter_Type = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ - "cairo.Pathiter", /* tp_name */ + "enso_osx.cairo.Pathiter", /* tp_name */ sizeof(PycairoPathiter), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)pathiter_dealloc, /* tp_dealloc */
--- a/src/pycairo/pycairo-pattern.c Mon Feb 25 19:54:19 2008 -0800 +++ b/src/pycairo/pycairo-pattern.c Mon Feb 25 19:57:19 2008 -0800 @@ -145,7 +145,7 @@ PyTypeObject PycairoPattern_Type = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ - "cairo.Pattern", /* tp_name */ + "enso_osx.cairo.Pattern", /* tp_name */ sizeof(PycairoPattern), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)pattern_dealloc, /* tp_dealloc */ @@ -215,7 +215,7 @@ PyTypeObject PycairoSolidPattern_Type = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ - "cairo.SolidPattern", /* tp_name */ + "enso_osx.cairo.SolidPattern", /* tp_name */ sizeof(PycairoSolidPattern), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ @@ -327,7 +327,7 @@ PyTypeObject PycairoSurfacePattern_Type = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ - "cairo.SurfacePattern", /* tp_name */ + "enso_osx.cairo.SurfacePattern", /* tp_name */ sizeof(PycairoSurfacePattern), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ @@ -415,7 +415,7 @@ PyTypeObject PycairoGradient_Type = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ - "cairo.Gradient", /* tp_name */ + "enso_osx.cairo.Gradient", /* tp_name */ sizeof(PycairoGradient), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ @@ -487,7 +487,7 @@ PyTypeObject PycairoLinearGradient_Type = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ - "cairo.LinearGradient", /* tp_name */ + "enso_osx.cairo.LinearGradient", /* tp_name */ sizeof(PycairoLinearGradient), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ @@ -560,7 +560,7 @@ PyTypeObject PycairoRadialGradient_Type = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ - "cairo.RadialGradient", /* tp_name */ + "enso_osx.cairo.RadialGradient", /* tp_name */ sizeof(PycairoRadialGradient), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */
--- a/src/pycairo/pycairo-private.h Mon Feb 25 19:54:19 2008 -0800 +++ b/src/pycairo/pycairo-private.h Mon Feb 25 19:57:19 2008 -0800 @@ -98,6 +98,10 @@ extern PyTypeObject PycairoXlibSurface_Type; #endif +#if CAIRO_HAS_QUARTZ_SURFACE +extern PyTypeObject PycairoQuartzSurface_Type; +#endif + PyObject *PycairoSurface_FromSurface (cairo_surface_t *surface, PyObject *base);
--- a/src/pycairo/pycairo-surface.c Mon Feb 25 19:54:19 2008 -0800 +++ b/src/pycairo/pycairo-surface.c Mon Feb 25 19:57:19 2008 -0800 @@ -98,6 +98,11 @@ type = &PycairoXlibSurface_Type; break; #endif +#if CAIRO_HAS_QUARTZ_SURFACE + case CAIRO_SURFACE_TYPE_QUARTZ: + type = &PycairoQuartzSurface_Type; + break; +#endif default: PyErr_SetString(CairoError, "Unsupported Surface type"); return NULL; @@ -310,7 +315,7 @@ PyTypeObject PycairoSurface_Type = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ - "cairo.Surface", /* tp_name */ + "enso_osx.cairo.Surface", /* tp_name */ sizeof(PycairoSurface), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)surface_dealloc, /* tp_dealloc */ @@ -580,7 +585,7 @@ PyTypeObject PycairoImageSurface_Type = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ - "cairo.ImageSurface", /* tp_name */ + "enso_osx.cairo.ImageSurface", /* tp_name */ sizeof(PycairoImageSurface), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ @@ -682,7 +687,7 @@ PyTypeObject PycairoPDFSurface_Type = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ - "cairo.PDFSurface", /* tp_name */ + "enso_osx.cairo.PDFSurface", /* tp_name */ sizeof(PycairoPDFSurface), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ @@ -816,7 +821,7 @@ PyTypeObject PycairoPSSurface_Type = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ - "cairo.PSSurface", /* tp_name */ + "enso_osx.cairo.PSSurface", /* tp_name */ sizeof(PycairoPSSurface), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ @@ -910,7 +915,7 @@ PyTypeObject PycairoSVGSurface_Type = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ - "cairo.SVGSurface", /* tp_name */ + "enso_osx.cairo.SVGSurface", /* tp_name */ sizeof(PycairoSVGSurface), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ @@ -976,7 +981,7 @@ PyTypeObject PycairoWin32Surface_Type = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ - "cairo.Win32Surface", /* tp_name */ + "enso_osx.cairo.Win32Surface", /* tp_name */ sizeof(PycairoWin32Surface), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ @@ -1060,7 +1065,7 @@ PyTypeObject PycairoXlibSurface_Type = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ - "cairo.XlibSurface", /* tp_name */ + "enso_osx.cairo.XlibSurface", /* tp_name */ sizeof(PycairoXlibSurface), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ @@ -1102,3 +1107,65 @@ 0, /* tp_bases */ }; #endif /* CAIRO_HAS_XLIB_SURFACE */ + +/* Class QuartzSurface(Surface) -------------------------------------------- */ +#if CAIRO_HAS_QUARTZ_SURFACE +#include <cairo-quartz.h> + +static PyObject * +quartz_surface_new (PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + PyErr_SetString(PyExc_TypeError, + "The QuartzSurface type cannot be directly instantiated"); + return NULL; +} + +static PyMethodDef quartz_surface_methods[] = { + {NULL, NULL, 0, NULL}, +}; + +PyTypeObject PycairoQuartzSurface_Type = { + PyObject_HEAD_INIT(NULL) + 0, /* ob_size */ + "enso_osx.cairo.QuartzSurface", /* tp_name */ + sizeof(PycairoQuartzSurface), /* tp_basicsize */ + 0, /* tp_itemsize */ + 0, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + 0, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + quartz_surface_methods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* &PycairoSurface_Type, */ /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + (newfunc)quartz_surface_new, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ + 0, /* tp_bases */ +}; +#endif /* CAIRO_HAS_QUARTZ_SURFACE */
--- a/src/pycairo/pycairo.h Mon Feb 25 19:54:19 2008 -0800 +++ b/src/pycairo/pycairo.h Mon Feb 25 19:57:19 2008 -0800 @@ -90,6 +90,7 @@ #define PycairoSVGSurface PycairoSurface #define PycairoWin32Surface PycairoSurface #define PycairoXlibSurface PycairoSurface +#define PycairoQuartzSurface PycairoSurface /* get C object out of the Python wrapper */ #define PycairoContext_GET(obj) (((PycairoContext *)(obj))->ctx) @@ -128,6 +129,7 @@ PyTypeObject *SVGSurface_Type; PyTypeObject *Win32Surface_Type; PyTypeObject *XlibSurface_Type; + PyTypeObject *QuartzSurface_Type; PyObject *(*Surface_FromSurface)(cairo_surface_t *surface, PyObject *base); /* misc functions */ @@ -185,6 +187,10 @@ #define PycairoXlibSurface_Type *(Pycairo_CAPI->XlibSurface_Type) #endif +#if CAIRO_HAS_QUARTZ_SURFACE +#define PycairoQuartzSurface_Type *(Pycairo_CAPI->QuartzSurface_Type) +#endif + #define PycairoSurface_FromSurface (Pycairo_CAPI->Surface_FromSurface) #define Pycairo_Check_Status (Pycairo_CAPI->Check_Status) @@ -196,7 +202,7 @@ * 2) Add 'Pycairo_IMPORT;' to the init<module> function */ #define Pycairo_IMPORT \ - Pycairo_CAPI = (Pycairo_CAPI_t*) PyCObject_Import("cairo", "CAPI") + Pycairo_CAPI = (Pycairo_CAPI_t*) PyCObject_Import("enso_osx.cairo", "CAPI") #endif /* ifndef _INSIDE_PYCAIRO_ */