KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have an NSBezierPath and I want to draw in inset shadow (similar to Photoshop) inside the path. Is there anyway to do this? Also, I know you can -stroke paths, but can you stroke inside a path (similar to Stroke Inside in Photoshop)? Update 3 static NSImage * graydient = nil; if (!graydient) { graydient = [[NSImage alloc] initWithSize: NSMakeSize(22, 22)]; [graydient lockFocus]; NSGradient * gradient = [[NSGradient alloc] initWithColorsAndLocations: clr(@"#262729"), 0.0f, clr(@"#37383a"), 0.43f, clr(@"#37383a"), 1.0f, nil]; [gradient drawInRect: NSMakeRect(0, 4.179, 22, 13.578) angle: 90.0f]; [gradient release]; [graydient unlockFocus]; } NSColor * gcolor = [NSColor colorWithPatternImage: graydient]; [gcolor set]; NSShadow * shadow = [NSShadow new]; [shadow setShadowColor: [NSColor colorWithDeviceWhite: 1.0f alpha: 1.0f]]; [shadow setShadowBlurRadius: 0.0f]; [shadow setShadowOffset: NSMakeSize(0, 1)]; [shadow set]; [path fill]; [NSGraphicsContext saveGraphicsState]; [[path pathFromIntersectionWithPath: [NSBezierPath bezierPathWithRect: NSInsetRect([path bounds], 0.6, 0)]] setClip]; [gcolor set]; [shadow setShadowOffset: NSMakeSize(0, 1)]; [shadow setShadowColor: [NSColor blackColor]]; [shadow set]; [outer stroke]; [NSGraphicsContext restoreGraphicsState]; [NSGraphicsContext saveGraphicsState]; [[NSGraphicsContext currentContext] setCompositingOperation: NSCompositeSourceOut]; [shadow set]; [[NSColor whiteColor] set]; [inner fill]; [shadow set]; [inner fill]; [NSGraphicsContext restoreGraphicsState]; This is my final result. It looks pretty good. I had to change the shadow to White @ 1.0 Alpha to make it work. Even though the shadow alpha norm for menu bar items is 0.5, it doesn't look half bad. Many thanks go out to <a href="https://stackoverflow.com/users/201199/joshua-noz
Tags (comma-separated)
Save Edits
Cancel