@@ -685,18 +685,42 @@ def star(x, y, points=20, outer=100, inner=50, **kwargs):
685
685
""" Draws a star with the given points, outer radius and inner radius.
686
686
The current stroke, strokewidth and fill color are applied.
687
687
"""
688
- # GL_POLYGON only works with convex polygons,
689
- # so we use a BezierPath (which does tessellation for fill colors).
690
- p = BezierPath (** kwargs )
691
- p .moveto (x , y + outer )
692
- for i in range (0 , int (2 * points )+ 1 ):
693
- r = (outer , inner )[i % 2 ]
694
- a = pi * i / points
695
- p .lineto (x + r * sin (a ), y + r * cos (a ))
696
- p .closepath ()
697
- if kwargs .get ("draw" , True ):
698
- p .draw (** kwargs )
699
- return p
688
+ radii = [outer , inner ] * int (points + 1 ); radii .pop () # which radius?
689
+ f = pi / points
690
+ v = [(x + r * sin (i * f ), y + r * cos (i * f )) for i , r in enumerate (radii )]
691
+
692
+ if kwargs .get ("draw" , True ):
693
+ fill , stroke , strokewidth , strokestyle = color_mixin (** kwargs )
694
+
695
+ if fill is not None :
696
+ glColor4f (fill [0 ], fill [1 ], fill [2 ], fill [3 ] * _alpha )
697
+
698
+ glBegin (GL_TRIANGLE_FAN )
699
+ glVertex2f (x , y )
700
+ for (vx , vy ) in v :
701
+ glVertex2f (vx , vy )
702
+ glEnd ()
703
+
704
+ if stroke is not None and 0 < strokewidth :
705
+ glLineWidth (strokewidth )
706
+ if strokestyle != _strokestyle :
707
+ glLineDash (strokestyle )
708
+ glColor4f (stroke [0 ], stroke [1 ], stroke [2 ], stroke [3 ] * _alpha )
709
+
710
+ glBegin (GL_LINE_LOOP )
711
+ for (vx , vy ) in v :
712
+ glVertex2f (vx , vy )
713
+ glEnd ()
714
+ else :
715
+ # For whatever reason, the original api specified that you
716
+ # can get the path to the star. This is about 20x slower,
717
+ # but I'm keeping it here for backwards compatibility.
718
+ p = BezierPath (** kwargs )
719
+ p .moveto (x , y + outer )
720
+ for (vx , vy ) in v :
721
+ p .lineto (vx , vy )
722
+ p .closepath ()
723
+ return p
700
724
701
725
#=====================================================================================================
702
726
0 commit comments