Index: chrome/browser/ui/cocoa/autofill/autofill_dialog_window_controller.mm |
diff --git a/chrome/browser/ui/cocoa/autofill/autofill_dialog_window_controller.mm b/chrome/browser/ui/cocoa/autofill/autofill_dialog_window_controller.mm |
index 105da18bf96cd565d1db4eb256d74f5a559e3cfe..9dfaa1d7efff7bb0f97d8dc3844ba4cc549ac970 100644 |
--- a/chrome/browser/ui/cocoa/autofill/autofill_dialog_window_controller.mm |
+++ b/chrome/browser/ui/cocoa/autofill/autofill_dialog_window_controller.mm |
@@ -9,9 +9,9 @@ |
#include "base/strings/sys_string_conversions.h" |
#include "chrome/browser/ui/autofill/autofill_dialog_view_delegate.h" |
#include "chrome/browser/ui/chrome_style.h" |
-#import "chrome/browser/ui/cocoa/autofill/autofill_account_chooser.h" |
#include "chrome/browser/ui/cocoa/autofill/autofill_dialog_cocoa.h" |
#include "chrome/browser/ui/cocoa/autofill/autofill_dialog_constants.h" |
+#import "chrome/browser/ui/cocoa/autofill/autofill_header.h" |
#import "chrome/browser/ui/cocoa/autofill/autofill_input_field.h" |
#import "chrome/browser/ui/cocoa/autofill/autofill_loading_shield_controller.h" |
#import "chrome/browser/ui/cocoa/autofill/autofill_main_container.h" |
@@ -28,14 +28,9 @@ |
#include "ui/base/l10n/l10n_util.h" |
namespace { |
-const CGFloat kAccountChooserHeight = 20.0; |
+ |
const CGFloat kMinimumContentsHeight = 101; |
-// Height of all decorations & paddings on main dialog together. |
-const CGFloat kDecorationHeight = kAccountChooserHeight + |
- autofill::kDetailVerticalPadding + |
- chrome_style::kClientBottomPadding + |
- chrome_style::kTitleTopPadding; |
} // namespace |
#pragma mark Field Editor |
@@ -107,7 +102,7 @@ const CGFloat kDecorationHeight = kAccountChooserHeight + |
@implementation AutofillDialogWindowController |
- (id)initWithWebContents:(content::WebContents*)webContents |
- autofillDialog:(autofill::AutofillDialogCocoa*)autofillDialog { |
+ dialog:(autofill::AutofillDialogCocoa*)dialog { |
DCHECK(webContents); |
base::scoped_nsobject<ConstrainedWindowCustomWindow> window( |
@@ -117,38 +112,26 @@ const CGFloat kDecorationHeight = kAccountChooserHeight + |
if ((self = [super initWithWindow:window])) { |
[window setDelegate:self]; |
webContents_ = webContents; |
- autofillDialog_ = autofillDialog; |
+ dialog_ = dialog; |
+ |
+ header_.reset([[AutofillHeader alloc] initWithDelegate:dialog->delegate()]); |
mainContainer_.reset([[AutofillMainContainer alloc] |
- initWithDelegate:autofillDialog->delegate()]); |
+ initWithDelegate:dialog->delegate()]); |
[mainContainer_ setTarget:self]; |
signInContainer_.reset( |
- [[AutofillSignInContainer alloc] initWithDialog:autofillDialog]); |
+ [[AutofillSignInContainer alloc] initWithDialog:dialog]); |
[[signInContainer_ view] setHidden:YES]; |
- // Set dialog title. |
- titleTextField_.reset([[NSTextField alloc] initWithFrame:NSZeroRect]); |
- [titleTextField_ setEditable:NO]; |
- [titleTextField_ setBordered:NO]; |
- [titleTextField_ setDrawsBackground:NO]; |
- [titleTextField_ setFont:[NSFont systemFontOfSize:15.0]]; |
- [titleTextField_ setStringValue: |
- base::SysUTF16ToNSString(autofillDialog->delegate()->DialogTitle())]; |
- [titleTextField_ sizeToFit]; |
- |
- accountChooser_.reset([[AutofillAccountChooser alloc] |
- initWithFrame:NSZeroRect |
- delegate:autofillDialog->delegate()]); |
- |
loadingShieldController_.reset( |
- [[AutofillLoadingShieldController alloc] |
- initWithDelegate:autofillDialog->delegate()]); |
+ [[AutofillLoadingShieldController alloc] initWithDelegate: |
+ dialog->delegate()]); |
[[loadingShieldController_ view] setHidden:YES]; |
overlayController_.reset( |
[[AutofillOverlayController alloc] initWithDelegate: |
- autofillDialog->delegate()]); |
+ dialog->delegate()]); |
[[overlayController_ view] setHidden:YES]; |
// This needs a flipped content view because otherwise the size |
@@ -158,8 +141,7 @@ const CGFloat kDecorationHeight = kAccountChooserHeight + |
[[FlippedView alloc] initWithFrame: |
[[[self window] contentView] frame]]); |
[flippedContentView setSubviews: |
- @[accountChooser_, |
- titleTextField_, |
+ @[[header_ view], |
[mainContainer_ view], |
[signInContainer_ view], |
[loadingShieldController_ view], |
@@ -167,7 +149,7 @@ const CGFloat kDecorationHeight = kAccountChooserHeight + |
[flippedContentView setAutoresizingMask: |
(NSViewWidthSizable | NSViewHeightSizable)]; |
[[[self window] contentView] addSubview:flippedContentView]; |
- [mainContainer_ setAnchorView:[[accountChooser_ subviews] objectAtIndex:1]]; |
+ [mainContainer_ setAnchorView:[header_ anchorView]]; |
} |
return self; |
} |
@@ -189,8 +171,10 @@ const CGFloat kDecorationHeight = kAccountChooserHeight + |
- (void)updateSignInSizeConstraints { |
// Adjust for the size of all decorations and paddings outside main content. |
- CGFloat minHeight = kMinimumContentsHeight - kDecorationHeight; |
- CGFloat maxHeight = std::max([self maxHeight] - kDecorationHeight, minHeight); |
+ CGFloat decorationHeight = |
+ [[header_ view] frame].size.height + chrome_style::kClientBottomPadding; |
+ CGFloat minHeight = kMinimumContentsHeight - decorationHeight; |
+ CGFloat maxHeight = std::max([self maxHeight] - decorationHeight, minHeight); |
CGFloat width = NSWidth([[[self window] contentView] frame]); |
[signInContainer_ constrainSizeToMinimum:NSMakeSize(width, minHeight) |
@@ -226,8 +210,10 @@ const CGFloat kDecorationHeight = kAccountChooserHeight + |
else |
size = [signInContainer_ preferredSize]; |
- // Always make room for the header. |
- size.height += kDecorationHeight; |
+ // Always make room for the header and bottom padding. |
+ size.height += |
+ [header_ heightForWidth:size.width] + |
+ chrome_style::kClientBottomPadding; |
} |
// Show as much of the main view as is possible without going past the |
@@ -241,33 +227,15 @@ const CGFloat kDecorationHeight = kAccountChooserHeight + |
NSRect contentRect = NSZeroRect; |
contentRect.size = [self preferredSize]; |
NSRect clientRect = contentRect; |
- clientRect.origin.y = chrome_style::kTitleTopPadding; |
- clientRect.size.height -= chrome_style::kTitleTopPadding + |
- chrome_style::kClientBottomPadding; |
- |
- [titleTextField_ setStringValue: |
- base::SysUTF16ToNSString(autofillDialog_->delegate()->DialogTitle())]; |
- [titleTextField_ sizeToFit]; |
- |
- NSRect headerRect, mainRect, titleRect, dummyRect; |
- NSDivideRect(clientRect, &headerRect, &mainRect, |
- kAccountChooserHeight, NSMinYEdge); |
- NSDivideRect(mainRect, &dummyRect, &mainRect, |
- autofill::kDetailVerticalPadding, NSMinYEdge); |
- headerRect = NSInsetRect(headerRect, chrome_style::kHorizontalPadding, 0); |
- NSDivideRect(headerRect, &titleRect, &headerRect, |
- NSWidth([titleTextField_ frame]), NSMinXEdge); |
- |
- // Align baseline of title with bottom of accountChooser. |
- base::scoped_nsobject<NSLayoutManager> layout_manager( |
- [[NSLayoutManager alloc] init]); |
- NSFont* titleFont = [titleTextField_ font]; |
- titleRect.origin.y += NSHeight(titleRect) - |
- [layout_manager defaultBaselineOffsetForFont:titleFont]; |
- [titleTextField_ setFrame:titleRect]; |
- |
- [accountChooser_ setFrame:headerRect]; |
- [accountChooser_ performLayout]; |
+ clientRect.size.height -= chrome_style::kClientBottomPadding; |
+ |
+ CGFloat headerHeight = [header_ heightForWidth:NSWidth(clientRect)]; |
+ NSRect headerRect, mainRect; |
+ NSDivideRect(clientRect, &headerRect, &mainRect, headerHeight, NSMinYEdge); |
+ |
+ [[header_ view] setFrame:headerRect]; |
+ [header_ performLayout]; |
+ |
if ([[signInContainer_ view] isHidden]) { |
[[mainContainer_ view] setFrame:mainRect]; |
[mainContainer_ performLayout]; |
@@ -288,14 +256,14 @@ const CGFloat kDecorationHeight = kAccountChooserHeight + |
- (IBAction)accept:(id)sender { |
if ([mainContainer_ validate]) |
- autofillDialog_->delegate()->OnAccept(); |
+ dialog_->delegate()->OnAccept(); |
else |
[mainContainer_ makeFirstInvalidInputFirstResponder]; |
} |
- (IBAction)cancel:(id)sender { |
- autofillDialog_->delegate()->OnCancel(); |
- autofillDialog_->PerformClose(); |
+ dialog_->delegate()->OnCancel(); |
+ dialog_->PerformClose(); |
} |
- (void)show { |
@@ -316,8 +284,8 @@ const CGFloat kDecorationHeight = kAccountChooserHeight + |
} |
- (void)hide { |
- autofillDialog_->delegate()->OnCancel(); |
- autofillDialog_->PerformClose(); |
+ dialog_->delegate()->OnCancel(); |
+ dialog_->PerformClose(); |
} |
- (void)updateNotificationArea { |
@@ -325,7 +293,7 @@ const CGFloat kDecorationHeight = kAccountChooserHeight + |
} |
- (void)updateAccountChooser { |
- [accountChooser_ update]; |
+ [header_ update]; |
[mainContainer_ updateLegalDocuments]; |
// For the duration of the loading shield, hide the main contents. |
@@ -342,7 +310,7 @@ const CGFloat kDecorationHeight = kAccountChooserHeight + |
// to remember previous state, because the overlay view is always the last |
// state of the dialog. |
[overlayController_ updateState]; |
- [accountChooser_ setHidden:![[overlayController_ view] isHidden]]; |
+ [[header_ view] setHidden:![[overlayController_ view] isHidden]]; |
[[mainContainer_ view] setHidden:![[overlayController_ view] isHidden]]; |
} |