From: Pierre Joye Date: Wed, 18 Mar 2009 08:15:27 +0000 (+0000) Subject: - #43073, TrueType bounding box is wrong for angle<>0 X-Git-Tag: php-5.2.10RC1~286 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c4e040a4682cfee7fd79093d4e4bfc2ad2d52889;p=php - #43073, TrueType bounding box is wrong for angle<>0 --- diff --git a/NEWS b/NEWS index 876e36463d..20c212683f 100644 --- a/NEWS +++ b/NEWS @@ -22,6 +22,7 @@ PHP NEWS bit numbers). (Matt) - Fixed bug #45799 (imagepng() crashes on empty image). (Martin McNickle, Takeshi Abe) +- Fixed bug #43073, (TrueType bounding box is wrong for angle<>0) (Martin McNickle) 26 Feb 2009, PHP 5.2.9 - Changed __call() to be invoked on private/protected method access, similar to diff --git a/ext/gd/libgd/gdft.c b/ext/gd/libgd/gdft.c index e543f2fe2b..9c4b9b5293 100644 --- a/ext/gd/libgd/gdft.c +++ b/ext/gd/libgd/gdft.c @@ -1108,15 +1108,23 @@ gdImageStringFTEx (gdImage * im, int *brect, int fg, char *fontlist, double ptsi double d1 = sin (angle + 0.78539816339744830962); double d2 = sin (angle - 0.78539816339744830962); + /* make the center of rotation at (0, 0) */ + FT_BBox normbox; + + normbox.xMin = 0; + normbox.yMin = 0; + normbox.xMax = bbox.xMax - bbox.xMin; + normbox.yMax = bbox.yMax - bbox.yMin; + /* rotate bounding rectangle */ - brect[0] = (int) (bbox.xMin * cos_a - bbox.yMin * sin_a); - brect[1] = (int) (bbox.xMin * sin_a + bbox.yMin * cos_a); - brect[2] = (int) (bbox.xMax * cos_a - bbox.yMin * sin_a); - brect[3] = (int) (bbox.xMax * sin_a + bbox.yMin * cos_a); - brect[4] = (int) (bbox.xMax * cos_a - bbox.yMax * sin_a); - brect[5] = (int) (bbox.xMax * sin_a + bbox.yMax * cos_a); - brect[6] = (int) (bbox.xMin * cos_a - bbox.yMax * sin_a); - brect[7] = (int) (bbox.xMin * sin_a + bbox.yMax * cos_a); + brect[0] = (int) (normbox.xMin * cos_a - normbox.yMin * sin_a); + brect[1] = (int) (normbox.xMin * sin_a + normbox.yMin * cos_a); + brect[2] = (int) (normbox.xMax * cos_a - normbox.yMin * sin_a); + brect[3] = (int) (normbox.xMax * sin_a + normbox.yMin * cos_a); + brect[4] = (int) (normbox.xMax * cos_a - normbox.yMax * sin_a); + brect[5] = (int) (normbox.xMax * sin_a + normbox.yMax * cos_a); + brect[6] = (int) (normbox.xMin * cos_a - normbox.yMax * sin_a); + brect[7] = (int) (normbox.xMin * sin_a + normbox.yMax * cos_a); /* scale, round and offset brect */ brect[0] = x + gdroundupdown(brect[0], d2 > 0);