Andy, Kyle, Thank you both for your assistance on this. I've got something working now which doesn't cause the responsiveness issues and even looks visually more pleasant. Here's the solution:
- (void) drawPagePost:(PDFPage *)page { [super drawPagePost:page]; if ([[self window] firstResponder] == self && [NSApp isActive]) { [NSGraphicsContext saveGraphicsState]; NSSetFocusRingStyle(NSFocusRingOnly); NSRect r = [[self documentView] bounds]; [[NSBezierPath bezierPathWithRect:r] fill]; [NSGraphicsContext restoreGraphicsState]; } } This puts a nice focus ring tightly around the pdf pages, rather than hugging the edges of the PDFView. I find this much nicer and easier to see. Some interesting points/problems - if I use -drawPage: instead, then the focus ring has the wrong size and overlaps the displayed pages. Don't know why. - doing this in -drawPage: or -drawPagePost: solves the issue I was having - using [self bounds] rather than [[self documentView] bounds] produces no visible focus ring Anyway, I'm now happy with the results, though I would like to understand better why the other possible 'solutions' don't work. Best wishes, Martin On Jan 8, 2013, at 05:22 PM, Kyle Sluder <k...@ksluder.com> wrote: > On Tue, Jan 8, 2013, at 07:58 AM, Andy Lee wrote: >> You're already calling setKeyboardFocusRingNeedsDisplayInRect: in >> become/resignFirstResponder, which seems like the right place. But I >> notice Apple's "Dicey" example project uses NSSetFocusRingStyle >> differently than you do. It pushes and pops the graphics state -- and >> thus, I believe, the clipping region -- instead of doing lockFocus on the >> superview. I bet this is how it avoids the infinite invalidating. > > Well, pushing the graphics state isn't going to reset the clipping rect, > and -lockFocus pushes a new graphics state on the stack anyway. > >> >> I think Kyle is suggesting something like what Apple does (taken from >> <http://developer.apple.com/library/mac/#samplecode/Dicey/Listings/DCDie_m.html>): > > Yes, this is the approach I am suggesting. > > --Kyle Sluder _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com