diff options
Diffstat (limited to 'chrome/browser/ui/cocoa/find_bar_view.mm')
-rw-r--r-- | chrome/browser/ui/cocoa/find_bar_view.mm | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/chrome/browser/ui/cocoa/find_bar_view.mm b/chrome/browser/ui/cocoa/find_bar_view.mm new file mode 100644 index 0000000..5e1ce21 --- /dev/null +++ b/chrome/browser/ui/cocoa/find_bar_view.mm @@ -0,0 +1,131 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "chrome/browser/ui/cocoa/find_bar_view.h" + +#import "chrome/browser/ui/cocoa/themed_window.h" +#import "chrome/browser/ui/cocoa/url_drop_target.h" +#import "chrome/browser/ui/cocoa/view_id_util.h" + +namespace { +CGFloat kCurveSize = 8; +} // end namespace + +@implementation FindBarView + +- (void)awakeFromNib { + // Register for all the drag types handled by the RWHVCocoa. + [self registerForDraggedTypes:[URLDropTargetHandler handledDragTypes]]; +} + +- (void)drawRect:(NSRect)rect { + // TODO(rohitrao): Make this prettier. + rect = NSInsetRect([self bounds], 0.5, 0.5); + rect = NSOffsetRect(rect, 0, 1.0); + + NSPoint topLeft = NSMakePoint(NSMinX(rect), NSMaxY(rect)); + NSPoint topRight = NSMakePoint(NSMaxX(rect), NSMaxY(rect)); + NSPoint midLeft1 = + NSMakePoint(NSMinX(rect) + kCurveSize, NSMaxY(rect) - kCurveSize); + NSPoint midLeft2 = + NSMakePoint(NSMinX(rect) + kCurveSize, NSMinY(rect) + kCurveSize); + NSPoint midRight1 = + NSMakePoint(NSMaxX(rect) - kCurveSize, NSMinY(rect) + kCurveSize); + NSPoint midRight2 = + NSMakePoint(NSMaxX(rect) - kCurveSize, NSMaxY(rect) - kCurveSize); + NSPoint bottomLeft = + NSMakePoint(NSMinX(rect) + (2 * kCurveSize), NSMinY(rect)); + NSPoint bottomRight = + NSMakePoint(NSMaxX(rect) - (2 * kCurveSize), NSMinY(rect)); + + NSBezierPath* path = [NSBezierPath bezierPath]; + [path moveToPoint:topLeft]; + [path curveToPoint:midLeft1 + controlPoint1:NSMakePoint(midLeft1.x, topLeft.y) + controlPoint2:NSMakePoint(midLeft1.x, topLeft.y)]; + [path lineToPoint:midLeft2]; + [path curveToPoint:bottomLeft + controlPoint1:NSMakePoint(midLeft2.x, bottomLeft.y) + controlPoint2:NSMakePoint(midLeft2.x, bottomLeft.y)]; + + [path lineToPoint:bottomRight]; + [path curveToPoint:midRight1 + controlPoint1:NSMakePoint(midRight1.x, bottomLeft.y) + controlPoint2:NSMakePoint(midRight1.x, bottomLeft.y)]; + [path lineToPoint:midRight2]; + [path curveToPoint:topRight + controlPoint1:NSMakePoint(midRight2.x, topLeft.y) + controlPoint2:NSMakePoint(midRight2.x, topLeft.y)]; + NSGraphicsContext* context = [NSGraphicsContext currentContext]; + [context saveGraphicsState]; + [path addClip]; + + // Set the pattern phase + NSPoint phase = [[self window] themePatternPhase]; + + [context setPatternPhase:phase]; + [super drawBackground]; + [context restoreGraphicsState]; + + [[self strokeColor] set]; + [path stroke]; +} + +// The findbar is mostly opaque, but has an 8px transparent border on the left +// and right sides (see |kCurveSize|). This is an artifact of the way it is +// drawn. We override hitTest to return nil for points in this transparent +// area. +- (NSView*)hitTest:(NSPoint)point { + NSView* hitView = [super hitTest:point]; + if (hitView == self) { + // |rect| is approximately equivalent to the opaque area of the findbar. + NSRect rect = NSInsetRect([self bounds], kCurveSize, 0); + if (!NSMouseInRect(point, rect, [self isFlipped])) + return nil; + } + + return hitView; +} + +// Eat all mouse events, to prevent clicks from falling through to views below. +- (void)mouseDown:(NSEvent *)theEvent { +} + +- (void)rightMouseDown:(NSEvent *)theEvent { +} + +- (void)otherMouseDown:(NSEvent *)theEvent { +} + +- (void)mouseUp:(NSEvent *)theEvent { +} + +- (void)rightMouseUp:(NSEvent *)theEvent { +} + +- (void)otherMouseUp:(NSEvent *)theEvent { +} + +- (void)mouseMoved:(NSEvent *)theEvent { +} + +- (void)mouseDragged:(NSEvent *)theEvent { +} + +- (void)rightMouseDragged:(NSEvent *)theEvent { +} + +- (void)otherMouseDragged:(NSEvent *)theEvent { +} + +// Eat drag operations, to prevent drags from going through to the views below. +- (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)info { + return NSDragOperationNone; +} + +- (ViewID)viewID { + return VIEW_ID_FIND_IN_PAGE; +} + +@end |