From a8424977530e45942bb07c852563a5d4a758deac Mon Sep 17 00:00:00 2001 From: wiredfool Date: Wed, 18 Nov 2015 07:02:16 -0800 Subject: [PATCH] consistent line spacing --- PIL/ImageDraw.py | 10 +++++----- _imagingft.c | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/PIL/ImageDraw.py b/PIL/ImageDraw.py index 9e154f236..161cce701 100644 --- a/PIL/ImageDraw.py +++ b/PIL/ImageDraw.py @@ -268,14 +268,14 @@ class ImageDraw(object): def multiline_text(self, xy, text, fill=None, font=None, anchor=None, spacing=0, align="left"): - widths, heights = [], [] + widths = [] max_width = 0 lines = self._multiline_split(text) + line_spacing = self.textsize('A', font=font)[1] + spacing for line in lines: line_width, line_height = self.textsize(line, font) widths.append(line_width) max_width = max(max_width, line_width) - heights.append(line_height) left, top = xy for idx, line in enumerate(lines): if align == "left": @@ -287,7 +287,7 @@ class ImageDraw(object): else: assert False, 'align must be "left", "center" or "right"' self.text((left, top), line, fill, font, anchor) - top += heights[idx] + spacing + top += line_spacing left = xy[0] ## @@ -305,11 +305,11 @@ class ImageDraw(object): max_width = 0 height = 0 lines = self._multiline_split(text) + line_spacing = self.textsize('A', font=font)[1] + spacing for line in lines: line_width, line_height = self.textsize(line, font) - height += line_height + spacing max_width = max(max_width, line_width) - return max_width, height + return max_width, len(lines)*line_spacing ## diff --git a/_imagingft.c b/_imagingft.c index a34fb8af9..dc1661f3e 100644 --- a/_imagingft.c +++ b/_imagingft.c @@ -492,6 +492,25 @@ font_getattr_descent(FontObject* self, void* closure) 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* font_getattr_glyphs(FontObject* self, void* closure) { @@ -503,6 +522,9 @@ static struct PyGetSetDef font_getsetters[] = { { "style", (getter) font_getattr_style }, { "ascent", (getter) font_getattr_ascent }, { "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 }, { NULL } };