| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #import "chrome/browser/ui/cocoa/find_bar/find_bar_view.h" | |
| 6 | |
| 7 #import "chrome/browser/ui/cocoa/themed_window.h" | |
| 8 #import "chrome/browser/ui/cocoa/url_drop_target.h" | |
| 9 #import "chrome/browser/ui/cocoa/view_id_util.h" | |
| 10 #import "ui/base/cocoa/nsgraphics_context_additions.h" | |
| 11 #import "ui/base/cocoa/nsview_additions.h" | |
| 12 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h" | |
| 13 | |
| 14 namespace { | |
| 15 CGFloat kCurveSize = 8; | |
| 16 } // end namespace | |
| 17 | |
| 18 @implementation FindBarView | |
| 19 | |
| 20 - (id)initWithFrame:(NSRect)frame { | |
| 21 if ((self = [super initWithFrame:frame])) { | |
| 22 // Give this view its own layer so that it can appear over the web contents | |
| 23 // view's layer. Layer squashing is not helpful for this view because | |
| 24 // NSTextField will correctly anti-alias text on 10.8 and beyond. | |
| 25 [self setWantsLayer:YES]; | |
| 26 } | |
| 27 return self; | |
| 28 } | |
| 29 | |
| 30 - (void)awakeFromNib { | |
| 31 // Register for all the drag types handled by the RWHVCocoa. | |
| 32 [self registerForDraggedTypes:[URLDropTargetHandler handledDragTypes]]; | |
| 33 } | |
| 34 | |
| 35 - (void)drawRect:(NSRect)rect { | |
| 36 const CGFloat lineWidth = [self cr_lineWidth]; | |
| 37 const CGFloat halfLineWidth = lineWidth / 2.0; | |
| 38 | |
| 39 // TODO(rohitrao): Make this prettier. | |
| 40 rect = NSInsetRect([self bounds], halfLineWidth, halfLineWidth); | |
| 41 rect = NSOffsetRect(rect, 0, lineWidth); | |
| 42 | |
| 43 NSPoint topLeft = NSMakePoint(NSMinX(rect), NSMaxY(rect)); | |
| 44 NSPoint topRight = NSMakePoint(NSMaxX(rect), NSMaxY(rect)); | |
| 45 NSPoint midLeft1 = | |
| 46 NSMakePoint(NSMinX(rect) + kCurveSize, NSMaxY(rect) - kCurveSize); | |
| 47 NSPoint midLeft2 = | |
| 48 NSMakePoint(NSMinX(rect) + kCurveSize, NSMinY(rect) + kCurveSize); | |
| 49 NSPoint midRight1 = | |
| 50 NSMakePoint(NSMaxX(rect) - kCurveSize, NSMinY(rect) + kCurveSize); | |
| 51 NSPoint midRight2 = | |
| 52 NSMakePoint(NSMaxX(rect) - kCurveSize, NSMaxY(rect) - kCurveSize); | |
| 53 NSPoint bottomLeft = | |
| 54 NSMakePoint(NSMinX(rect) + (2 * kCurveSize), NSMinY(rect)); | |
| 55 NSPoint bottomRight = | |
| 56 NSMakePoint(NSMaxX(rect) - (2 * kCurveSize), NSMinY(rect)); | |
| 57 | |
| 58 NSBezierPath* path = [NSBezierPath bezierPath]; | |
| 59 [path moveToPoint:topLeft]; | |
| 60 [path curveToPoint:midLeft1 | |
| 61 controlPoint1:NSMakePoint(midLeft1.x, topLeft.y) | |
| 62 controlPoint2:NSMakePoint(midLeft1.x, topLeft.y)]; | |
| 63 [path lineToPoint:midLeft2]; | |
| 64 [path curveToPoint:bottomLeft | |
| 65 controlPoint1:NSMakePoint(midLeft2.x, bottomLeft.y) | |
| 66 controlPoint2:NSMakePoint(midLeft2.x, bottomLeft.y)]; | |
| 67 | |
| 68 [path lineToPoint:bottomRight]; | |
| 69 [path curveToPoint:midRight1 | |
| 70 controlPoint1:NSMakePoint(midRight1.x, bottomLeft.y) | |
| 71 controlPoint2:NSMakePoint(midRight1.x, bottomLeft.y)]; | |
| 72 [path lineToPoint:midRight2]; | |
| 73 [path curveToPoint:topRight | |
| 74 controlPoint1:NSMakePoint(midRight2.x, topLeft.y) | |
| 75 controlPoint2:NSMakePoint(midRight2.x, topLeft.y)]; | |
| 76 | |
| 77 { | |
| 78 gfx::ScopedNSGraphicsContextSaveGState scopedGState; | |
| 79 NSGraphicsContext* context = [NSGraphicsContext currentContext]; | |
| 80 [path addClip]; | |
| 81 | |
| 82 // Set the pattern phase | |
| 83 NSPoint position = [[self window] | |
| 84 themeImagePositionForAlignment:THEME_IMAGE_ALIGN_WITH_TAB_STRIP]; | |
| 85 [context cr_setPatternPhase:position forView:self]; | |
| 86 | |
| 87 [super drawBackgroundWithOpaque:YES]; | |
| 88 } | |
| 89 | |
| 90 [[self strokeColor] set]; | |
| 91 [path setLineWidth:lineWidth]; | |
| 92 [path stroke]; | |
| 93 } | |
| 94 | |
| 95 // The findbar is mostly opaque, but has an 8px transparent border on the left | |
| 96 // and right sides (see |kCurveSize|). This is an artifact of the way it is | |
| 97 // drawn. We override hitTest to return nil for points in this transparent | |
| 98 // area. | |
| 99 - (NSView*)hitTest:(NSPoint)point { | |
| 100 NSView* hitView = [super hitTest:point]; | |
| 101 if (hitView == self) { | |
| 102 // |rect| is approximately equivalent to the opaque area of the findbar. | |
| 103 NSRect rect = NSInsetRect([self bounds], kCurveSize, 0); | |
| 104 if (!NSMouseInRect(point, rect, [self isFlipped])) | |
| 105 return nil; | |
| 106 } | |
| 107 | |
| 108 return hitView; | |
| 109 } | |
| 110 | |
| 111 // Eat all mouse events, to prevent clicks from falling through to views below. | |
| 112 - (void)mouseDown:(NSEvent *)theEvent { | |
| 113 } | |
| 114 | |
| 115 - (void)rightMouseDown:(NSEvent *)theEvent { | |
| 116 } | |
| 117 | |
| 118 - (void)otherMouseDown:(NSEvent *)theEvent { | |
| 119 } | |
| 120 | |
| 121 - (void)mouseUp:(NSEvent *)theEvent { | |
| 122 } | |
| 123 | |
| 124 - (void)rightMouseUp:(NSEvent *)theEvent { | |
| 125 } | |
| 126 | |
| 127 - (void)otherMouseUp:(NSEvent *)theEvent { | |
| 128 } | |
| 129 | |
| 130 - (void)mouseMoved:(NSEvent *)theEvent { | |
| 131 } | |
| 132 | |
| 133 - (void)mouseDragged:(NSEvent *)theEvent { | |
| 134 } | |
| 135 | |
| 136 - (void)rightMouseDragged:(NSEvent *)theEvent { | |
| 137 } | |
| 138 | |
| 139 - (void)otherMouseDragged:(NSEvent *)theEvent { | |
| 140 } | |
| 141 | |
| 142 // Eat drag operations, to prevent drags from going through to the views below. | |
| 143 - (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)info { | |
| 144 return NSDragOperationNone; | |
| 145 } | |
| 146 | |
| 147 // Specifies that mouse events over this view should be ignored by the | |
| 148 // render host. | |
| 149 - (BOOL)nonWebContentView { | |
| 150 return YES; | |
| 151 } | |
| 152 | |
| 153 @end | |
| OLD | NEW |