@@ -166,8 +166,50 @@ class UISprite extends Graphics
166166 }
167167 }
168168
169- public function drawRoundRect (x : Float , y : Float , width : Float , height : Float ) {
169+ public function drawRoundRect (x : Float , y : Float , width : Float , height : Float , radius : Float ) {
170+ flush ();
170171
172+ var angleStart : Float = 0 ;
173+ var angleLength : Float = Math .PI / 2 ;
174+ var nsegments : Int = Math .ceil (Math .abs (radius * angleLength / 4 ));
175+ if ( nsegments < 3 ) nsegments = 3 ;
176+ var angle = angleLength / (nsegments - 1 );
177+
178+ if (radius > width / 2 ) {
179+ radius = width / 2 ;
180+ }
181+ if (radius > height / 2 ) {
182+ radius = height / 2 ;
183+ }
184+
185+ radius = Math .floor (radius / 2 );
186+
187+ var insetX : Float = x + radius ;
188+ var insetY : Float = y + radius ;
189+ var insetW : Float = width - 2 * radius ;
190+ var insetH : Float = height - 2 * radius ;
191+
192+ inline function drawArc (x : Float , y : Float , aStart : Float ) {
193+ for ( i in 1 ... nsegments ) {
194+ var a = i * angle + aStart ;
195+ lineTo (x + Math .cos (a ) * radius , y + Math .sin (a ) * radius );
196+ }
197+ }
198+
199+ moveTo (insetX , y );
200+ lineTo (insetX + insetW , y );
201+ drawArc (insetX + insetW , insetY , - Math .PI / 2 );
202+
203+ lineTo (x + width , insetY + insetH );
204+ drawArc (insetX + insetW , insetY + insetH , 0 );
205+
206+ lineTo (insetX , y + height );
207+ drawArc (insetX , insetY + insetH , Math .PI / 2 );
208+
209+ lineTo (x , insetY );
210+ drawArc (insetX , insetY , - Math .PI );
211+
212+ flush ();
171213 }
172214
173215 private function checkInteraction () {
0 commit comments