Hi all. I'm trying to implement a fairly straight forward customized
version of a borderless NSPopUpButton on 10.4. All I want to do is
draw a rounded rect inside the button's frame during mouse over. So
I create a tracking rect with the the button's frame so I get enter/
exit events. However I never get any. The rect gets set correctly I
just never hear anything else from it.
Here is my pertaining code:
- (void)viewDidMoveToWindow {
// set up our tracking rect
frameTrackingRectTag = [self addTrackingRect:[self frame] owner:self
userData:nil assumeInside:NSMouseInRect([self convertPoint:[[self
window] mouseLocationOutsideOfEventStream] fromView:nil],[self frame],
[self isFlipped])];
NSLog(@"frame tracking rect: %@, frameTrackingTag: %d (inside: %@)",
NSStringFromRect([self frame]), frameTrackingRectTag, NSMouseInRect
([self convertPoint:[[self window] mouseLocationOutsideOfEventStream]
fromView:nil],[self frame],[self isFlipped]) ? @"YES" : @"NO" );
}
- (void)viewWillMoveToWindow:(NSWindow *)newWindow {
if ( [self window] && frameTrackingRectTag ) {
[self removeTrackingRect:frameTrackingRectTag];
}
}
- (void)mouseEntered:(NSEvent *)theEvent {
NSLog(@"entered");
if( [theEvent trackingNumber] == frameTrackingRectTag )
[self highlight:YES];
}
- (void)mouseExited:(NSEvent *)theEvent {
NSLog(@"exited");
if( [theEvent trackingNumber] == frameTrackingRectTag )
[self highlight:NO];
}
- (void)setFrame:(NSRect)frame {
[super setFrame:frame];
[self removeTrackingRect:frameTrackingRectTag];
frameTrackingRectTag = [self addTrackingRect:frame owner:self
userData:nil assumeInside:NSMouseInRect([self convertPoint:[[self
window] mouseLocationOutsideOfEventStream] fromView:nil],[self frame],
[self isFlipped])];
}
Anyone see anything wrong? Most of this code is yanked straight form
Apple's docs. However, I haven't written tracking rect code in a
while so I assume I am missing something.
Thanks!
->Ben
--
Ben Lachman
Acacia Tree Software
http://acaciatreesoftware.com<blachman...>