Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(501)

Side by Side Diff: chrome/browser/cocoa/tab_view.mm

Issue 113857: Adds mouseover images to the close tab button on Mac.... (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: Created 11 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/cocoa/tab_view.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/cocoa/tab_controller.h" 5 #include "chrome/browser/cocoa/tab_controller.h"
6 #include "chrome/browser/cocoa/tab_view.h" 6 #include "chrome/browser/cocoa/tab_view.h"
7 #include "chrome/browser/cocoa/tab_window_controller.h" 7 #include "chrome/browser/cocoa/tab_window_controller.h"
8 8
9 @implementation TabView 9 @implementation TabView
10 10
11 - (id)initWithFrame:(NSRect)frame { 11 - (id)initWithFrame:(NSRect)frame {
12 self = [super initWithFrame:frame]; 12 self = [super initWithFrame:frame];
13 if (self) { 13 if (self) {
14 // TODO(alcor): register for theming, either here or the cell 14 // TODO(alcor): register for theming, either here or the cell
15 // [self gtm_registerForThemeNotifications]; 15 // [self gtm_registerForThemeNotifications];
16 } 16 }
17 return self; 17 return self;
18 } 18 }
19 19
20 - (void)awakeFromNib {
21 // Set up the tracking rect for the close button mouseover. Add it
22 // to the |closeButton_| view, but we'll handle the message ourself.
23 // The mouseover is always enabled, because the close button works
24 // regardless of key/main/active status.
25 trackingArea_.reset(
26 [[NSTrackingArea alloc] initWithRect:[closeButton_ bounds]
27 options:NSTrackingMouseEnteredAndExited |
28 NSTrackingActiveAlways
29 owner:self
pink (ping after 24hrs) 2009/05/27 13:07:59 are you sure this doesn't set up an ownership cycl
rohitrao (ping after 24h) 2009/05/27 23:58:50 I added logging in dealloc and verified that deall
30 userInfo:nil]);
31 [closeButton_ addTrackingArea:trackingArea_.get()];
32 }
33
20 - (void)dealloc { 34 - (void)dealloc {
21 // [self gtm_unregisterForThemeNotifications]; 35 // [self gtm_unregisterForThemeNotifications];
36 [closeButton_ removeTrackingArea:trackingArea_.get()];
22 [super dealloc]; 37 [super dealloc];
23 } 38 }
24 39
25 // Overridden so that mouse clicks come to this view (the parent of the 40 // Overridden so that mouse clicks come to this view (the parent of the
26 // hierarchy) first. We want to handle clicks and drags in this class and 41 // hierarchy) first. We want to handle clicks and drags in this class and
27 // leave the background button for display purposes only. 42 // leave the background button for display purposes only.
28 - (BOOL)acceptsFirstMouse:(NSEvent *)theEvent { 43 - (BOOL)acceptsFirstMouse:(NSEvent *)theEvent {
29 return YES; 44 return YES;
30 } 45 }
31 46
47 - (void)mouseEntered:(NSEvent *)theEvent {
48 // We only set up one tracking area, so we know any mouseEntered:
49 // messages are for close button mouseovers.
50 [closeButton_ setImage:[NSImage imageNamed:@"close_bar_h"]];
51 }
52
53 - (void)mouseExited:(NSEvent *)theEvent {
54 // We only set up one tracking area, so we know any mouseExited:
55 // messages are for close button mouseovers.
56 [closeButton_ setImage:[NSImage imageNamed:@"close_bar"]];
57 }
58
32 // Determines which view a click in our frame actually hit. It's either this 59 // Determines which view a click in our frame actually hit. It's either this
33 // view or our child close button. 60 // view or our child close button.
34 - (NSView *)hitTest:(NSPoint)aPoint { 61 - (NSView *)hitTest:(NSPoint)aPoint {
35 NSPoint viewPoint = [self convertPoint:aPoint fromView:[self superview]]; 62 NSPoint viewPoint = [self convertPoint:aPoint fromView:[self superview]];
36 NSRect frame = [self frame]; 63 NSRect frame = [self frame];
37 64
38 // Reduce the width of the hit rect slightly to remove the overlap 65 // Reduce the width of the hit rect slightly to remove the overlap
39 // between adjacent tabs. The drawing code in TabCell has the top 66 // between adjacent tabs. The drawing code in TabCell has the top
40 // corners of the tab inset by height*2/3, so we inset by half of 67 // corners of the tab inset by height*2/3, so we inset by half of
41 // that here. This doesn't completely eliminate the overlap, but it 68 // that here. This doesn't completely eliminate the overlap, but it
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 } 352 }
326 353
327 - (void)otherMouseUp:(NSEvent*) theEvent { 354 - (void)otherMouseUp:(NSEvent*) theEvent {
328 // Support middle-click-to-close. 355 // Support middle-click-to-close.
329 if ([theEvent buttonNumber] == 2) { 356 if ([theEvent buttonNumber] == 2) {
330 [controller_ closeTab:self]; 357 [controller_ closeTab:self];
331 } 358 }
332 } 359 }
333 360
334 @end 361 @end
OLDNEW
« no previous file with comments | « chrome/browser/cocoa/tab_view.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698