1from Cocoa import * 2 3 4class MyBaseGradientView (NSView): 5 myGradient = objc.ivar() 6 myStartColor = objc.ivar() 7 myEndColor = objc.ivar() 8 9 forceColorChange = objc.ivar.bool() 10 myAngle = objc.ivar.double() 11 myIsRadial = objc.ivar.bool() 12 myOffsetPt = objc.ivar.NSPoint() 13 14 15 def resetGradient(self): 16 if self.forceColorChange and self.myGradient is not None: 17 self.myGradient = None 18 19 if self.myGradient is None: 20 self.myGradient = NSGradient.alloc().initWithStartingColor_endingColor_( 21 self.myStartColor, self.myEndColor) 22 self.forceColorChange = False 23 24 25 def setStartColor_(self, startColor): 26 self.myStartColor = startColor 27 self.forceColorChange = True 28 self.setNeedsDisplay_(True) 29 30 def setEndColor_(self, endColor): 31 self.myEndColor = endColor; 32 self.forceColorChange = True 33 self.setNeedsDisplay_(True) 34 35 def setAngle_(self, angle): 36 self.myAngle = angle 37 self.setNeedsDisplay_(True) 38 39 def setRadialDraw_(self, isRadial): 40 self.myIsRadial = isRadial 41 self.setNeedsDisplay_(True) 42 43 def getRelativeCenterPositionFromEvent_(self, theEvent): 44 curMousePt = self.convertPoint_fromView_(theEvent.locationInWindow(), None) 45 pt = NSMakePoint( (curMousePt.x - NSMidX(self.bounds())) / (self.bounds().size.width / 2.0), 46 (curMousePt.y - NSMidY(self.bounds())) / (self.bounds().size.height / 2.0)) 47 return pt 48 49 def mouseDown_(self, theEvent): 50 if self.myIsRadial: 51 self.myOffsetPt = self.getRelativeCenterPositionFromEvent_(theEvent) 52 self.setNeedsDisplay_(True) 53 54 def mouseDragged_(self, theEvent): 55 if self.myIsRadial: 56 self.myOffsetPt = self.getRelativeCenterPositionFromEvent_(theEvent) 57 self.setNeedsDisplay_(True) 58