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 #include "chrome/browser/ui/cocoa/notifications/balloon_view.h" | |
6 | |
7 #import <Cocoa/Cocoa.h> | |
8 | |
9 #include "base/basictypes.h" | |
10 #import "chrome/browser/ui/cocoa/notifications/balloon_controller.h" | |
11 #import "third_party/GTM/AppKit/GTMNSBezierPath+RoundRect.h" | |
12 | |
13 namespace { | |
14 | |
15 const int kRoundedCornerSize = 6; | |
16 | |
17 } // namespace | |
18 | |
19 @implementation BalloonWindow | |
20 - (id)initWithContentRect:(NSRect)contentRect | |
21 styleMask:(NSUInteger)aStyle | |
22 backing:(NSBackingStoreType)bufferingType | |
23 defer:(BOOL)flag { | |
24 self = [super initWithContentRect:contentRect | |
25 styleMask:NSBorderlessWindowMask | |
26 backing:NSBackingStoreBuffered | |
27 defer:NO]; | |
28 // Using NSModalPanelWindowLevel (8) rather then NSStatusWindowLevel (25) | |
29 // ensures notification balloons on top of regular windows, but below | |
30 // popup menus which are at NSPopUpMenuWindowLevel (101) and Spotlight | |
31 // drop-out, which is at NSStatusWindowLevel-2 (23) for OSX 10.6/7. | |
32 // See http://crbug.com/59878. | |
33 if (self) { | |
34 [self setLevel:NSModalPanelWindowLevel]; | |
35 [self setOpaque:NO]; | |
36 [self setBackgroundColor:[NSColor clearColor]]; | |
37 } | |
38 return self; | |
39 } | |
40 | |
41 - (BOOL)canBecomeMainWindow { | |
42 return NO; | |
43 } | |
44 @end | |
45 | |
46 @implementation BalloonShelfViewCocoa | |
47 - (void)drawRect:(NSRect)rect { | |
48 NSBezierPath* path = | |
49 [NSBezierPath gtm_bezierPathWithRoundRect:[self bounds] | |
50 topLeftCornerRadius:kRoundedCornerSize | |
51 topRightCornerRadius:kRoundedCornerSize | |
52 bottomLeftCornerRadius:0.0 | |
53 bottomRightCornerRadius:0.0]; | |
54 | |
55 [[NSColor colorWithCalibratedWhite:0.957 alpha:1.0] set]; | |
56 [path fill]; | |
57 | |
58 [[NSColor colorWithCalibratedWhite:0.8 alpha:1.0] set]; | |
59 NSPoint origin = [self bounds].origin; | |
60 [NSBezierPath strokeLineFromPoint:origin | |
61 toPoint:NSMakePoint(origin.x + NSWidth([self bounds]), origin.y)]; | |
62 } | |
63 @end | |
64 | |
65 @implementation BalloonContentViewCocoa | |
66 - (void)drawRect:(NSRect)rect { | |
67 rect = NSInsetRect([self bounds], 0.5, 0.5); | |
68 NSBezierPath* path = | |
69 [NSBezierPath gtm_bezierPathWithRoundRect:rect | |
70 topLeftCornerRadius:0.0 | |
71 topRightCornerRadius:0.0 | |
72 bottomLeftCornerRadius:kRoundedCornerSize | |
73 bottomRightCornerRadius:kRoundedCornerSize]; | |
74 [[NSColor whiteColor] set]; | |
75 [path setLineWidth:3]; | |
76 [path stroke]; | |
77 } | |
78 @end | |
79 | |
80 @implementation BalloonOverlayViewCocoa | |
81 | |
82 // We do not want to bring chrome window to foreground when we click on any | |
83 // part of the notification balloon. To do this, we first postpone the window | |
84 // reorder here (shouldDelayWindowOrderingForEvent is called during mouseDown) | |
85 // and then complete canceling the reorder by [NSApp preventWindowOrdering] in | |
86 // mouseDown handler of this view. | |
87 - (BOOL)shouldDelayWindowOrderingForEvent:(NSEvent*)theEvent { | |
88 return YES; | |
89 } | |
90 | |
91 - (void)mouseDown:(NSEvent*)event { | |
92 [NSApp preventWindowOrdering]; | |
93 // Continue bubbling the event up the chain of responders. | |
94 [super mouseDown:event]; | |
95 } | |
96 | |
97 - (BOOL)acceptsFirstMouse:(NSEvent*)event { | |
98 return YES; | |
99 } | |
100 @end | |
OLD | NEW |