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