Chromium Code Reviews| Index: chrome/browser/ui/cocoa/intents/web_intent_picker_view_controller.mm |
| diff --git a/chrome/browser/ui/cocoa/intents/web_intent_picker_view_controller.mm b/chrome/browser/ui/cocoa/intents/web_intent_picker_view_controller.mm |
| index 2109be6c98fa0fd16d810b4d374b2ac9796db64d..2270f6d125301c4036a8c64ffc1390cc52719eef 100644 |
| --- a/chrome/browser/ui/cocoa/intents/web_intent_picker_view_controller.mm |
| +++ b/chrome/browser/ui/cocoa/intents/web_intent_picker_view_controller.mm |
| @@ -27,7 +27,8 @@ |
| @interface WebIntentPickerViewController () |
| -- (void)performLayout; |
| +- (void)performLayoutWithOldViewController: |
| + (WebIntentViewController*)oldViewController; |
| // Gets the view controller currently being displayed. |
| - (WebIntentViewController*)currentViewController; |
| - (WebIntentPickerState)newPickerState; |
| @@ -63,6 +64,7 @@ |
| scoped_nsobject<NSView> view( |
| [[FlippedView alloc] initWithFrame:ui::kWindowSizeDeterminedLater]); |
| + [view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; |
| [self setView:view]; |
| closeButton_.reset([[HoverCloseButton alloc] initWithFrame:NSZeroRect]); |
| @@ -134,15 +136,10 @@ |
| return; |
| WebIntentPickerState newState = [self newPickerState]; |
| - NSView* currentView = [[self currentViewController] view]; |
| - if (state_ != newState || ![currentView superview]) { |
| - [currentView removeFromSuperview]; |
| - // Clear the inline webview. |
| - [inlineServiceViewController_ setServiceURL:GURL::EmptyGURL()]; |
| - [extensionPromptViewController_ clear]; |
| + WebIntentViewController* oldViewController = [self currentViewController]; |
| + if (state_ != newState || ![[oldViewController view] superview]) { |
| state_ = newState; |
| - currentView = [[self currentViewController] view]; |
| - [[self view] addSubview:currentView]; |
| + [[self view] addSubview:[[self currentViewController] view]]; |
| // Ensure that the close button is topmost. |
| [closeButton_ removeFromSuperview]; |
| @@ -170,15 +167,18 @@ |
| break; |
| } |
| - [self performLayout]; |
| + [self performLayoutWithOldViewController:oldViewController]; |
| } |
| -- (void)performLayout { |
| +- (void)performLayoutWithOldViewController: |
| + (WebIntentViewController*)oldViewController { |
| WebIntentViewController* viewController = [self currentViewController]; |
| [viewController sizeToFitAndLayout]; |
| [[viewController view] setFrameOrigin:NSZeroPoint]; |
| NSRect bounds = [[viewController view] bounds]; |
| + NSWindow* window = [[self view] window]; |
| + NSRect windowFrame = [window frameRectForContentRect:bounds]; |
| NSRect closeFrame; |
| closeFrame.size.width = ConstrainedWindow::GetCloseButtonSize(); |
| @@ -186,12 +186,43 @@ |
| closeFrame.origin.x = NSMaxX(bounds) - NSWidth(closeFrame) - |
| ConstrainedWindowConstants::kCloseButtonPadding; |
| closeFrame.origin.y = ConstrainedWindowConstants::kCloseButtonPadding; |
| - [closeButton_ setFrame:closeFrame]; |
| - [[self view] setFrame:bounds]; |
| + if (oldViewController) { |
| + scoped_nsobject<NSMutableArray> array([[NSMutableArray alloc] init]); |
| + if (oldViewController && ![oldViewController isEqual:viewController]) { |
| + [array addObject:@{ |
| + NSViewAnimationTargetKey: [viewController view], |
| + NSViewAnimationEffectKey: NSViewAnimationFadeInEffect |
| + }]; |
| + [array addObject:@{ |
| + NSViewAnimationTargetKey: [oldViewController view], |
| + NSViewAnimationEffectKey: NSViewAnimationFadeOutEffect |
| + }]; |
| + } |
| + [array addObject:@{ |
| + NSViewAnimationTargetKey: window, |
|
Robert Sesek
2012/10/22 17:47:29
nit: align values, and on line 207
sail
2012/10/22 17:54:45
Done.
|
| + NSViewAnimationEndFrameKey: [NSValue valueWithRect:windowFrame] |
| + }]; |
| + [array addObject:@{ |
| + NSViewAnimationTargetKey: closeButton_, |
| + NSViewAnimationEndFrameKey: [NSValue valueWithRect:closeFrame] |
| + }]; |
| + |
| + scoped_nsobject<NSViewAnimation> animation( |
| + [[NSViewAnimation alloc] initWithViewAnimations:array]); |
| + [animation setAnimationBlockingMode:NSAnimationBlocking]; |
| + [animation setDuration:0.2]; |
| + [animation startAnimation]; |
| + } else { |
| + [window setFrame:windowFrame display:YES]; |
| + [[self view] setFrame:bounds]; |
| + [closeButton_ setFrame:closeFrame]; |
| + } |
| - NSWindow* window = [[self view] window]; |
| - [window setFrame:[window frameRectForContentRect:bounds] display:YES]; |
| + if (oldViewController && ![oldViewController isEqual:viewController]) { |
| + [[oldViewController view] removeFromSuperview]; |
| + [oldViewController viewRemovedFromSuperview]; |
| + } |
| } |
| - (WebIntentViewController*)currentViewController { |