summaryrefslogtreecommitdiffstats
path: root/gd-2.0.35-AALineThick.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gd-2.0.35-AALineThick.patch')
-rw-r--r--gd-2.0.35-AALineThick.patch66
1 files changed, 66 insertions, 0 deletions
diff --git a/gd-2.0.35-AALineThick.patch b/gd-2.0.35-AALineThick.patch
new file mode 100644
index 0000000..4349ada
--- /dev/null
+++ b/gd-2.0.35-AALineThick.patch
@@ -0,0 +1,66 @@
+diff -up gd-2.0.35/gd.c.AALineThick gd-2.0.35/gd.c
+--- gd-2.0.35/gd.c.AALineThick 2007-06-19 22:25:51.000000000 +0200
++++ gd-2.0.35/gd.c 2012-02-28 11:02:09.708015922 +0100
+@@ -3474,6 +3474,8 @@ static void gdImageAALine (gdImagePtr im
+ /* keep them as 32bits */
+ long x, y, inc;
+ long dx, dy,tmp;
++ int w, wid, wstart;
++ int thick = im->thick;
+
+ if (!im->trueColor) {
+ /* TBB: don't crash when the image is of the wrong type */
+@@ -3502,6 +3504,25 @@ static void gdImageAALine (gdImagePtr im
+ gdImageSetAAPixelColor(im, x1, y1, col, 0xFF);
+ return;
+ }
++ else {
++ double ag;
++ if (abs(dy) < abs(dx))
++ ag = cos (atan2 (dy, dx));
++ else
++ ag = sin (atan2 (dy, dx));
++ if (ag != 0)
++ {
++ wid = abs(thick / ag);
++ }
++ else
++ {
++ wid = 1;
++ }
++ if (wid == 0)
++ {
++ wid = 1;
++ }
++ }
+ if (abs(dx) > abs(dy)) {
+ if (dx < 0) {
+ tmp = x1;
+@@ -3518,8 +3539,11 @@ static void gdImageAALine (gdImagePtr im
+ inc = (dy * 65536) / dx;
+ /* TBB: set the last pixel for consistency (<=) */
+ while ((x >> 16) <= x2) {
+- gdImageSetAAPixelColor(im, x >> 16, y >> 16, col, (y >> 8) & 0xFF);
+- gdImageSetAAPixelColor(im, x >> 16, (y >> 16) + 1,col, (~y >> 8) & 0xFF);
++ wstart = (y >> 16) - wid / 2;
++ for (w = wstart; w < wstart + wid; w++) {
++ gdImageSetAAPixelColor(im, (x >> 16) , w , col , (y >> 8) & 0xFF);
++ gdImageSetAAPixelColor(im, (x >> 16) , w + 1 , col, (~y >> 8) & 0xFF);
++ }
+ x += (1 << 16);
+ y += inc;
+ }
+@@ -3539,8 +3563,11 @@ static void gdImageAALine (gdImagePtr im
+ inc = (dx * 65536) / dy;
+ /* TBB: set the last pixel for consistency (<=) */
+ while ((y>>16) <= y2) {
+- gdImageSetAAPixelColor(im, x >> 16, y >> 16, col, (x >> 8) & 0xFF);
+- gdImageSetAAPixelColor(im, (x >> 16) + 1, (y >> 16),col, (~x >> 8) & 0xFF);
++ wstart = (x >> 16) - wid / 2;
++ for (w = wstart; w < wstart + wid; w++) {
++ gdImageSetAAPixelColor(im, w , y >> 16 , col, (x >> 8) & 0xFF);
++ gdImageSetAAPixelColor(im, w + 1, y >> 16, col, (~x >> 8) & 0xFF);
++ }
+ x += inc;
+ y += (1<<16);
+ }