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

Side by Side Diff: chrome/browser/ui/cocoa/status_bubble_mac.h

Issue 164333006: Fix the Mac status bubble. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: hit it with a larger hammer Created 6 years, 10 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 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 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 #ifndef CHROME_BROWSER_UI_COCOA_STATUS_BUBBLE_MAC_H_ 5 #ifndef CHROME_BROWSER_UI_COCOA_STATUS_BUBBLE_MAC_H_
6 #define CHROME_BROWSER_UI_COCOA_STATUS_BUBBLE_MAC_H_ 6 #define CHROME_BROWSER_UI_COCOA_STATUS_BUBBLE_MAC_H_
7 7
8 #include <string> 8 #include <string>
9 9
10 #import <Cocoa/Cocoa.h> 10 #import <Cocoa/Cocoa.h>
11 #import <QuartzCore/QuartzCore.h> 11 #import <QuartzCore/QuartzCore.h>
12 12
13 #include "base/compiler_specific.h" 13 #include "base/compiler_specific.h"
14 #include "base/memory/weak_ptr.h" 14 #include "base/memory/weak_ptr.h"
15 #include "base/strings/string16.h" 15 #include "base/strings/string16.h"
16 #include "chrome/browser/ui/status_bubble.h" 16 #include "chrome/browser/ui/status_bubble.h"
17 #include "url/gurl.h" 17 #include "url/gurl.h"
18 18
19 class StatusBubbleMacTest; 19 class StatusBubbleMacTest;
20 @class StatusBubbleWindow;
20 21
21 class StatusBubbleMac : public StatusBubble { 22 class StatusBubbleMac : public StatusBubble {
22 public: 23 public:
23 // The various states that a status bubble may be in. Public for delegate 24 // The various states that a status bubble may be in. Public for delegate
24 // access (for testing). 25 // access (for testing).
25 enum StatusBubbleState { 26 enum StatusBubbleState {
26 kBubbleHidden, // Fully hidden 27 kBubbleHidden, // Fully hidden
27 kBubbleShowingTimer, // Waiting to fade in 28 kBubbleShowingTimer, // Waiting to fade in
28 kBubbleShowingFadeIn, // In a fade-in transition 29 kBubbleShowingFadeIn, // In a fade-in transition
29 kBubbleShown, // Fully visible 30 kBubbleShown, // Fully visible
(...skipping 14 matching lines...) Expand all
44 45
45 // Mac-specific method: Update the size and position of the status bubble to 46 // Mac-specific method: Update the size and position of the status bubble to
46 // match the parent window. Safe to call even when the status bubble does not 47 // match the parent window. Safe to call even when the status bubble does not
47 // exist. 48 // exist.
48 void UpdateSizeAndPosition(); 49 void UpdateSizeAndPosition();
49 50
50 // Mac-specific method: Change the parent window of the status bubble. Safe to 51 // Mac-specific method: Change the parent window of the status bubble. Safe to
51 // call even when the status bubble does not exist. 52 // call even when the status bubble does not exist.
52 void SwitchParentWindow(NSWindow* parent); 53 void SwitchParentWindow(NSWindow* parent);
53 54
54 // Delegate method called when a fade-in or fade-out transition has
55 // completed. This is public so that it may be visible to the CAAnimation
56 // delegate, which is an Objective-C object.
57 void AnimationDidStop(CAAnimation* animation, bool finished);
58
59 // Expand the bubble to fit a URL too long for the standard bubble size. 55 // Expand the bubble to fit a URL too long for the standard bubble size.
60 void ExpandBubble(); 56 void ExpandBubble();
61 57
62 protected: 58 protected:
63 // Get the current location of the mouse. Protected so that it can be 59 // Get the current location of the mouse. Protected so that it can be
64 // stubbed out for testing. 60 // stubbed out for testing.
65 virtual gfx::Point GetMouseLocation(); 61 virtual gfx::Point GetMouseLocation();
66 62
67 private: 63 private:
68 friend class StatusBubbleMacTest; 64 friend class StatusBubbleMacTest;
(...skipping 21 matching lines...) Expand all
90 bool is_attached() { return [window_ parentWindow] != nil; } 86 bool is_attached() { return [window_ parentWindow] != nil; }
91 87
92 // Begins fading the status bubble window in or out depending on the value 88 // Begins fading the status bubble window in or out depending on the value
93 // of |show|. This must be called from the appropriate fade state, 89 // of |show|. This must be called from the appropriate fade state,
94 // kBubbleShowingFadeIn or kBubbleHidingFadeOut, or from the appropriate 90 // kBubbleShowingFadeIn or kBubbleHidingFadeOut, or from the appropriate
95 // fully-shown/hidden state, kBubbleShown or kBubbleHidden. This may be 91 // fully-shown/hidden state, kBubbleShown or kBubbleHidden. This may be
96 // called at any point during a fade-in or fade-out; it is even possible to 92 // called at any point during a fade-in or fade-out; it is even possible to
97 // reverse a transition before it has completed. 93 // reverse a transition before it has completed.
98 void Fade(bool show); 94 void Fade(bool show);
99 95
96 // Starts an animation of the bubble window to a specific alpha value over a
97 // specific period of time.
98 void AnimateWindowAlpha(CGFloat alpha, NSTimeInterval duration);
99
100 // Method called from the completion callbacks when a fade-in or fade-out
101 // transition has completed.
102 void AnimationDidStop();
103
100 // One-shot timer operations to manage the delays associated with the 104 // One-shot timer operations to manage the delays associated with the
101 // kBubbleShowingTimer and kBubbleHidingTimer states. StartTimer and 105 // kBubbleShowingTimer and kBubbleHidingTimer states. StartTimer and
102 // TimerFired must be called from one of these states. StartTimer may be 106 // TimerFired must be called from one of these states. StartTimer may be
103 // called while the timer is still running; in that case, the timer will be 107 // called while the timer is still running; in that case, the timer will be
104 // reset. CancelTimer may be called from any state. 108 // reset. CancelTimer may be called from any state.
105 void StartTimer(int64 time_ms); 109 void StartTimer(int64 time_ms);
106 void CancelTimer(); 110 void CancelTimer();
107 void TimerFired(); 111 void TimerFired();
108 112
109 // Begin the process of showing or hiding the status bubble. These may be 113 // Begin the process of showing or hiding the status bubble. These may be
110 // called from any state, and will take the appropriate action to initiate 114 // called from any state, and will take the appropriate action to initiate
111 // any state changes that may be needed. 115 // any state changes that may be needed.
112 void StartShowing(); 116 void StartShowing();
113 void StartHiding(); 117 void StartHiding();
114 118
115 // Cancel the expansion timer. 119 // Cancel the expansion timer.
116 void CancelExpandTimer(); 120 void CancelExpandTimer();
117 121
118 // Sets the frame of the status bubble window to |window_frame|, adjusting 122 // Sets the frame of the status bubble window to |window_frame|, adjusting
119 // for the given mouse position if necessary. Protected for use in tests. 123 // for the given mouse position if necessary. Protected for use in tests.
120 void SetFrameAvoidingMouse(NSRect window_frame, const gfx::Point& mouse_pos); 124 void SetFrameAvoidingMouse(NSRect window_frame, const gfx::Point& mouse_pos);
121 125
122 // The factory used to generate weak pointers for the show and hide delay 126 // The factory used to generate weak pointers for the show and hide delay
123 // timers. 127 // timers.
124 base::WeakPtrFactory<StatusBubbleMac> timer_factory_; 128 base::WeakPtrFactory<StatusBubbleMac> timer_factory_;
125 129
126 // The factory used to generate weak pointers for the expansion delay timer. 130 // The factory used to generate weak pointers for the expansion delay timer.
127 base::WeakPtrFactory<StatusBubbleMac> expand_timer_factory_; 131 base::WeakPtrFactory<StatusBubbleMac> expand_timer_factory_;
128 132
133 // The factory used to generate weak pointers for the CAAnimation completion
134 // handlers.
135 base::WeakPtrFactory<StatusBubbleMac> completion_handler_factory_;
136
129 // Calculate the appropriate frame for the status bubble window. If 137 // Calculate the appropriate frame for the status bubble window. If
130 // |expanded_width|, use entire width of parent frame. 138 // |expanded_width|, use entire width of parent frame.
131 NSRect CalculateWindowFrame(bool expanded_width); 139 NSRect CalculateWindowFrame(bool expanded_width);
132 140
133 // Returns the flags to be used to round the corners of the status bubble. 141 // Returns the flags to be used to round the corners of the status bubble.
134 // Before 10.7, windows have square bottom corners, but in 10.7, the bottom 142 // Before 10.7, windows have square bottom corners, but in 10.7, the bottom
135 // corners are rounded. This method considers the bubble's placement (as 143 // corners are rounded. This method considers the bubble's placement (as
136 // proposed in window_frame) relative to its parent window in determining 144 // proposed in window_frame) relative to its parent window in determining
137 // which flags to return. This function may choose to round any corner, 145 // which flags to return. This function may choose to round any corner,
138 // including top corners. Note that there may be other reasons that a 146 // including top corners. Note that there may be other reasons that a
139 // status bubble's corner may be rounded in addition to those dependent on 147 // status bubble's corner may be rounded in addition to those dependent on
140 // OS version, and flags will be set or unset elsewhere to address these 148 // OS version, and flags will be set or unset elsewhere to address these
141 // concerns. 149 // concerns.
142 unsigned long OSDependentCornerFlags(NSRect window_frame); 150 unsigned long OSDependentCornerFlags(NSRect window_frame);
143 151
144 // The window we attach ourselves to. 152 // The window we attach ourselves to.
145 NSWindow* parent_; // WEAK 153 NSWindow* parent_; // WEAK
146 154
147 // The object that we query about our vertical offset for positioning. 155 // The object that we query about our vertical offset for positioning.
148 id delegate_; // WEAK 156 id delegate_; // WEAK
149 157
150 // The window we own. 158 // The window we own.
151 NSWindow* window_; 159 StatusBubbleWindow* window_;
152 160
153 // The status text we want to display when there are no URLs to display. 161 // The status text we want to display when there are no URLs to display.
154 NSString* status_text_; 162 NSString* status_text_;
155 163
156 // The url we want to display when there is no status text to display. 164 // The url we want to display when there is no status text to display.
157 NSString* url_text_; 165 NSString* url_text_;
158 166
159 // The status bubble's current state. Do not write to this field directly; 167 // The status bubble's current state. Do not write to this field directly;
160 // use SetState(). 168 // use SetState().
161 StatusBubbleState state_; 169 StatusBubbleState state_;
(...skipping 22 matching lines...) Expand all
184 @interface NSObject(StatusBubbleDelegate) 192 @interface NSObject(StatusBubbleDelegate)
185 // Called to query the delegate about the frame StatusBubble should position 193 // Called to query the delegate about the frame StatusBubble should position
186 // itself in. Frame is returned in the parent window coordinates. 194 // itself in. Frame is returned in the parent window coordinates.
187 - (NSRect)statusBubbleBaseFrame; 195 - (NSRect)statusBubbleBaseFrame;
188 196
189 // Called from SetState to notify the delegate of state changes. 197 // Called from SetState to notify the delegate of state changes.
190 - (void)statusBubbleWillEnterState:(StatusBubbleMac::StatusBubbleState)state; 198 - (void)statusBubbleWillEnterState:(StatusBubbleMac::StatusBubbleState)state;
191 @end 199 @end
192 200
193 #endif // CHROME_BROWSER_UI_COCOA_STATUS_BUBBLE_MAC_H_ 201 #endif // CHROME_BROWSER_UI_COCOA_STATUS_BUBBLE_MAC_H_
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/ui/cocoa/status_bubble_mac.mm » ('j') | chrome/browser/ui/cocoa/status_bubble_mac.mm » ('J')

Powered by Google App Engine
This is Rietveld 408576698