01 #ifndef UTILS_HH 
02 #define UTILS_HH "Fae"
03 CDC *ScaleDCToSquare(CDC *inp,I64 new_width) {
04   F64 h_ratio=ToF64(new_width)/inp->height;
05   F64 w_ratio=ToF64(new_width)/inp->width;
06   CDC *new=DCNew(new_width,new_width);
07   DCFill(new,TRANSPARENT);
08   I64 ox=0,oy=0,x,y,fw,fh,c;
09   if(inp->width>inp->height) {
10     h_ratio=inp->height/ToF64(inp->width)*w_ratio;
11   } else {
12     w_ratio=inp->width/ToF64(inp->height)*h_ratio;
13   }
14 //height is taller
15   ox=(new_width-inp->width*w_ratio)/2.;
16   oy=(new_width-inp->height*h_ratio)/2.;
17   fw=w_ratio*inp->width;
18   fh=h_ratio*inp->height;
19   for(x=0;x!=fw;++x)
20     for(y=0;y!=fh;++y) {
21       c=GrPeek(inp,(x+.5)/w_ratio,(y+.5)/h_ratio);
22       if(c>=0) {
23         new->color=c;
24         GrPlot0(new,ox+x,oy+y);
25       }
26     }
27   return new;
28 }
29 CDC *SpriteToSquareDC(U8 *inp,I64 new_width) {
30   I64 min_x,max_x,min_y,max_y;
31   SpriteExtents(inp,&min_x,&max_x,&min_y,&max_y);
32   CDC *res=DCNew(max_x-min_x+1,max_y-min_y+1),*ret;
33   DCFill(res,TRANSPARENT);
34   Sprite3(res,-min_x,-min_y,0,inp);
35   ret=ScaleDCToSquare(res,new_width);
36   DCDel(res);
37   return ret;
38 }
39 #endif