|
From: <md...@us...> - 2011-01-03 13:45:27
|
Revision: 8872
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8872&view=rev
Author: mdehoon
Date: 2011-01-03 13:45:21 +0000 (Mon, 03 Jan 2011)
Log Message:
-----------
Making the necessary changes for Python 3.
Modified Paths:
--------------
trunk/matplotlib/src/_macosx.m
Modified: trunk/matplotlib/src/_macosx.m
===================================================================
--- trunk/matplotlib/src/_macosx.m 2011-01-02 22:46:13 UTC (rev 8871)
+++ trunk/matplotlib/src/_macosx.m 2011-01-03 13:45:21 UTC (rev 8872)
@@ -5,6 +5,17 @@
#include "numpy/arrayobject.h"
#include "path_cleanup.h"
+/* Must define Py_TYPE for Python 2.5 or older */
+#ifndef Py_TYPE
+# define Py_TYPE(o) ((o)->ob_type)
+#endif
+
+/* Must define PyVarObject_HEAD_INIT for Python 2.5 or older */
+#ifndef PyVarObject_HEAD_INIT
+#define PyVarObject_HEAD_INIT(type, size) \
+ PyObject_HEAD_INIT(type) size,
+#endif
+
/* Proper way to check for the OS X version we are compiling for, from
http://developer.apple.com/documentation/DeveloperTools/Conceptual/cross_development */
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1050
@@ -488,14 +499,18 @@
ngc--;
if (ngc==0) _dealloc_atsui();
- self->ob_type->tp_free((PyObject*)self);
+ Py_TYPE(self)->tp_free((PyObject*)self);
}
#endif
static PyObject*
GraphicsContext_repr(GraphicsContext* self)
{
+#if PY_MAJOR_VERSION >= 3
+ return PyUnicode_FromFormat("GraphicsContext object %p wrapping the Quartz 2D graphics context %p", (void*)self, (void*)(self->cr));
+#else
return PyString_FromFormat("GraphicsContext object %p wrapping the Quartz 2D graphics context %p", (void*)self, (void*)(self->cr));
+#endif
}
static PyObject*
@@ -2236,6 +2251,9 @@
#else
ATSFontRef font = 0;
#endif
+#if PY_MAJOR_VERSION >= 3
+ PyObject* ascii = NULL;
+#endif
const int k = (strcmp(italic, "italic") ? 0 : 2)
+ (strcmp(weight, "bold") ? 0 : 1);
@@ -2416,8 +2434,14 @@
for (i = 0; i < n; i++)
{
PyObject* item = PyList_GET_ITEM(family, i);
+#if PY_MAJOR_VERSION >= 3
+ ascii = PyUnicode_AsASCIIString(item);
+ if(!ascii) return 0;
+ temp = PyBytes_AS_STRING(ascii);
+#else
if(!PyString_Check(item)) return 0;
temp = PyString_AS_STRING(item);
+#endif
for (j = 0; j < NMAP; j++)
{ if (!strcmp(map[j].name, temp))
{ temp = psnames[map[j].index][k];
@@ -2444,6 +2468,10 @@
name = temp;
break;
}
+#if PY_MAJOR_VERSION >= 3
+ Py_DECREF(ascii);
+ ascii = NULL;
+#endif
}
if(!font)
{ string = CFStringCreateWithCString(kCFAllocatorDefault,
@@ -2459,6 +2487,9 @@
#ifndef COMPILING_FOR_10_5
CGContextSelectFont(cr, name, size, kCGEncodingMacRoman);
#endif
+#if PY_MAJOR_VERSION >= 3
+ Py_XDECREF(ascii);
+#endif
return font;
}
@@ -2958,11 +2989,19 @@
CGDataProviderRef provider;
double rect[4] = {0.0, 0.0, self->size.width, self->size.height};
+#if PY_MAJOR_VERSION >= 3
+ if (!PyBytes_Check(image))
+ {
+ PyErr_SetString(PyExc_RuntimeError, "image is not a byte array");
+ return NULL;
+ }
+#else
if (!PyString_Check(image))
{
PyErr_SetString(PyExc_RuntimeError, "image is not a string");
return NULL;
}
+#endif
const size_t bytesPerComponent = 1;
const size_t bitsPerComponent = 8 * bytesPerComponent;
@@ -2978,8 +3017,13 @@
}
Py_INCREF(image);
+#if PY_MAJOR_VERSION >= 3
+ n = PyByteArray_GET_SIZE(image);
+ data = PyByteArray_AS_STRING(image);
+#else
n = PyString_GET_SIZE(image);
data = PyString_AsString(image);
+#endif
provider = CGDataProviderCreateWithData(image,
data,
@@ -3161,8 +3205,7 @@
"set_joinstyle, etc.).\n";
static PyTypeObject GraphicsContextType = {
- PyObject_HEAD_INIT(NULL)
- 0, /*ob_size*/
+ PyVarObject_HEAD_INIT(NULL, 0)
"_macosx.GraphicsContext", /*tp_name*/
sizeof(GraphicsContext), /*tp_basicsize*/
0, /*tp_itemsize*/
@@ -3247,14 +3290,19 @@
[self->view setCanvas: NULL];
[self->view release];
}
- self->ob_type->tp_free((PyObject*)self);
+ Py_TYPE(self)->tp_free((PyObject*)self);
}
static PyObject*
FigureCanvas_repr(FigureCanvas* self)
{
+#if PY_MAJOR_VERSION >= 3
+ return PyUnicode_FromFormat("FigureCanvas object %p wrapping NSView %p",
+ (void*)self, (void*)(self->view));
+#else
return PyString_FromFormat("FigureCanvas object %p wrapping NSView %p",
(void*)self, (void*)(self->view));
+#endif
}
static PyObject*
@@ -3588,8 +3636,7 @@
"A FigureCanvas object wraps a Cocoa NSView object.\n";
static PyTypeObject FigureCanvasType = {
- PyObject_HEAD_INIT(NULL)
- 0, /*ob_size*/
+ PyVarObject_HEAD_INIT(NULL, 0)
"_macosx.FigureCanvas", /*tp_name*/
sizeof(FigureCanvas), /*tp_basicsize*/
0, /*tp_itemsize*/
@@ -3720,8 +3767,13 @@
static PyObject*
FigureManager_repr(FigureManager* self)
{
+#if PY_MAJOR_VERSION >= 3
+ return PyUnicode_FromFormat("FigureManager object %p wrapping NSWindow %p",
+ (void*) self, (void*)(self->window));
+#else
return PyString_FromFormat("FigureManager object %p wrapping NSWindow %p",
(void*) self, (void*)(self->window));
+#endif
}
static void
@@ -3734,7 +3786,7 @@
[window close];
[pool release];
}
- self->ob_type->tp_free((PyObject*)self);
+ Py_TYPE(self)->tp_free((PyObject*)self);
}
static PyObject*
@@ -3765,8 +3817,7 @@
"A FigureManager object wraps a Cocoa NSWindow object.\n";
static PyTypeObject FigureManagerType = {
- PyObject_HEAD_INIT(NULL)
- 0, /*ob_size*/
+ PyVarObject_HEAD_INIT(NULL, 0)
"_macosx.FigureManager", /*tp_name*/
sizeof(FigureManager), /*tp_basicsize*/
0, /*tp_itemsize*/
@@ -4101,13 +4152,17 @@
NavigationToolbar_dealloc(NavigationToolbar *self)
{
[self->handler release];
- self->ob_type->tp_free((PyObject*)self);
+ Py_TYPE(self)->tp_free((PyObject*)self);
}
static PyObject*
NavigationToolbar_repr(NavigationToolbar* self)
{
+#if PY_MAJOR_VERSION >= 3
+ return PyUnicode_FromFormat("NavigationToolbar object %p", (void*)self);
+#else
return PyString_FromFormat("NavigationToolbar object %p", (void*)self);
+#endif
}
static char NavigationToolbar_doc[] =
@@ -4214,7 +4269,11 @@
{
if(states[i]==1)
{
+#if PY_MAJOR_VERSION >= 3
+ PyList_SET_ITEM(list, j, PyLong_FromLong(i));
+#else
PyList_SET_ITEM(list, j, PyInt_FromLong(i));
+#endif
j++;
}
}
@@ -4237,8 +4296,7 @@
};
static PyTypeObject NavigationToolbarType = {
- PyObject_HEAD_INIT(NULL)
- 0, /*ob_size*/
+ PyVarObject_HEAD_INIT(NULL, 0)
"_macosx.NavigationToolbar", /*tp_name*/
sizeof(NavigationToolbar), /*tp_basicsize*/
0, /*tp_itemsize*/
@@ -4623,13 +4681,17 @@
NavigationToolbar2_dealloc(NavigationToolbar2 *self)
{
[self->handler release];
- self->ob_type->tp_free((PyObject*)self);
+ Py_TYPE(self)->tp_free((PyObject*)self);
}
static PyObject*
NavigationToolbar2_repr(NavigationToolbar2* self)
{
+#if PY_MAJOR_VERSION >= 3
+ return PyUnicode_FromFormat("NavigationToolbar2 object %p", (void*)self);
+#else
return PyString_FromFormat("NavigationToolbar2 object %p", (void*)self);
+#endif
}
static char NavigationToolbar2_doc[] =
@@ -4662,8 +4724,7 @@
};
static PyTypeObject NavigationToolbar2Type = {
- PyObject_HEAD_INIT(NULL)
- 0, /*ob_size*/
+ PyVarObject_HEAD_INIT(NULL, 0)
"_macosx.NavigationToolbar2", /*tp_name*/
sizeof(NavigationToolbar2), /*tp_basicsize*/
0, /*tp_itemsize*/
@@ -5539,14 +5600,19 @@
CFRelease(self->timer);
self->timer = NULL;
}
- self->ob_type->tp_free((PyObject*)self);
+ Py_TYPE(self)->tp_free((PyObject*)self);
}
static PyObject*
Timer_repr(Timer* self)
{
+#if PY_MAJOR_VERSION >= 3
+ return PyUnicode_FromFormat("Timer object %p wrapping CFRunLoopTimerRef %p",
+ (void*) self, (void*)(self->timer));
+#else
return PyString_FromFormat("Timer object %p wrapping CFRunLoopTimerRef %p",
(void*) self, (void*)(self->timer));
+#endif
}
static char Timer_doc[] =
@@ -5657,8 +5723,7 @@
};
static PyTypeObject TimerType = {
- PyObject_HEAD_INIT(NULL)
- 0, /*ob_size*/
+ PyVarObject_HEAD_INIT(NULL, 0)
"_macosx.Timer", /*tp_name*/
sizeof(Timer), /*tp_basicsize*/
0, /*tp_itemsize*/
@@ -5722,23 +5787,52 @@
{NULL, NULL, 0, NULL}/* sentinel */
};
+#if PY_MAJOR_VERSION >= 3
+
+static struct PyModuleDef moduledef = {
+ PyModuleDef_HEAD_INIT,
+ "_macosx",
+ "Mac OS X native backend",
+ -1,
+ methods,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+PyObject* PyInit__macosx(void)
+
+#else
+
void init_macosx(void)
-{ PyObject *m;
+#endif
+{ PyObject *module;
import_array();
- if (PyType_Ready(&GraphicsContextType) < 0) return;
- if (PyType_Ready(&FigureCanvasType) < 0) return;
- if (PyType_Ready(&FigureManagerType) < 0) return;
- if (PyType_Ready(&NavigationToolbarType) < 0) return;
- if (PyType_Ready(&NavigationToolbar2Type) < 0) return;
- if (PyType_Ready(&TimerType) < 0) return;
+ if (PyType_Ready(&GraphicsContextType) < 0
+ || PyType_Ready(&FigureCanvasType) < 0
+ || PyType_Ready(&FigureManagerType) < 0
+ || PyType_Ready(&NavigationToolbarType) < 0
+ || PyType_Ready(&NavigationToolbar2Type) < 0
+ || PyType_Ready(&TimerType) < 0)
+#if PY_MAJOR_VERSION >= 3
+ return NULL;
+#else
+ return;
+#endif
- m = Py_InitModule4("_macosx",
- methods,
- "Mac OS X native backend",
- NULL,
- PYTHON_API_VERSION);
+#if PY_MAJOR_VERSION >= 3
+ module = PyModule_Create(&moduledef);
+ if (module==NULL) return NULL;
+#else
+ module = Py_InitModule4("_macosx",
+ methods,
+ "Mac OS X native backend",
+ NULL,
+ PYTHON_API_VERSION);
+#endif
Py_INCREF(&GraphicsContextType);
Py_INCREF(&FigureCanvasType);
@@ -5746,12 +5840,12 @@
Py_INCREF(&NavigationToolbarType);
Py_INCREF(&NavigationToolbar2Type);
Py_INCREF(&TimerType);
- PyModule_AddObject(m, "GraphicsContext", (PyObject*) &GraphicsContextType);
- PyModule_AddObject(m, "FigureCanvas", (PyObject*) &FigureCanvasType);
- PyModule_AddObject(m, "FigureManager", (PyObject*) &FigureManagerType);
- PyModule_AddObject(m, "NavigationToolbar", (PyObject*) &NavigationToolbarType);
- PyModule_AddObject(m, "NavigationToolbar2", (PyObject*) &NavigationToolbar2Type);
- PyModule_AddObject(m, "Timer", (PyObject*) &TimerType);
+ PyModule_AddObject(module, "GraphicsContext", (PyObject*) &GraphicsContextType);
+ PyModule_AddObject(module, "FigureCanvas", (PyObject*) &FigureCanvasType);
+ PyModule_AddObject(module, "FigureManager", (PyObject*) &FigureManagerType);
+ PyModule_AddObject(module, "NavigationToolbar", (PyObject*) &NavigationToolbarType);
+ PyModule_AddObject(module, "NavigationToolbar2", (PyObject*) &NavigationToolbar2Type);
+ PyModule_AddObject(module, "Timer", (PyObject*) &TimerType);
PyOS_InputHook = wait_for_stdin;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|