@@ -121,24 +121,50 @@ function drawedge(ctx, scalefactor, edge, color) {
121121  } 
122122} 
123123
124- function  drawRoundRect ( ctx ,  color ,  size ,  radius ,  ctxmethod )  { 
124+ function  drawChamferedRect ( ctx ,  color ,  size ,  radius ,  chamfpos ,  chamfratio ,  ctxmethod )  { 
125+   // chamfpos is a bitmask, left = 1, right = 2, bottom left = 4, bottom right = 8 
125126  ctx . beginPath ( ) ; 
126127  ctx . strokeStyle  =  color ; 
127-   var  x  =  size [ 0 ]  *  - 0.5 ; 
128-   var  y  =  size [ 1 ]  *  - 0.5 ; 
129128  var  width  =  size [ 0 ] ; 
130129  var  height  =  size [ 1 ] ; 
130+   var  x  =  width  *  - 0.5 ; 
131+   var  y  =  height  *  - 0.5 ; 
132+   var  chamfOffset  =  Math . min ( width ,  height )  *  chamfratio ; 
131133  ctx . moveTo ( x ,  0 ) ; 
132-   ctx . arcTo ( x ,  y  +  height ,  x  +  width ,  y  +  height ,  radius ) ; 
133-   ctx . arcTo ( x  +  width ,  y  +  height ,  x  +  width ,  y ,  radius ) ; 
134-   ctx . arcTo ( x  +  width ,  y ,  x ,  y ,  radius ) ; 
135-   ctx . arcTo ( x ,  y ,  x ,  y  +  height ,  radius ) ; 
134+   if  ( chamfpos  &  4 )  { 
135+     ctx . lineTo ( x ,  y  +  height  -  chamfOffset ) ; 
136+     ctx . lineTo ( x  +  chamfOffset ,  y  +  height ) ; 
137+     ctx . lineTo ( 0 ,  y  +  height ) ; 
138+   }  else  { 
139+     ctx . arcTo ( x ,  y  +  height ,  x  +  width ,  y  +  height ,  radius ) ; 
140+   } 
141+   if  ( chamfpos  &  8 )  { 
142+     ctx . lineTo ( x  +  width  -  chamfOffset ,  y  +  height ) ; 
143+     ctx . lineTo ( x  +  width ,  y  +  height  -  chamfOffset ) ; 
144+     ctx . lineTo ( x  +  width ,  0 ) ; 
145+   }  else  { 
146+     ctx . arcTo ( x  +  width ,  y  +  height ,  x  +  width ,  y ,  radius ) ; 
147+   } 
148+   if  ( chamfpos  &  2 )  { 
149+     ctx . lineTo ( x  +  width ,  y  +  chamfOffset ) ; 
150+     ctx . lineTo ( x  +  width  -  chamfOffset ,  y ) ; 
151+     ctx . lineTo ( 0 ,  y ) ; 
152+   }  else  { 
153+     ctx . arcTo ( x  +  width ,  y ,  x ,  y ,  radius ) ; 
154+   } 
155+   if  ( chamfpos  &  1 )  { 
156+     ctx . lineTo ( x  +  chamfOffset ,  y ) ; 
157+     ctx . lineTo ( x ,  y  +  chamfOffset ) ; 
158+     ctx . lineTo ( x ,  0 ) ; 
159+   }  else  { 
160+     ctx . arcTo ( x ,  y ,  x ,  y  +  height ,  radius ) ; 
161+   } 
136162  ctx . closePath ( ) ; 
137163  ctxmethod ( ) ; 
138164} 
139165
140166function  drawOblong ( ctx ,  color ,  size ,  ctxmethod )  { 
141-   drawRoundRect ( ctx ,  color ,  size ,  Math . min ( size [ 0 ] ,  size [ 1 ] )  /  2 ,  ctxmethod ) ; 
167+   drawChamferedRect ( ctx ,  color ,  size ,  Math . min ( size [ 0 ] ,  size [ 1 ] )  /  2 ,   0 ,   0 ,  ctxmethod ) ; 
142168} 
143169
144170function  drawPolygons ( ctx ,  color ,  polygons ,  ctxmethod )  { 
@@ -205,7 +231,9 @@ function drawPad(ctx, pad, color, outline, hole) {
205231  }  else  if  ( pad . shape  ==  "circle" )  { 
206232    drawCircle ( ctx ,  pad . size [ 0 ]  /  2 ,  ctxmethod ) ; 
207233  }  else  if  ( pad . shape  ==  "roundrect" )  { 
208-     drawRoundRect ( ctx ,  color ,  pad . size ,  pad . radius ,  ctxmethod ) ; 
234+     drawChamferedRect ( ctx ,  color ,  pad . size ,  pad . radius ,  0 ,  0 ,  ctxmethod ) ; 
235+   }  else  if  ( pad . shape  ==  "chamfrect" )  { 
236+     drawChamferedRect ( ctx ,  color ,  pad . size ,  pad . radius ,  pad . chamfpos ,  pad . chamfratio ,  ctxmethod ) 
209237  }  else  if  ( pad . shape  ==  "custom" )  { 
210238    drawPolygons ( ctx ,  color ,  pad . polygons ,  ctxmethod ) ; 
211239  } 
0 commit comments