Mercurial > pygame
diff src/pixelarray.c @ 2240:be3228f63883
Make PixelArray more internally consistent
| author | Lenard Lindstrom <len-l@telus.net> |
|---|---|
| date | Sun, 05 Jun 2011 04:56:22 +0000 |
| parents | 78fe5b5d3a7d |
| children | 5985bf3a6235 |
line wrap: on
line diff
--- a/src/pixelarray.c Thu Jun 02 00:47:37 2011 +0000 +++ b/src/pixelarray.c Sun Jun 05 04:56:22 2011 +0000 @@ -133,6 +133,8 @@ DOC_PIXELARRAYMAKESURFACE }, { "replace", (PyCFunction)_replace_color, METH_VARARGS | METH_KEYWORDS, DOC_PIXELARRAYREPLACE }, + { "transpose", (PyCFunction)_transpose, METH_NOARGS, + DOC_PIXELARRAYTRANSPOSE }, { NULL, NULL, 0, NULL } }; @@ -791,18 +793,37 @@ Uint8 *copied_pixels = 0; Py_ssize_t x; Py_ssize_t y; + int sizes_match = 0; - if (!((val_dim1 && dim0 == val_dim0 && dim1 == val_dim1) || - (dim1 && dim1 == val_dim0) || - (dim0 == val_dim0) )) { + /* Broadcast length 1 val dimensions.*/ + if (val_dim0 == 1) { + val_dim0 = dim0; + val_stride0 = 0; + } + if (val_dim1 == 1) { + val_dim1 = dim1; + val_stride1 = 0; + } + + if (val_dim1) { + sizes_match = (dim0 == val_dim0 && dim1 == val_dim1); + } + else if (dim1) { + sizes_match = (dim1 == val_dim0); + } + else { + sizes_match = (dim0 == val_dim0); + } + if (!sizes_match) { /* Bounds do not match. */ PyErr_SetString(PyExc_ValueError, "array sizes do not match"); return -1; } + bpp = surf->format->BytesPerPixel; val_bpp = val_surf->format->BytesPerPixel; if (val_bpp != bpp) { - /* bpp do not match. We cannot guarantee that the padding and co + /* bpp do not match. We cannot guarantee that the padding and columns * would be set correctly. */ PyErr_SetString(PyExc_ValueError, "bit depths do not match"); return -1; @@ -1148,6 +1169,9 @@ bpp = surf->format->BytesPerPixel; if (!_get_color_from_object(value, surf->format, &color)) { + if (PyTuple_Check (value)) { + return -1; + } if (PyPixelArray_Check(value)) { PyErr_Clear(); /* _get_color_from_object */ return _array_assign_array(array, index, index + 1, @@ -1160,7 +1184,7 @@ index, 0, 0, 0, array->dim1, 1); if (!tmparray) { - return 0; + return -1; } retval = _array_assign_sequence(tmparray, 0, tmparray->dim0, value); @@ -1266,6 +1290,9 @@ if (_get_color_from_object(value, surf->format, &color)) { return _array_assign_slice(array, low, high, color); } + if (PyTuple_Check (value)) { + return -1; + } PyErr_Clear(); /* In case _get_color_from_object set it */ if (PySequence_Check(value)) { return _array_assign_sequence(array, low, high, value);
