feat: Grid size tuple support closes #90
- Add grid_size keyword parameter to Grid.__init__ - Accept tuple or list of two integers - Override grid_x/grid_y if grid_size provided - Maintain backward compatibility - Add comprehensive test coverage
This commit is contained in:
parent
f1b354e47d
commit
da7180f5ed
4 changed files with 143 additions and 19 deletions
|
|
@ -268,13 +268,48 @@ UIDrawable* UIGrid::click_at(sf::Vector2f point)
|
|||
int UIGrid::init(PyUIGridObject* self, PyObject* args, PyObject* kwds) {
|
||||
int grid_x = 0, grid_y = 0; // Default to 0x0 grid
|
||||
PyObject* textureObj = Py_None;
|
||||
//float box_x, box_y, box_w, box_h;
|
||||
PyObject* pos = NULL;
|
||||
PyObject* size = NULL;
|
||||
PyObject* grid_size_obj = NULL;
|
||||
|
||||
static const char* keywords[] = {"grid_x", "grid_y", "texture", "pos", "size", "grid_size", NULL};
|
||||
|
||||
//if (!PyArg_ParseTuple(args, "iiOffff", &grid_x, &grid_y, &textureObj, &box_x, &box_y, &box_w, &box_h)) {
|
||||
if (!PyArg_ParseTuple(args, "|iiOOO", &grid_x, &grid_y, &textureObj, &pos, &size)) {
|
||||
return -1; // If parsing fails, return an error
|
||||
// First try parsing with keywords
|
||||
if (kwds && PyArg_ParseTupleAndKeywords(args, kwds, "|iiOOOO", const_cast<char**>(keywords),
|
||||
&grid_x, &grid_y, &textureObj, &pos, &size, &grid_size_obj)) {
|
||||
// If grid_size is provided, use it to override grid_x and grid_y
|
||||
if (grid_size_obj && grid_size_obj != Py_None) {
|
||||
if (PyTuple_Check(grid_size_obj) && PyTuple_Size(grid_size_obj) == 2) {
|
||||
PyObject* x_obj = PyTuple_GetItem(grid_size_obj, 0);
|
||||
PyObject* y_obj = PyTuple_GetItem(grid_size_obj, 1);
|
||||
if (PyLong_Check(x_obj) && PyLong_Check(y_obj)) {
|
||||
grid_x = PyLong_AsLong(x_obj);
|
||||
grid_y = PyLong_AsLong(y_obj);
|
||||
} else {
|
||||
PyErr_SetString(PyExc_TypeError, "grid_size tuple must contain integers");
|
||||
return -1;
|
||||
}
|
||||
} else if (PyList_Check(grid_size_obj) && PyList_Size(grid_size_obj) == 2) {
|
||||
PyObject* x_obj = PyList_GetItem(grid_size_obj, 0);
|
||||
PyObject* y_obj = PyList_GetItem(grid_size_obj, 1);
|
||||
if (PyLong_Check(x_obj) && PyLong_Check(y_obj)) {
|
||||
grid_x = PyLong_AsLong(x_obj);
|
||||
grid_y = PyLong_AsLong(y_obj);
|
||||
} else {
|
||||
PyErr_SetString(PyExc_TypeError, "grid_size list must contain integers");
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
PyErr_SetString(PyExc_TypeError, "grid_size must be a tuple or list of two integers");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Clear error and try parsing without keywords (backward compatibility)
|
||||
PyErr_Clear();
|
||||
if (!PyArg_ParseTuple(args, "|iiOOO", &grid_x, &grid_y, &textureObj, &pos, &size)) {
|
||||
return -1; // If parsing fails, return an error
|
||||
}
|
||||
}
|
||||
|
||||
// Default position and size if not provided
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue