#import "ITButtonCell.h" #define GRAY_EXTRA_PAD_H 60.0 @interface ITButtonCell (Private) - (void)drawGrayRoundedBezelWithFrame:(NSRect)rect inView:(NSView *)controlView; @end @implementation ITButtonCell - (id)init { if ((self = [super init])) { _subStyle = 0; } return self; } - (void)setBezelStyle:(NSBezelStyle)bezelStyle { if (bezelStyle == ITGrayRoundedBezelStyle) { _subStyle = bezelStyle; bezelStyle = NSRegularSquareBezelStyle; } else { _subStyle = 0; } [super setBezelStyle:bezelStyle]; } - (void)drawWithFrame:(NSRect)rect inView:(NSView *)controlView { if (_subStyle == ITGrayRoundedBezelStyle) { [self drawGrayRoundedBezelWithFrame:rect inView:controlView]; if ([self attributedTitle]) { NSPoint stringOrigin; NSSize stringSize; stringSize = [[self attributedTitle] size]; stringOrigin.x = rect.origin.x + (rect.size.width - stringSize.width) / 2; stringOrigin.y = (rect.origin.y + (rect.size.height - stringSize.height) / 2) - 2; [controlView lockFocus]; [[self attributedTitle] drawAtPoint:stringOrigin]; [controlView unlockFocus]; } else { [super drawInteriorWithFrame:rect inView:controlView]; } [[controlView superview] setNeedsDisplay:YES]; } else { [super drawWithFrame:rect inView:controlView]; } } - (void)drawGrayRoundedBezelWithFrame:(NSRect)rect inView:(NSView *)controlView { NSBezierPath *path = [NSBezierPath bezierPath]; float ch = rect.size.height; float cw = rect.size.width; float radius = (ch / 2); NSPoint pointA = NSMakePoint((ch / 2), 0.0); NSPoint pointB = NSMakePoint((cw - (ch / 2)), 0.0); // NSPoint pointC = NSMakePoint((cw - (ch / 2)), ch); NSPoint pointD = NSMakePoint((ch / 2), ch); NSPoint lCtr = NSMakePoint((ch / 2), (ch / 2)); NSPoint rCtr = NSMakePoint((cw - (ch / 2)), (ch / 2)); float alpha = 0.45; [path moveToPoint:pointA]; [path lineToPoint:pointB]; [path appendBezierPathWithArcWithCenter:rCtr radius:radius startAngle:270.0 endAngle:90.0]; [path lineToPoint:pointD]; [path appendBezierPathWithArcWithCenter:lCtr radius:radius startAngle:90.0 endAngle:270.0]; if ([self isHighlighted]) { alpha = 0.60; } [[NSColor colorWithCalibratedWhite:0.15 alpha:alpha] set]; [path fill]; } - (BOOL)isOpaque { return NO; } @end