dc.DrawLinesFromBuffer - add element size check, rename

This commit is contained in:
arjones6
2021-10-05 14:09:55 -04:00
parent 88612ceba2
commit cd94afce06
2 changed files with 15 additions and 7 deletions

View File

@@ -310,9 +310,9 @@ def run():
'(PyObject* textList, PyObject* pyPoints, PyObject* foregroundList, PyObject* backgroundList)',
body="return wxPyDrawTextList(*self, textList, pyPoints, foregroundList, backgroundList);")
c.addCppMethod('PyObject*', '_DrawLinesBuffer',
c.addCppMethod('PyObject*', '_DrawLinesFromBuffer',
'(PyObject* pyBuff)',
body="return wxPyDrawLinesBuffer(*self, pyBuff);")
body="return wxPyDrawLinesFromBuffer(*self, pyBuff);")
c.addPyMethod('DrawPointList', '(self, points, pens=None)',
doc="""\
@@ -478,7 +478,7 @@ def run():
""")
c.addPyMethod('DrawLinesBuffer', '(self, pyBuff)',
c.addPyMethod('DrawLinesFromBuffer', '(self, pyBuff)',
doc="""\
Implementation of DrawLines that can use numpy arrays, or anything else that uses the
python buffer protocol, directly.
@@ -486,7 +486,7 @@ def run():
:param pyBuff: A python buffer containing integer pairs
""",
body="""\
return self._DrawLinesBuffer(pyBuff)
return self._DrawLinesFromBuffer(pyBuff)
""")

View File

@@ -467,7 +467,7 @@ error0:
}
PyObject* wxPyDrawLinesBuffer(wxDC& dc, PyObject* pyBuff)
PyObject* wxPyDrawLinesFromBuffer(wxDC& dc, PyObject* pyBuff)
{
wxPyBlock_t blocked = wxPyBeginBlockThreads();
Py_buffer view;
@@ -482,6 +482,10 @@ PyObject* wxPyDrawLinesBuffer(wxDC& dc, PyObject* pyBuff)
goto err1;
}
if (view.itemsize * 2 != sizeof(wxPoint)) {
goto err2;
}
dc.DrawLines(view.len / view.itemsize / 2, (wxPoint *)view.buf);
PyBuffer_Release(&view);
@@ -496,11 +500,15 @@ PyObject* wxPyDrawLinesBuffer(wxDC& dc, PyObject* pyBuff)
retval = NULL;
goto exit;
err1:
err1:
// PyObject_GetBuffer raises exception already
retval = NULL;
goto exit;
err2:
PyErr_SetString(PyExc_TypeError, "Item size does not match wxPoint size");
retval = NULL;
goto exit;
exit:
wxPyEndBlockThreads(blocked);