From: Takeshi Abe Date: Wed, 25 Mar 2009 16:15:18 +0000 (+0000) Subject: MFB: #43073, TrueType bounding box is wrong for angle<>0 X-Git-Tag: php-5.4.0alpha1~191^2~4060 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cd31aa574b778559fc4099c541e8ba09ecd91954;p=php MFB: #43073, TrueType bounding box is wrong for angle<>0 --- 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); diff --git a/ext/gd/tests/bug43073.phpt b/ext/gd/tests/bug43073.phpt new file mode 100644 index 0000000000..6fbfb935e8 --- /dev/null +++ b/ext/gd/tests/bug43073.phpt @@ -0,0 +1,44 @@ +--TEST-- +Bug #43073 (TrueType bounding box is wrong for angle<>0) +--SKIPIF-- + +--FILE-- + +--EXPECTF-- +(500, 400), (579, 400), (579, 370), (500, 370) +(492, 361), (575, 327), (564, 301), (480, 335) +(470, 329), (540, 260), (521, 242), (451, 312) +(438, 307), (478, 210), (461, 204), (420, 301) +(400, 300), (400, 193), (383, 193), (383, 300) +(361, 307), (319, 207), (297, 216), (338, 317) +(329, 329), (254, 254), (233, 275), (307, 351) +(307, 361), (215, 323), (203, 354), (294, 392) +(300, 400), (203, 400), (203, 431), (300, 431) +(307, 438), (219, 474), (229, 501), (318, 465) +(329, 470), (263, 535), (281, 553), (347, 489) +(361, 492), (326, 575), (343, 582), (378, 499) +(400, 500), (400, 584), (416, 584), (416, 500) +(438, 492), (468, 567), (490, 559), (460, 483) +(470, 470), (523, 525), (545, 505), (491, 449) +(492, 438), (560, 467), (572, 436), (504, 408)