diff options
Diffstat (limited to 'frontends/cocoa/ArrowWindow.m')
-rw-r--r-- | frontends/cocoa/ArrowWindow.m | 246 |
1 files changed, 124 insertions, 122 deletions
diff --git a/frontends/cocoa/ArrowWindow.m b/frontends/cocoa/ArrowWindow.m index 84dbe1ef7..720e55e29 100644 --- a/frontends/cocoa/ArrowWindow.m +++ b/frontends/cocoa/ArrowWindow.m @@ -28,211 +28,213 @@ @synthesize acceptsKey; -- (id) initWithContentRect: (NSRect)contentRect styleMask: (NSWindowStyleMask)aStyle backing: (NSBackingStoreType)bufferingType defer: (BOOL)flag +- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSWindowStyleMask)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag { - if ((self = [super initWithContentRect: contentRect styleMask: NSWindowStyleMaskBorderless backing: bufferingType defer: flag]) == nil) { - return nil; - } + if ((self = [super initWithContentRect:contentRect styleMask:NSWindowStyleMaskBorderless backing:bufferingType defer:flag]) == nil) { + return nil; + } - [self setBackgroundColor: [NSColor clearColor]]; - [self setOpaque: NO]; - [self setHasShadow: YES]; + [self setBackgroundColor:[NSColor clearColor]]; + [self setOpaque:NO]; + [self setHasShadow:YES]; - return self; + return self; } -- (void) setContentView: (NSView *)aView +- (void)setContentView:(NSView *)aView { - if (aView == content) return; + if (aView == content) + return; - [content removeFromSuperview]; - content = aView; + [content removeFromSuperview]; + content = aView; - if (content == nil) return; + if (content == nil) + return; - if (box == nil) { - box = [[ArrowBox alloc] initWithFrame: NSZeroRect]; - [box setArrowEdge: ArrowTopEdge]; - [super setContentView: box]; - } + if (box == nil) { + box = [[ArrowBox alloc] initWithFrame:NSZeroRect]; + [box setArrowEdge:ArrowTopEdge]; + [super setContentView:box]; + } - [box addSubview: content]; + [box addSubview:content]; - NSRect frame = [self contentRectForFrameRect: [self frame]]; - frame.origin = [self convertRectFromScreen: (CGRect){.origin = frame.origin}].origin; - frame = [box convertRect: frame fromView: nil]; + NSRect frame = [self contentRectForFrameRect:[self frame]]; + frame.origin = [self convertRectFromScreen:(CGRect){.origin = frame.origin }].origin; + frame = [box convertRect:frame fromView:nil]; - [content setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable]; - [content setFrame: frame]; + [content setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; + [content setFrame:frame]; } -- (void) setContentSize: (NSSize)aSize +- (void)setContentSize:(NSSize)aSize { - NSRect frame = [content frame]; - frame.size = aSize; + NSRect frame = [content frame]; + frame.size = aSize; - frame = [box convertRect: frame toView: nil]; - frame.origin = [self convertRectToScreen: (CGRect){.origin = frame.origin}].origin; - frame = [self frameRectForContentRect: frame]; + frame = [box convertRect:frame toView:nil]; + frame.origin = [self convertRectToScreen:(CGRect){.origin = frame.origin }].origin; + frame = [self frameRectForContentRect:frame]; - [self setFrame: frame display: YES]; + [self setFrame:frame display:YES]; } static const CGFloat padding = 0; -- (NSRect) contentRectForFrameRect: (NSRect)frameRect +- (NSRect)contentRectForFrameRect:(NSRect)frameRect { - const CGFloat arrowSize = [box arrowSize]; - const CGFloat offset = 2 * (padding + arrowSize ); + const CGFloat arrowSize = [box arrowSize]; + const CGFloat offset = 2 * (padding + arrowSize); - return NSInsetRect( frameRect, offset, offset ); + return NSInsetRect(frameRect, offset, offset); } -- (NSRect) frameRectForContentRect: (NSRect)contentRect +- (NSRect)frameRectForContentRect:(NSRect)contentRect { - const CGFloat arrowSize = [box arrowSize]; - const CGFloat offset = -2 * (padding + arrowSize ); + const CGFloat arrowSize = [box arrowSize]; + const CGFloat offset = -2 * (padding + arrowSize); - return NSInsetRect( contentRect, offset, offset ); + return NSInsetRect(contentRect, offset, offset); } -+ (NSRect) frameRectForContentRect: (NSRect)cRect styleMask: (NSWindowStyleMask)aStyle ++ (NSRect)frameRectForContentRect:(NSRect)cRect styleMask:(NSWindowStyleMask)aStyle { - const CGFloat DefaultArrowSize = 15; - const CGFloat offset = -2 * (padding + DefaultArrowSize); + const CGFloat DefaultArrowSize = 15; + const CGFloat offset = -2 * (padding + DefaultArrowSize); - return NSInsetRect( cRect, offset, offset ); + return NSInsetRect(cRect, offset, offset); } -- (BOOL) canBecomeKeyWindow +- (BOOL)canBecomeKeyWindow { - return acceptsKey; + return acceptsKey; } -- (void) moveToPoint: (NSPoint) screenPoint +- (void)moveToPoint:(NSPoint)screenPoint { - switch ([box arrowEdge]) { - case ArrowNone: - screenPoint.x -= [box arrowSize]; - screenPoint.y += [box arrowSize]; - break; + switch ([box arrowEdge]) { + case ArrowNone: + screenPoint.x -= [box arrowSize]; + screenPoint.y += [box arrowSize]; + break; - case ArrowTopEdge: - screenPoint.x -= [box arrowPosition]; - break; + case ArrowTopEdge: + screenPoint.x -= [box arrowPosition]; + break; - case ArrowBottomEdge: - screenPoint.x -= [box arrowPosition]; - screenPoint.y += NSHeight( [self frame] ); - break; + case ArrowBottomEdge: + screenPoint.x -= [box arrowPosition]; + screenPoint.y += NSHeight([self frame]); + break; - case ArrowLeftEdge: - screenPoint.y += NSHeight( [self frame] ) - [box arrowPosition] - [box arrowSize]; - break; + case ArrowLeftEdge: + screenPoint.y += NSHeight([self frame]) - [box arrowPosition] - [box arrowSize]; + break; - case ArrowRightEdge: - screenPoint.x -= NSWidth( [self frame] ); - screenPoint.y += NSHeight( [self frame] ) - [box arrowPosition] - [box arrowSize]; - break; - } + case ArrowRightEdge: + screenPoint.x -= NSWidth([self frame]); + screenPoint.y += NSHeight([self frame]) - [box arrowPosition] - [box arrowSize]; + break; + } - [self setFrameTopLeftPoint: screenPoint]; + [self setFrameTopLeftPoint:screenPoint]; } -static NSRect ScreenRectForView( NSView *view ) +static NSRect ScreenRectForView(NSView *view) { - NSRect viewRect = [view bounds]; // in View coordinate system - viewRect = [view convertRect: viewRect toView: nil]; // translate to window coordinates - viewRect.origin = [[view window] convertRectToScreen: (CGRect){.origin = viewRect.origin}].origin; // translate to screen coordinates - return viewRect; + NSRect viewRect = [view bounds]; // in View coordinate system + viewRect = [view convertRect:viewRect toView:nil]; // translate to window coordinates + viewRect.origin = [[view window] convertRectToScreen:(CGRect){.origin = viewRect.origin }].origin; // translate to screen coordinates + return viewRect; } -- (void) attachToView: (NSView *) view +- (void)attachToView:(NSView *)view { - if (nil != attachedWindow) [self detach]; + if (nil != attachedWindow) + [self detach]; - NSRect viewRect = ScreenRectForView( view ); - NSPoint arrowPoint; + NSRect viewRect = ScreenRectForView(view); + NSPoint arrowPoint; - switch ([box arrowEdge]) { - case ArrowLeftEdge: - arrowPoint = NSMakePoint( NSMaxX( viewRect ), - NSMidY( viewRect ) ); - break; + switch ([box arrowEdge]) { + case ArrowLeftEdge: + arrowPoint = NSMakePoint(NSMaxX(viewRect), + NSMidY(viewRect)); + break; - case ArrowBottomEdge: - arrowPoint = NSMakePoint( NSMidX( viewRect ), - NSMaxY( viewRect ) ); - break; + case ArrowBottomEdge: + arrowPoint = NSMakePoint(NSMidX(viewRect), + NSMaxY(viewRect)); + break; - case ArrowRightEdge: - arrowPoint = NSMakePoint( NSMinX( viewRect ), - NSMidY( viewRect ) ); - break; + case ArrowRightEdge: + arrowPoint = NSMakePoint(NSMinX(viewRect), + NSMidY(viewRect)); + break; - case ArrowNone: - case ArrowTopEdge: - default: - arrowPoint = NSMakePoint( NSMidX( viewRect ), - NSMinY( viewRect ) ); - break; - - } - attachedWindow = [view window]; - [self moveToPoint: arrowPoint]; - [attachedWindow addChildWindow: self ordered: NSWindowAbove]; + case ArrowNone: + case ArrowTopEdge: + default: + arrowPoint = NSMakePoint(NSMidX(viewRect), + NSMinY(viewRect)); + break; + } + attachedWindow = [view window]; + [self moveToPoint:arrowPoint]; + [attachedWindow addChildWindow:self ordered:NSWindowAbove]; } -- (void) detach +- (void)detach { - [attachedWindow removeChildWindow: self]; - [self close]; - attachedWindow = nil; + [attachedWindow removeChildWindow:self]; + [self close]; + attachedWindow = nil; } //MARK: - //MARK: Properties -- (void) setArrowPosition: (CGFloat) newPosition +- (void)setArrowPosition:(CGFloat)newPosition { - [box setArrowPosition: newPosition]; + [box setArrowPosition:newPosition]; } -- (CGFloat) arrowPosition +- (CGFloat)arrowPosition { - return [box arrowPosition]; + return [box arrowPosition]; } -- (void) setArrowSize: (CGFloat)newSize +- (void)setArrowSize:(CGFloat)newSize { - NSRect contentRect = [self contentRectForFrameRect: [self frame]]; - [box setArrowSize: newSize]; - [self setFrame: [self frameRectForContentRect: contentRect] display: [self isVisible]]; + NSRect contentRect = [self contentRectForFrameRect:[self frame]]; + [box setArrowSize:newSize]; + [self setFrame:[self frameRectForContentRect:contentRect] display:[self isVisible]]; } -- (CGFloat) arrowSize +- (CGFloat)arrowSize { - return [box arrowSize]; + return [box arrowSize]; } -- (void) setArrowEdge: (ArrowEdge) newEdge +- (void)setArrowEdge:(ArrowEdge)newEdge { - [box setArrowEdge: newEdge]; + [box setArrowEdge:newEdge]; } -- (ArrowEdge) arrowEdge +- (ArrowEdge)arrowEdge { - return [box arrowEdge]; + return [box arrowEdge]; } -- (void) setCornerRadius: (CGFloat)newRadius +- (void)setCornerRadius:(CGFloat)newRadius { - [box setCornerRadius: newRadius]; + [box setCornerRadius:newRadius]; } -- (CGFloat) cornerRadius +- (CGFloat)cornerRadius { - return [box cornerRadius]; + return [box cornerRadius]; } @end |