hopefully this uses a reasonable y offset

This commit is contained in:
paddywwoof 2013-09-20 14:02:40 +01:00
parent 25b39de5b7
commit 02855a86c0
2 changed files with 15 additions and 5 deletions

View File

@ -157,6 +157,9 @@ class FreeTypeFont:
def getsize(self, text): def getsize(self, text):
return self.font.getsize(text)[0] return self.font.getsize(text)[0]
def getoffset(self, text):
return self.font.getsize(text)[1]
def getmask(self, text, mode=""): def getmask(self, text, mode=""):
return self.getmask2(text, mode)[0] return self.getmask2(text, mode)[0]
@ -183,7 +186,7 @@ class TransposedFont:
self.orientation = orientation # any 'transpose' argument, or None self.orientation = orientation # any 'transpose' argument, or None
def getsize(self, text): def getsize(self, text):
w, h = self.font.getsize(text) w, h = self.font.getsize(text)[0]
if self.orientation in (Image.ROTATE_90, Image.ROTATE_270): if self.orientation in (Image.ROTATE_90, Image.ROTATE_270):
return h, w return h, w
return w, h return w, h

View File

@ -183,7 +183,7 @@ font_getsize(FontObject* self, PyObject* args)
int i, x, y_max, y_min; int i, x, y_max, y_min;
FT_ULong ch; FT_ULong ch;
FT_Face face; FT_Face face;
int xoffset; int xoffset, yoffset;
FT_Bool kerning = FT_HAS_KERNING(self->face); FT_Bool kerning = FT_HAS_KERNING(self->face);
FT_UInt last_index = 0; FT_UInt last_index = 0;
@ -203,7 +203,7 @@ font_getsize(FontObject* self, PyObject* args)
} }
face = NULL; face = NULL;
xoffset = 0; xoffset = yoffset = 0;
y_max = y_min = 0; y_max = y_min = 0;
for (x = i = 0; font_getchar(string, i, &ch); i++) { for (x = i = 0; font_getchar(string, i, &ch); i++) {
@ -232,6 +232,10 @@ font_getsize(FontObject* self, PyObject* args)
if (bbox.yMin < y_min) if (bbox.yMin < y_min)
y_min = bbox.yMin; y_min = bbox.yMin;
/* find max distance of baseline from top */
if (face->glyph->metrics.horiBearingY > yoffset)
yoffset = face->glyph->metrics.horiBearingY;
last_index = index; last_index = index;
} }
@ -248,12 +252,15 @@ font_getsize(FontObject* self, PyObject* args)
face->glyph->metrics.horiBearingX; face->glyph->metrics.horiBearingX;
if (offset < 0) if (offset < 0)
x -= offset; x -= offset;
/* difference between the font ascender and the distance of
* the baseline from the top */
yoffset = PIXEL(self->face->size->metrics.ascender - yoffset);
} }
return Py_BuildValue( return Py_BuildValue(
"(ii)(ii)", "(ii)(ii)",
PIXEL(x), PIXEL(y_max - y_min), PIXEL(x), PIXEL(y_max - y_min),
PIXEL(xoffset), 0 PIXEL(xoffset), yoffset
); );
} }