class Motion::Popup::Background
Drawing code for the popup panel background ported from this excellent Obj-C popup demo code github.com/shpakovski/Popup / blog.shpakovski.com/2011/07/cocoa-popup-window-in-status-bar.html
Attributes
arrow_height[RW]
arrow_width[RW]
corner_radius[RW]
line_thickness[RW]
Public Instance Methods
drawRect(rect)
click to toggle source
# File lib/motion/popup/background.rb, line 15 def drawRect(rect) content_rect = NSInsetRect(self.bounds, self.line_thickness, self.line_thickness) path = NSBezierPath.bezierPath top_left_corner = NSMakePoint(NSMinX(content_rect), NSMaxY(content_rect) - self.arrow_height) path.moveToPoint(NSMakePoint(top_left_corner.x + self.corner_radius, top_left_corner.y)) if @arrow_x path.lineToPoint(NSMakePoint(@arrow_x - self.arrow_width / 2, NSMaxY(content_rect) - self.arrow_height)) path.lineToPoint(NSMakePoint(@arrow_x, NSMaxY(content_rect))) path.lineToPoint(NSMakePoint(@arrow_x + self.arrow_width / 2, NSMaxY(content_rect) - self.arrow_height)) end path.lineToPoint(NSMakePoint(NSMaxX(content_rect) - self.corner_radius, NSMaxY(content_rect) - self.arrow_height)) top_right_corner = NSMakePoint(NSMaxX(content_rect), NSMaxY(content_rect) - self.arrow_height) path.curveToPoint(NSMakePoint(NSMaxX(content_rect), NSMaxY(content_rect) - self.arrow_height - self.corner_radius), controlPoint1: top_right_corner, controlPoint2: top_right_corner) path.lineToPoint(NSMakePoint(NSMaxX(content_rect), NSMinY(content_rect) + self.corner_radius)) bottom_right_corner = NSMakePoint(NSMaxX(content_rect), NSMinY(content_rect)) path.curveToPoint(NSMakePoint(NSMaxX(content_rect) - self.corner_radius, NSMinY(content_rect)), controlPoint1: bottom_right_corner, controlPoint2: bottom_right_corner) path.lineToPoint(NSMakePoint(NSMinX(content_rect) + self.corner_radius, NSMinY(content_rect))) path.curveToPoint(NSMakePoint(NSMinX(content_rect), NSMinY(content_rect) + self.corner_radius), controlPoint1: content_rect.origin, controlPoint2: content_rect.origin) path.lineToPoint(NSMakePoint(NSMinX(content_rect), NSMaxY(content_rect) - self.arrow_height - self.corner_radius)) path.curveToPoint(NSMakePoint(NSMinX(content_rect) + self.corner_radius, NSMaxY(content_rect) - self.arrow_height), controlPoint1: top_left_corner, controlPoint2: top_left_corner) path.closePath NSColor.whiteColor.setFill path.fill NSGraphicsContext.saveGraphicsState clip = NSBezierPath.bezierPathWithRect(self.bounds) clip.appendBezierPath(path) clip.addClip path.setLineWidth(self.line_thickness * 2) NSColor.lightGrayColor.setStroke path.stroke NSGraphicsContext.restoreGraphicsState end
initWithFrame(frame)
click to toggle source
Calls superclass method
# File lib/motion/popup/background.rb, line 6 def initWithFrame(frame) self.arrow_height = 12 self.arrow_width = 15 self.line_thickness = 1 self.corner_radius = 20 super(frame) end
setArrowX(value)
click to toggle source
# File lib/motion/popup/background.rb, line 66 def setArrowX(value) @arrow_x = value self.setNeedsDisplay(true) end