--- dotneato/common/gdgen.c.orig Sun Jun 20 15:39:41 2004 +++ dotneato/common/gdgen.c Mon Jun 21 03:28:12 2004 @@ -497,8 +497,40 @@ ROUND(ep.x), ROUND(ep.y), cstk[SP].pencolor); } else { + double angle; + angle = (Rot? 90.0 : 0.0); + if(Viewport.x>800) { // XXX dirty + double where; + int flip=0; + pointf c; + c.x=p.x; + c.y=p.y; + c=gdpt(c); + where = atan2(c.y-Viewport.y/2,c.x-Viewport.x/2)/PI*180.0; + //fprintf(stderr, "(%.1f,%.1f)%s,%.2f\n",mp.x-Viewport.x,mp.y-Viewport.y,str,where); + if(fabs(where-90)<30 || fabs(where+90)<30) { + angle=where; + + mp=c; + + // 把字轉正 + if(angle>90) { + flip=-180; + } else if(angle<-90) { + flip=180; + } + if(flip) { + mp.x+=line->width*cos(angle*PI/180.0); + mp.y+=line->width*sin(angle*PI/180.0); + } + angle+=flip; + + angle=-angle; // 轉成 gd 座標系 + } + } + angle*=PI/180.0; err = gdImageStringFT(im, brect, cstk[SP].pencolor, - fontlist, fontsz, (Rot? 90.0 : 0.0) * PI / 180.0, + fontlist, fontsz, angle, ROUND(mp.x), ROUND(mp.y), str); if (err) { /* revert to builtin fonts */