BLF: initial word-wrap support
- Adds support for word wrapping to Blender's BLF font library. - Splits lines when width limit is reached or on explicit \n newlines. Details: - Word wrapping is used when `BLF_WORD_WRAP` flag is enabled. - There is a single loop to handle line wrapping, this runs callback, passing in a substring, this way we can avoid code-duplication for all word-wrapped versions of functions... OR... avoid having to add support for word-wrapping directly into each function. - The `ResultBLF` struct was added to be able to get the number of wrapped lines, when calling otherwise unrelated functions such as `BLF_draw/BLF_width/BLF_boundbox`, which can be passed as the last argument to `BLF_*_ex()` functions. - The `ResultBLF` struct is used to store the result of drawing (currently only the number of lines wrapped, and the width).
This commit is contained in:
@@ -221,6 +221,29 @@ static PyObject *py_blf_clipping(PyObject *UNUSED(self), PyObject *args)
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(py_blf_word_wrap_doc,
|
||||
".. function:: word_wrap(fontid, wrap_width)\n"
|
||||
"\n"
|
||||
" Set the wrap width, enable/disable using WORD_WRAP.\n"
|
||||
"\n"
|
||||
" :arg fontid: The id of the typeface as returned by :func:`blf.load`, for default font use 0.\n"
|
||||
" :type fontid: int\n"
|
||||
" :arg wrap_width: The width (in pixels) to wrap words at.\n"
|
||||
" :type wrap_width: int\n"
|
||||
);
|
||||
static PyObject *py_blf_word_wrap(PyObject *UNUSED(self), PyObject *args)
|
||||
{
|
||||
int wrap_width;
|
||||
int fontid;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "ii:blf.word_wrap", &fontid, &wrap_width))
|
||||
return NULL;
|
||||
|
||||
BLF_wordwrap(fontid, wrap_width);
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(py_blf_disable_doc,
|
||||
".. function:: disable(fontid, option)\n"
|
||||
"\n"
|
||||
@@ -393,6 +416,7 @@ static PyMethodDef BLF_methods[] = {
|
||||
{"aspect", (PyCFunction) py_blf_aspect, METH_VARARGS, py_blf_aspect_doc},
|
||||
{"blur", (PyCFunction) py_blf_blur, METH_VARARGS, py_blf_blur_doc},
|
||||
{"clipping", (PyCFunction) py_blf_clipping, METH_VARARGS, py_blf_clipping_doc},
|
||||
{"word_wrap", (PyCFunction) py_blf_word_wrap, METH_VARARGS, py_blf_word_wrap_doc},
|
||||
{"disable", (PyCFunction) py_blf_disable, METH_VARARGS, py_blf_disable_doc},
|
||||
{"dimensions", (PyCFunction) py_blf_dimensions, METH_VARARGS, py_blf_dimensions_doc},
|
||||
{"draw", (PyCFunction) py_blf_draw, METH_VARARGS, py_blf_draw_doc},
|
||||
@@ -432,6 +456,7 @@ PyObject *BPyInit_blf(void)
|
||||
PyModule_AddIntConstant(submodule, "CLIPPING", BLF_CLIPPING);
|
||||
PyModule_AddIntConstant(submodule, "SHADOW", BLF_SHADOW);
|
||||
PyModule_AddIntConstant(submodule, "KERNING_DEFAULT", BLF_KERNING_DEFAULT);
|
||||
PyModule_AddIntConstant(submodule, "WORD_WRAP", BLF_WORD_WRAP);
|
||||
|
||||
return submodule;
|
||||
}
|
||||
|
Reference in New Issue
Block a user