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

Side by Side Diff: chrome/browser/ui/cocoa/presentation_mode_controller.mm

Issue 523723002: mac, fullscreen: Several bug fixes after major refactor. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@new_fullscreen2
Patch Set: More comments from rsesek. Created 6 years, 3 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
« no previous file with comments | « chrome/browser/ui/cocoa/presentation_mode_controller.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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #import "chrome/browser/ui/cocoa/presentation_mode_controller.h" 5 #import "chrome/browser/ui/cocoa/presentation_mode_controller.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/mac/sdk_forward_declarations.h" 10 #include "base/mac/sdk_forward_declarations.h"
11 #import "base/mac/mac_util.h" 11 #import "base/mac/mac_util.h"
12 #include "chrome/browser/fullscreen.h" 12 #include "chrome/browser/fullscreen.h"
13 #import "chrome/browser/ui/cocoa/browser_window_controller.h" 13 #import "chrome/browser/ui/cocoa/browser_window_controller.h"
14 #import "chrome/browser/ui/cocoa/nsview_additions.h" 14 #import "chrome/browser/ui/cocoa/nsview_additions.h"
15 #include "chrome/common/chrome_switches.h" 15 #include "chrome/common/chrome_switches.h"
16 #import "third_party/google_toolbox_for_mac/src/AppKit/GTMNSAnimation+Duration.h " 16 #import "third_party/google_toolbox_for_mac/src/AppKit/GTMNSAnimation+Duration.h "
17 17
18 NSString* const kWillEnterFullscreenNotification = 18 NSString* const kWillEnterFullscreenNotification =
19 @"WillEnterFullscreenNotification"; 19 @"WillEnterFullscreenNotification";
20 NSString* const kWillLeaveFullscreenNotification = 20 NSString* const kWillLeaveFullscreenNotification =
21 @"WillLeaveFullscreenNotification"; 21 @"WillLeaveFullscreenNotification";
22 22
23 @interface PresentationModeController ()
24 // Sets a new current floating bar shown fraction. NOTE: This function has side
25 // effects, such as modifying the system fullscreen mode (menu bar shown state).
26 - (void)changeToolbarFraction:(CGFloat)fraction;
27
28 // Callback for menu bar animations.
29 - (void)setMenuBarRevealProgress:(CGFloat)progress;
30 @end
31
23 namespace { 32 namespace {
33
24 // The activation zone for the main menu is 4 pixels high; if we make it any 34 // The activation zone for the main menu is 4 pixels high; if we make it any
25 // smaller, then the menu can be made to appear without the bar sliding down. 35 // smaller, then the menu can be made to appear without the bar sliding down.
26 const CGFloat kDropdownActivationZoneHeight = 4; 36 const CGFloat kDropdownActivationZoneHeight = 4;
27 const NSTimeInterval kDropdownAnimationDuration = 0.12; 37 const NSTimeInterval kDropdownAnimationDuration = 0.12;
28 const NSTimeInterval kMouseExitCheckDelay = 0.1; 38 const NSTimeInterval kMouseExitCheckDelay = 0.1;
29 // This show delay attempts to match the delay for the main menu. 39 // This show delay attempts to match the delay for the main menu.
30 const NSTimeInterval kDropdownShowDelay = 0.3; 40 const NSTimeInterval kDropdownShowDelay = 0.3;
31 const NSTimeInterval kDropdownHideDelay = 0.2; 41 const NSTimeInterval kDropdownHideDelay = 0.2;
32 42
33 // The amount by which the floating bar is offset downwards (to avoid the menu) 43 // The amount by which the floating bar is offset downwards (to avoid the menu)
34 // in presentation mode. (We can't use |-[NSMenu menuBarHeight]| since it 44 // in presentation mode. (We can't use |-[NSMenu menuBarHeight]| since it
35 // returns 0 when the menu bar is hidden.) 45 // returns 0 when the menu bar is hidden.)
36 const CGFloat kFloatingBarVerticalOffset = 22; 46 const CGFloat kFloatingBarVerticalOffset = 22;
37 47
48 OSStatus MenuBarRevealHandler(EventHandlerCallRef handler,
49 EventRef event,
50 void* context) {
51 PresentationModeController* self =
52 static_cast<PresentationModeController*>(context);
53 CGFloat revealFraction = 0;
54 GetEventParameter(event,
55 FOUR_CHAR_CODE('rvlf'),
56 typeCGFloat,
57 NULL,
58 sizeof(CGFloat),
59 NULL,
60 &revealFraction);
61 [self setMenuBarRevealProgress:revealFraction];
62 return CallNextEventHandler(handler, event);
63 }
64
38 } // end namespace 65 } // end namespace
39 66
40
41 // Helper class to manage animations for the dropdown bar. Calls 67 // Helper class to manage animations for the dropdown bar. Calls
42 // [PresentationModeController changeFloatingBarShownFraction] once per 68 // [PresentationModeController changeToolbarFraction] once per
43 // animation step. 69 // animation step.
44 @interface DropdownAnimation : NSAnimation { 70 @interface DropdownAnimation : NSAnimation {
45 @private 71 @private
46 PresentationModeController* controller_; 72 PresentationModeController* controller_;
47 CGFloat startFraction_; 73 CGFloat startFraction_;
48 CGFloat endFraction_; 74 CGFloat endFraction_;
49 } 75 }
50 76
51 @property(readonly, nonatomic) CGFloat startFraction; 77 @property(readonly, nonatomic) CGFloat startFraction;
52 @property(readonly, nonatomic) CGFloat endFraction; 78 @property(readonly, nonatomic) CGFloat endFraction;
(...skipping 12 matching lines...) Expand all
65 91
66 @synthesize startFraction = startFraction_; 92 @synthesize startFraction = startFraction_;
67 @synthesize endFraction = endFraction_; 93 @synthesize endFraction = endFraction_;
68 94
69 - (id)initWithFraction:(CGFloat)toFraction 95 - (id)initWithFraction:(CGFloat)toFraction
70 fullDuration:(CGFloat)fullDuration 96 fullDuration:(CGFloat)fullDuration
71 animationCurve:(NSAnimationCurve)animationCurve 97 animationCurve:(NSAnimationCurve)animationCurve
72 controller:(PresentationModeController*)controller { 98 controller:(PresentationModeController*)controller {
73 // Calculate the effective duration, based on the current shown fraction. 99 // Calculate the effective duration, based on the current shown fraction.
74 DCHECK(controller); 100 DCHECK(controller);
75 CGFloat fromFraction = [controller floatingBarShownFraction]; 101 CGFloat fromFraction = controller.toolbarFraction;
76 CGFloat effectiveDuration = fabs(fullDuration * (fromFraction - toFraction)); 102 CGFloat effectiveDuration = fabs(fullDuration * (fromFraction - toFraction));
77 103
78 if ((self = [super gtm_initWithDuration:effectiveDuration 104 if ((self = [super gtm_initWithDuration:effectiveDuration
79 eventMask:NSLeftMouseDownMask 105 eventMask:NSLeftMouseDownMask
80 animationCurve:animationCurve])) { 106 animationCurve:animationCurve])) {
81 startFraction_ = fromFraction; 107 startFraction_ = fromFraction;
82 endFraction_ = toFraction; 108 endFraction_ = toFraction;
83 controller_ = controller; 109 controller_ = controller;
84 } 110 }
85 return self; 111 return self;
86 } 112 }
87 113
88 // Called once per animation step. Overridden to change the floating bar's 114 // Called once per animation step. Overridden to change the floating bar's
89 // position based on the animation's progress. 115 // position based on the animation's progress.
90 - (void)setCurrentProgress:(NSAnimationProgress)progress { 116 - (void)setCurrentProgress:(NSAnimationProgress)progress {
91 CGFloat fraction = 117 CGFloat fraction =
92 startFraction_ + (progress * (endFraction_ - startFraction_)); 118 startFraction_ + (progress * (endFraction_ - startFraction_));
93 [controller_ changeFloatingBarShownFraction:fraction]; 119 [controller_ changeToolbarFraction:fraction];
94 } 120 }
95 121
96 @end 122 @end
97 123
98 124
99 @interface PresentationModeController (PrivateMethods) 125 @interface PresentationModeController (PrivateMethods)
100 126
101 // Updates the visibility of the menu bar and the dock. 127 // Updates the visibility of the menu bar and the dock.
102 - (void)updateMenuBarAndDockVisibility; 128 - (void)updateMenuBarAndDockVisibility;
103 129
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 182
157 // Stops any running animations, removes tracking areas, etc. 183 // Stops any running animations, removes tracking areas, etc.
158 - (void)cleanup; 184 - (void)cleanup;
159 185
160 // Shows and hides the UI associated with this window being active (having main 186 // Shows and hides the UI associated with this window being active (having main
161 // status). This includes hiding the menu bar. These functions are called when 187 // status). This includes hiding the menu bar. These functions are called when
162 // the window gains or loses main status as well as in |-cleanup|. 188 // the window gains or loses main status as well as in |-cleanup|.
163 - (void)showActiveWindowUI; 189 - (void)showActiveWindowUI;
164 - (void)hideActiveWindowUI; 190 - (void)hideActiveWindowUI;
165 191
192 // In Immersive Fullscreen, the menubar is visible iff. toolbarFraction_ >=
193 // 1.0.
194 - (BOOL)shouldShowMenubarInImmersiveFullscreen;
195
166 @end 196 @end
167 197
168 198
169 @implementation PresentationModeController 199 @implementation PresentationModeController
170 200
171 @synthesize inPresentationMode = inPresentationMode_; 201 @synthesize inPresentationMode = inPresentationMode_;
202 @synthesize slidingStyle = slidingStyle_;
203 @synthesize toolbarFraction = toolbarFraction_;
172 204
173 - (id)initWithBrowserController:(BrowserWindowController*)controller { 205 - (id)initWithBrowserController:(BrowserWindowController*)controller
206 style:(fullscreen_mac::SlidingStyle)style {
174 if ((self = [super init])) { 207 if ((self = [super init])) {
175 browserController_ = controller; 208 browserController_ = controller;
176 systemFullscreenMode_ = base::mac::kFullScreenModeNormal; 209 systemFullscreenMode_ = base::mac::kFullScreenModeNormal;
210 slidingStyle_ = style;
177 } 211 }
178 212
179 // Let the world know what we're up to. 213 // Let the world know what we're up to.
180 [[NSNotificationCenter defaultCenter] 214 [[NSNotificationCenter defaultCenter]
181 postNotificationName:kWillEnterFullscreenNotification 215 postNotificationName:kWillEnterFullscreenNotification
182 object:nil]; 216 object:nil];
183 217
218 // Install the Carbon event handler for the undocumented menu bar show/hide
219 // event.
220 EventTypeSpec eventSpec = {kEventClassMenu, 2004};
221 InstallApplicationEventHandler(NewEventHandlerUPP(&MenuBarRevealHandler),
222 1,
223 &eventSpec,
224 self,
225 &menuBarTrackingHandler_);
184 return self; 226 return self;
185 } 227 }
186 228
187 - (void)dealloc { 229 - (void)dealloc {
230 RemoveEventHandler(menuBarTrackingHandler_);
188 DCHECK(!inPresentationMode_); 231 DCHECK(!inPresentationMode_);
189 DCHECK(!trackingArea_); 232 DCHECK(!trackingArea_);
190 [super dealloc]; 233 [super dealloc];
191 } 234 }
192 235
193 - (void)enterPresentationModeForContentView:(NSView*)contentView 236 - (void)enterPresentationModeForContentView:(NSView*)contentView
194 showDropdown:(BOOL)showDropdown { 237 showDropdown:(BOOL)showDropdown {
195 DCHECK(!inPresentationMode_); 238 DCHECK(!inPresentationMode_);
196 enteringPresentationMode_ = YES; 239 enteringPresentationMode_ = YES;
197 inPresentationMode_ = YES; 240 inPresentationMode_ = YES;
198 contentView_ = contentView; 241 contentView_ = contentView;
199 [self changeFloatingBarShownFraction:(showDropdown ? 1 : 0)]; 242 [self changeToolbarFraction:(showDropdown ? 1 : 0)];
243 [self updateMenuBarAndDockVisibility];
200 244
201 // Register for notifications. Self is removed as an observer in |-cleanup|. 245 // Register for notifications. Self is removed as an observer in |-cleanup|.
202 NSNotificationCenter* nc = [NSNotificationCenter defaultCenter]; 246 NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
203 NSWindow* window = [browserController_ window]; 247 NSWindow* window = [browserController_ window];
204 248
205 // Disable these notifications on Lion as they cause crashes. 249 // Disable these notifications on Lion as they cause crashes.
206 // TODO(rohitrao): Figure out what happens if a fullscreen window changes 250 // TODO(rohitrao): Figure out what happens if a fullscreen window changes
207 // monitors on Lion. 251 // monitors on Lion.
208 if (base::mac::IsOSSnowLeopard()) { 252 if (base::mac::IsOSSnowLeopard()) {
209 [nc addObserver:self 253 [nc addObserver:self
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 [self setupTrackingArea]; 339 [self setupTrackingArea];
296 } 340 }
297 341
298 - (void)ensureOverlayShownWithAnimation:(BOOL)animate delay:(BOOL)delay { 342 - (void)ensureOverlayShownWithAnimation:(BOOL)animate delay:(BOOL)delay {
299 if (!inPresentationMode_) 343 if (!inPresentationMode_)
300 return; 344 return;
301 345
302 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode)) 346 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode))
303 return; 347 return;
304 348
349 if (self.slidingStyle == fullscreen_mac::OMNIBOX_TABS_PRESENT)
350 return;
351
305 if (animate) { 352 if (animate) {
306 if (delay) { 353 if (delay) {
307 [self startShowTimer]; 354 [self startShowTimer];
308 } else { 355 } else {
309 [self cancelAllTimers]; 356 [self cancelAllTimers];
310 [self changeOverlayToFraction:1 withAnimation:YES]; 357 [self changeOverlayToFraction:1 withAnimation:YES];
311 } 358 }
312 } else { 359 } else {
313 DCHECK(!delay); 360 DCHECK(!delay);
314 [self cancelAllTimers]; 361 [self cancelAllTimers];
315 [self changeOverlayToFraction:1 withAnimation:NO]; 362 [self changeOverlayToFraction:1 withAnimation:NO];
316 } 363 }
317 } 364 }
318 365
319 - (void)ensureOverlayHiddenWithAnimation:(BOOL)animate delay:(BOOL)delay { 366 - (void)ensureOverlayHiddenWithAnimation:(BOOL)animate delay:(BOOL)delay {
320 if (!inPresentationMode_) 367 if (!inPresentationMode_)
321 return; 368 return;
322 369
370 if (self.slidingStyle == fullscreen_mac::OMNIBOX_TABS_PRESENT)
371 return;
372
323 if (animate) { 373 if (animate) {
324 if (delay) { 374 if (delay) {
325 [self startHideTimer]; 375 [self startHideTimer];
326 } else { 376 } else {
327 [self cancelAllTimers]; 377 [self cancelAllTimers];
328 [self changeOverlayToFraction:0 withAnimation:YES]; 378 [self changeOverlayToFraction:0 withAnimation:YES];
329 } 379 }
330 } else { 380 } else {
331 DCHECK(!delay); 381 DCHECK(!delay);
332 [self cancelAllTimers]; 382 [self cancelAllTimers];
333 [self changeOverlayToFraction:0 withAnimation:NO]; 383 [self changeOverlayToFraction:0 withAnimation:NO];
334 } 384 }
335 } 385 }
336 386
337 - (void)cancelAnimationAndTimers { 387 - (void)cancelAnimationAndTimers {
338 [self cancelAllTimers]; 388 [self cancelAllTimers];
339 [currentAnimation_ stopAnimation]; 389 [currentAnimation_ stopAnimation];
340 currentAnimation_.reset(); 390 currentAnimation_.reset();
341 } 391 }
342 392
343 - (CGFloat)floatingBarShownFraction {
344 return [browserController_ floatingBarShownFraction];
345 }
346
347 - (void)setSystemFullscreenModeTo:(base::mac::FullScreenMode)mode { 393 - (void)setSystemFullscreenModeTo:(base::mac::FullScreenMode)mode {
348 if (mode == systemFullscreenMode_) 394 if (mode == systemFullscreenMode_)
349 return; 395 return;
350 if (systemFullscreenMode_ == base::mac::kFullScreenModeNormal) 396 if (systemFullscreenMode_ == base::mac::kFullScreenModeNormal)
351 base::mac::RequestFullScreen(mode); 397 base::mac::RequestFullScreen(mode);
352 else if (mode == base::mac::kFullScreenModeNormal) 398 else if (mode == base::mac::kFullScreenModeNormal)
353 base::mac::ReleaseFullScreen(systemFullscreenMode_); 399 base::mac::ReleaseFullScreen(systemFullscreenMode_);
354 else 400 else
355 base::mac::SwitchFullScreenModes(systemFullscreenMode_, mode); 401 base::mac::SwitchFullScreenModes(systemFullscreenMode_, mode);
356 systemFullscreenMode_ = mode; 402 systemFullscreenMode_ = mode;
357 } 403 }
358 404
359 - (void)changeFloatingBarShownFraction:(CGFloat)fraction { 405 - (void)changeToolbarFraction:(CGFloat)fraction {
360 [browserController_ setFloatingBarShownFraction:fraction]; 406 toolbarFraction_ = fraction;
407 [browserController_ layoutSubviews];
361 408
362 [self updateMenuBarAndDockVisibility]; 409 // In AppKit fullscreen, moving the mouse to the top of the screen toggles
410 // menu visibility. Replicate the same effect for immersive fullscreen.
411 if ([browserController_ isInImmersiveFullscreen])
412 [self updateMenuBarAndDockVisibility];
413 }
414
415 // This method works, but is fragile.
416 //
417 // It gets used during view layout, which sometimes needs to be done at the
418 // beginning of an animation. As such, this method needs to reflect the
419 // menubarOffset expected at the end of the animation. This information is not
420 // readily available. (The layout logic needs a refactor).
421 //
422 // For AppKit Fullscreen, the menubar always starts hidden, and
423 // menubarFraction_ always starts at 0, so the logic happens to work. For
424 // Immersive Fullscreen, this class controls the visibility of the menu bar, so
425 // the logic is correct and not fragile.
426 - (CGFloat)menubarOffset {
427 if ([browserController_ isInAppKitFullscreen])
428 return -std::floor(menubarFraction_ * [self floatingBarVerticalOffset]);
429
430 return [self shouldShowMenubarInImmersiveFullscreen]
431 ? -[self floatingBarVerticalOffset]
432 : 0;
363 } 433 }
364 434
365 // Used to activate the floating bar in presentation mode. 435 // Used to activate the floating bar in presentation mode.
366 - (void)mouseEntered:(NSEvent*)event { 436 - (void)mouseEntered:(NSEvent*)event {
367 DCHECK(inPresentationMode_); 437 DCHECK(inPresentationMode_);
368 438
369 // Having gotten a mouse entered, we no longer need to do exit checks. 439 // Having gotten a mouse entered, we no longer need to do exit checks.
370 [self cancelMouseExitCheck]; 440 [self cancelMouseExitCheck];
371 441
372 NSTrackingArea* trackingArea = [event trackingArea]; 442 NSTrackingArea* trackingArea = [event trackingArea];
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 // |any updates that may have come while the animation was running. Install a 489 // |any updates that may have come while the animation was running. Install a
420 // new tracking area with these bounds. 490 // new tracking area with these bounds.
421 [self setupTrackingArea]; 491 [self setupTrackingArea];
422 492
423 // TODO(viettrungluu): Better would be to check during the animation; doing it 493 // TODO(viettrungluu): Better would be to check during the animation; doing it
424 // here means that the timing is slightly off. 494 // here means that the timing is slightly off.
425 if (![self mouseInsideTrackingRect]) 495 if (![self mouseInsideTrackingRect])
426 [self scheduleHideForMouse]; 496 [self scheduleHideForMouse];
427 } 497 }
428 498
499 - (void)setMenuBarRevealProgress:(CGFloat)progress {
500 menubarFraction_ = progress;
501
502 // If an animation is not running, then -layoutSubviews will not be called
503 // for each tick of the menu bar reveal. Do that manually.
504 // TODO(erikchen): The animation is janky. layoutSubviews need a refactor so
505 // that it calls setFrameOffset: instead of setFrame: if the frame's size has
506 // not changed.
507 if (!currentAnimation_.get())
508 [browserController_ layoutSubviews];
509 }
510
429 @end 511 @end
430 512
431 513
432 @implementation PresentationModeController (PrivateMethods) 514 @implementation PresentationModeController (PrivateMethods)
433 515
434 - (void)updateMenuBarAndDockVisibility { 516 - (void)updateMenuBarAndDockVisibility {
435 if (![[browserController_ window] isMainWindow] || 517 if (![[browserController_ window] isMainWindow] ||
436 ![browserController_ isInImmersiveFullscreen]) { 518 ![browserController_ isInImmersiveFullscreen]) {
437 [self setSystemFullscreenModeTo:base::mac::kFullScreenModeNormal]; 519 [self setSystemFullscreenModeTo:base::mac::kFullScreenModeNormal];
438 return; 520 return;
(...skipping 17 matching lines...) Expand all
456 return eachScreenShouldHaveMenuBar ?: [self isWindowOnPrimaryScreen]; 538 return eachScreenShouldHaveMenuBar ?: [self isWindowOnPrimaryScreen];
457 } 539 }
458 540
459 - (BOOL)isWindowOnPrimaryScreen { 541 - (BOOL)isWindowOnPrimaryScreen {
460 NSScreen* screen = [[browserController_ window] screen]; 542 NSScreen* screen = [[browserController_ window] screen];
461 NSScreen* primaryScreen = [[NSScreen screens] objectAtIndex:0]; 543 NSScreen* primaryScreen = [[NSScreen screens] objectAtIndex:0];
462 return (screen == primaryScreen); 544 return (screen == primaryScreen);
463 } 545 }
464 546
465 - (base::mac::FullScreenMode)desiredSystemFullscreenMode { 547 - (base::mac::FullScreenMode)desiredSystemFullscreenMode {
466 if ([browserController_ floatingBarShownFraction] >= 1.0) 548 if ([self shouldShowMenubarInImmersiveFullscreen])
467 return base::mac::kFullScreenModeHideDock; 549 return base::mac::kFullScreenModeHideDock;
468 return base::mac::kFullScreenModeHideAll; 550 return base::mac::kFullScreenModeHideAll;
469 } 551 }
470 552
471 - (void)changeOverlayToFraction:(CGFloat)fraction 553 - (void)changeOverlayToFraction:(CGFloat)fraction
472 withAnimation:(BOOL)animate { 554 withAnimation:(BOOL)animate {
473 // The non-animated case is really simple, so do it and return. 555 // The non-animated case is really simple, so do it and return.
474 if (!animate) { 556 if (!animate) {
475 [currentAnimation_ stopAnimation]; 557 [currentAnimation_ stopAnimation];
476 [self changeFloatingBarShownFraction:fraction]; 558 [self changeToolbarFraction:fraction];
477 return; 559 return;
478 } 560 }
479 561
480 // If we're already animating to the given fraction, then there's nothing more 562 // If we're already animating to the given fraction, then there's nothing more
481 // to do. 563 // to do.
482 if (currentAnimation_ && [currentAnimation_ endFraction] == fraction) 564 if (currentAnimation_ && [currentAnimation_ endFraction] == fraction)
483 return; 565 return;
484 566
485 // In all other cases, we want to cancel any running animation (which may be 567 // In all other cases, we want to cancel any running animation (which may be
486 // to show or to hide). 568 // to show or to hide).
487 [currentAnimation_ stopAnimation]; 569 [currentAnimation_ stopAnimation];
488 570
489 // Now, if it happens to already be in the right state, there's nothing more
490 // to do.
491 if ([browserController_ floatingBarShownFraction] == fraction)
492 return;
493
494 // Create the animation and set it up. 571 // Create the animation and set it up.
495 currentAnimation_.reset( 572 currentAnimation_.reset(
496 [[DropdownAnimation alloc] initWithFraction:fraction 573 [[DropdownAnimation alloc] initWithFraction:fraction
497 fullDuration:kDropdownAnimationDuration 574 fullDuration:kDropdownAnimationDuration
498 animationCurve:NSAnimationEaseOut 575 animationCurve:NSAnimationEaseOut
499 controller:self]); 576 controller:self]);
500 DCHECK(currentAnimation_); 577 DCHECK(currentAnimation_);
501 [currentAnimation_ setAnimationBlockingMode:NSAnimationNonblocking]; 578 [currentAnimation_ setAnimationBlockingMode:NSAnimationNonblocking];
502 [currentAnimation_ setDelegate:self]; 579 [currentAnimation_ setDelegate:self];
503 580
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 746
670 // TODO(rohitrao): Insert the Exit Fullscreen button. http://crbug.com/35956 747 // TODO(rohitrao): Insert the Exit Fullscreen button. http://crbug.com/35956
671 } 748 }
672 749
673 - (void)hideActiveWindowUI { 750 - (void)hideActiveWindowUI {
674 [self updateMenuBarAndDockVisibility]; 751 [self updateMenuBarAndDockVisibility];
675 752
676 // TODO(rohitrao): Remove the Exit Fullscreen button. http://crbug.com/35956 753 // TODO(rohitrao): Remove the Exit Fullscreen button. http://crbug.com/35956
677 } 754 }
678 755
756 - (BOOL)shouldShowMenubarInImmersiveFullscreen {
757 return toolbarFraction_ >= 1.0;
758 }
759
679 @end 760 @end
OLDNEW
« no previous file with comments | « chrome/browser/ui/cocoa/presentation_mode_controller.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698