int GeoLayer::bezier(int16_t *vx, int16_t *vy, int num_vertex, int steps, uint32_t col) { if(!surf) { error("%s can't run: layer not initialized", __PRETTY_FUNCTION__); return -1; } res = bezierColor(surf, vx, vy, num_vertex, steps, col); if(res < 0) error("error in %s", __PRETTY_FUNCTION__); return(res); }
static PyObject* _gfx_beziercolor (PyObject *self, PyObject* args) { PyObject *surface, *color, *points, *item; Sint16 *vx, *vy; int x, y; Py_ssize_t count, i; int ret, steps; pguint32 c; ASSERT_VIDEO_INIT (NULL); if (!PyArg_ParseTuple (args, "OOiO:bezier", &surface, &points, &steps, &color)) return NULL; if (!PySDLSurface_Check (surface)) { PyErr_SetString (PyExc_TypeError, "surface must be a Surface"); return NULL; } if (!PySequence_Check (points)) { PyErr_SetString (PyExc_TypeError, "points must be a sequence"); return NULL; } count = PySequence_Size (points); if (count < 3) { PyErr_SetString (PyExc_ValueError, "points must contain more than 2 points"); return NULL; } if (!ColorFromObj (color, &c)) return NULL; vx = PyMem_New (Sint16, (size_t) count); vy = PyMem_New (Sint16, (size_t) count); if (!vx || !vy) { PyErr_SetString (PyExc_MemoryError, "memory allocation failed"); if (vx) PyMem_Free (vx); if (vy) PyMem_Free (vy); return NULL; } for (i = 0; i < count; i++) { item = PySequence_ITEM (points, i); if (!PointFromObj (item, &x, &y)) { PyMem_Free (vx); PyMem_Free (vy); Py_XDECREF (item); return NULL; } Py_DECREF (item); vx[i] = (Sint16)x; vy[i] = (Sint16)y; } Py_BEGIN_ALLOW_THREADS; ret = bezierColor (((PySDLSurface*)surface)->surface, vx, vy, (int)count, steps, (Uint32)c); Py_END_ALLOW_THREADS; PyMem_Free (vx); PyMem_Free (vy); if (ret == -1) { PyErr_SetString (PyExc_PyGameError, SDL_GetError ()); return NULL; } Py_RETURN_NONE; }