summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/cocoa/find_bar_view.mm
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/ui/cocoa/find_bar_view.mm')
-rw-r--r--chrome/browser/ui/cocoa/find_bar_view.mm131
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