consistent line spacing

This commit is contained in:
wiredfool 2015-11-18 07:02:16 -08:00
parent ea2982f284
commit a842497753
2 changed files with 27 additions and 5 deletions

View File

@ -268,14 +268,14 @@ class ImageDraw(object):
def multiline_text(self, xy, text, fill=None, font=None, anchor=None, def multiline_text(self, xy, text, fill=None, font=None, anchor=None,
spacing=0, align="left"): spacing=0, align="left"):
widths, heights = [], [] widths = []
max_width = 0 max_width = 0
lines = self._multiline_split(text) lines = self._multiline_split(text)
line_spacing = self.textsize('A', font=font)[1] + spacing
for line in lines: for line in lines:
line_width, line_height = self.textsize(line, font) line_width, line_height = self.textsize(line, font)
widths.append(line_width) widths.append(line_width)
max_width = max(max_width, line_width) max_width = max(max_width, line_width)
heights.append(line_height)
left, top = xy left, top = xy
for idx, line in enumerate(lines): for idx, line in enumerate(lines):
if align == "left": if align == "left":
@ -287,7 +287,7 @@ class ImageDraw(object):
else: else:
assert False, 'align must be "left", "center" or "right"' assert False, 'align must be "left", "center" or "right"'
self.text((left, top), line, fill, font, anchor) self.text((left, top), line, fill, font, anchor)
top += heights[idx] + spacing top += line_spacing
left = xy[0] left = xy[0]
## ##
@ -305,11 +305,11 @@ class ImageDraw(object):
max_width = 0 max_width = 0
height = 0 height = 0
lines = self._multiline_split(text) lines = self._multiline_split(text)
line_spacing = self.textsize('A', font=font)[1] + spacing
for line in lines: for line in lines:
line_width, line_height = self.textsize(line, font) line_width, line_height = self.textsize(line, font)
height += line_height + spacing
max_width = max(max_width, line_width) max_width = max(max_width, line_width)
return max_width, height return max_width, len(lines)*line_spacing
## ##

View File

@ -492,6 +492,25 @@ font_getattr_descent(FontObject* self, void* closure)
return PyInt_FromLong(-PIXEL(self->face->size->metrics.descender)); return PyInt_FromLong(-PIXEL(self->face->size->metrics.descender));
} }
static PyObject*
font_getattr_height(FontObject* self, void* closure)
{
return PyInt_FromLong(PIXEL(self->face->size->metrics.height));
}
static PyObject*
font_getattr_x_ppem(FontObject* self, void* closure)
{
return PyInt_FromLong(self->face->size->metrics.x_ppem);
}
static PyObject*
font_getattr_y_ppem(FontObject* self, void* closure)
{
return PyInt_FromLong(self->face->size->metrics.y_ppem);
}
static PyObject* static PyObject*
font_getattr_glyphs(FontObject* self, void* closure) font_getattr_glyphs(FontObject* self, void* closure)
{ {
@ -503,6 +522,9 @@ static struct PyGetSetDef font_getsetters[] = {
{ "style", (getter) font_getattr_style }, { "style", (getter) font_getattr_style },
{ "ascent", (getter) font_getattr_ascent }, { "ascent", (getter) font_getattr_ascent },
{ "descent", (getter) font_getattr_descent }, { "descent", (getter) font_getattr_descent },
{ "height", (getter) font_getattr_height },
{ "x_ppem", (getter) font_getattr_x_ppem },
{ "y_ppem", (getter) font_getattr_y_ppem },
{ "glyphs", (getter) font_getattr_glyphs }, { "glyphs", (getter) font_getattr_glyphs },
{ NULL } { NULL }
}; };