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

Side by Side Diff: ios/chrome/browser/ui/first_run/welcome_to_chrome_view.mm

Issue 2914013002: Fix spacing on welcome screen for small screen (iPhone 4) (Closed)
Patch Set: more concise Created 3 years, 6 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 | « no previous file | 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "ios/chrome/browser/ui/first_run/welcome_to_chrome_view.h" 5 #import "ios/chrome/browser/ui/first_run/welcome_to_chrome_view.h"
6 6
7 #include "base/i18n/rtl.h" 7 #include "base/i18n/rtl.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/strings/sys_string_conversions.h" 9 #include "base/strings/sys_string_conversions.h"
10 #import "ios/chrome/browser/ui/UIView+SizeClassSupport.h" 10 #import "ios/chrome/browser/ui/UIView+SizeClassSupport.h"
(...skipping 27 matching lines...) Expand all
38 // The width of the container view for a REGULAR width size class. 38 // The width of the container view for a REGULAR width size class.
39 const CGFloat kContainerViewRegularWidth = 510.0; 39 const CGFloat kContainerViewRegularWidth = 510.0;
40 40
41 // The percentage of the view's width taken up by the container view for a 41 // The percentage of the view's width taken up by the container view for a
42 // COMPACT width size class. 42 // COMPACT width size class.
43 const CGFloat kContainerViewCompactWidthPercentage = 0.8; 43 const CGFloat kContainerViewCompactWidthPercentage = 0.8;
44 44
45 // Layout constants. 45 // Layout constants.
46 const CGFloat kImageTopPadding[SIZE_CLASS_COUNT] = {32.0, 50.0}; 46 const CGFloat kImageTopPadding[SIZE_CLASS_COUNT] = {32.0, 50.0};
47 const CGFloat kTOSLabelTopPadding[SIZE_CLASS_COUNT] = {34.0, 40.0}; 47 const CGFloat kTOSLabelTopPadding[SIZE_CLASS_COUNT] = {34.0, 40.0};
48 const CGFloat kOptInLabelTopPadding[SIZE_CLASS_COUNT] = {10.0, 14.0}; 48 const CGFloat kOptInLabelPadding[SIZE_CLASS_COUNT] = {10.0, 14.0};
49 const CGFloat kCheckBoxPadding[SIZE_CLASS_COUNT] = {10.0, 16.0}; 49 const CGFloat kCheckBoxPadding[SIZE_CLASS_COUNT] = {10.0, 16.0};
50 const CGFloat kOKButtonBottomPadding[SIZE_CLASS_COUNT] = {32.0, 32.0}; 50 const CGFloat kOKButtonBottomPadding[SIZE_CLASS_COUNT] = {32.0, 32.0};
51 const CGFloat kOKButtonHeight[SIZE_CLASS_COUNT] = {36.0, 54.0}; 51 const CGFloat kOKButtonHeight[SIZE_CLASS_COUNT] = {36.0, 54.0};
52 // Multiplier matches that used in LaunchScreen.xib to determine size of logo. 52 // Multiplier matches that used in LaunchScreen.xib to determine size of logo.
53 const CGFloat kAppLogoProportionMultiplier = 0.381966; 53 const CGFloat kAppLogoProportionMultiplier = 0.381966;
54 54
55 // Font sizes. 55 // Font sizes.
56 const CGFloat kTitleLabelFontSize[SIZE_CLASS_COUNT] = {24.0, 36.0}; 56 const CGFloat kTitleLabelFontSize[SIZE_CLASS_COUNT] = {24.0, 36.0};
57 const CGFloat kTOSLabelFontSize[SIZE_CLASS_COUNT] = {14.0, 21.0}; 57 const CGFloat kTOSLabelFontSize[SIZE_CLASS_COUNT] = {14.0, 21.0};
58 const CGFloat kTOSLabelLineHeight[SIZE_CLASS_COUNT] = {20.0, 32.0}; 58 const CGFloat kTOSLabelLineHeight[SIZE_CLASS_COUNT] = {20.0, 32.0};
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 [self configureSubviews]; 319 [self configureSubviews];
320 } 320 }
321 321
322 - (void)layoutSubviews { 322 - (void)layoutSubviews {
323 [super layoutSubviews]; 323 [super layoutSubviews];
324 [self layoutTitleLabel]; 324 [self layoutTitleLabel];
325 [self layoutImageView]; 325 [self layoutImageView];
326 [self layoutTOSLabel]; 326 [self layoutTOSLabel];
327 [self layoutOptInLabel]; 327 [self layoutOptInLabel];
328 [self layoutCheckBoxButton]; 328 [self layoutCheckBoxButton];
329 // The OK Button must be laid out before the container view so that the
330 // container view can take its position into account.
331 [self layoutOKButton];
329 [self layoutContainerView]; 332 [self layoutContainerView];
330 [self layoutOKButton];
331 } 333 }
332 334
333 - (void)layoutTitleLabel { 335 - (void)layoutTitleLabel {
334 // The label is centered and top-aligned with the container view. 336 // The label is centered and top-aligned with the container view.
335 CGSize containerSize = self.containerView.bounds.size; 337 CGSize containerSize = self.containerView.bounds.size;
336 containerSize.height = CGFLOAT_MAX; 338 containerSize.height = CGFLOAT_MAX;
337 CGSize titleLabelSize = [self.titleLabel sizeThatFits:containerSize]; 339 CGSize titleLabelSize = [self.titleLabel sizeThatFits:containerSize];
338 self.titleLabel.frame = AlignRectOriginAndSizeToPixels( 340 self.titleLabel.frame = AlignRectOriginAndSizeToPixels(
339 CGRectMake((containerSize.width - titleLabelSize.width) / 2.0, 0.0, 341 CGRectMake((containerSize.width - titleLabelSize.width) / 2.0, 0.0,
340 titleLabelSize.width, titleLabelSize.height)); 342 titleLabelSize.width, titleLabelSize.height));
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 CGSize TOSLabelSize = [self.TOSLabel sizeThatFits:containerSize]; 393 CGSize TOSLabelSize = [self.TOSLabel sizeThatFits:containerSize];
392 CGFloat TOSLabelTopPadding = kTOSLabelTopPadding[self.cr_heightSizeClass]; 394 CGFloat TOSLabelTopPadding = kTOSLabelTopPadding[self.cr_heightSizeClass];
393 self.TOSLabel.frame = AlignRectOriginAndSizeToPixels( 395 self.TOSLabel.frame = AlignRectOriginAndSizeToPixels(
394 CGRectMake((containerSize.width - TOSLabelSize.width) / 2.0, 396 CGRectMake((containerSize.width - TOSLabelSize.width) / 2.0,
395 CGRectGetMaxY(self.imageView.frame) + TOSLabelTopPadding, 397 CGRectGetMaxY(self.imageView.frame) + TOSLabelTopPadding,
396 TOSLabelSize.width, TOSLabelSize.height)); 398 TOSLabelSize.width, TOSLabelSize.height));
397 } 399 }
398 400
399 - (void)layoutOptInLabel { 401 - (void)layoutOptInLabel {
400 // The opt in label is laid out to the right (or left in RTL) of the check box 402 // The opt in label is laid out to the right (or left in RTL) of the check box
401 // button and below |TOSLabel| as specified by kOptInLabelTopPadding. 403 // button and below |TOSLabel| as specified by kOptInLabelPadding.
402 CGSize checkBoxSize = 404 CGSize checkBoxSize =
403 [self.checkBoxButton imageForState:self.checkBoxButton.state].size; 405 [self.checkBoxButton imageForState:self.checkBoxButton.state].size;
404 CGFloat checkBoxPadding = kCheckBoxPadding[self.cr_widthSizeClass]; 406 CGFloat checkBoxPadding = kCheckBoxPadding[self.cr_widthSizeClass];
405 CGFloat optInLabelSidePadding = checkBoxSize.width + 2.0 * checkBoxPadding; 407 CGFloat optInLabelSidePadding = checkBoxSize.width + 2.0 * checkBoxPadding;
406 CGSize optInLabelSize = [self.optInLabel 408 CGSize optInLabelSize = [self.optInLabel
407 sizeThatFits:CGSizeMake(CGRectGetWidth(self.containerView.bounds) - 409 sizeThatFits:CGSizeMake(CGRectGetWidth(self.containerView.bounds) -
408 optInLabelSidePadding, 410 optInLabelSidePadding,
409 CGFLOAT_MAX)]; 411 CGFLOAT_MAX)];
410 CGFloat optInLabelTopPadding = kOptInLabelTopPadding[self.cr_heightSizeClass]; 412 CGFloat optInLabelTopPadding = kOptInLabelPadding[self.cr_heightSizeClass];
411 CGFloat optInLabelOriginX = 413 CGFloat optInLabelOriginX =
412 base::i18n::IsRTL() ? 0.0f : optInLabelSidePadding; 414 base::i18n::IsRTL() ? 0.0f : optInLabelSidePadding;
413 self.optInLabel.frame = AlignRectOriginAndSizeToPixels( 415 self.optInLabel.frame = AlignRectOriginAndSizeToPixels(
414 CGRectMake(optInLabelOriginX, 416 CGRectMake(optInLabelOriginX,
415 CGRectGetMaxY(self.TOSLabel.frame) + optInLabelTopPadding, 417 CGRectGetMaxY(self.TOSLabel.frame) + optInLabelTopPadding,
416 optInLabelSize.width, optInLabelSize.height)); 418 optInLabelSize.width, optInLabelSize.height));
417 ios_internal::FixOrphanWord(self.optInLabel); 419 ios_internal::FixOrphanWord(self.optInLabel);
418 } 420 }
419 421
420 - (void)layoutCheckBoxButton { 422 - (void)layoutCheckBoxButton {
(...skipping 19 matching lines...) Expand all
440 self.checkBoxButton.imageEdgeInsets = UIEdgeInsetsMake( 442 self.checkBoxButton.imageEdgeInsets = UIEdgeInsetsMake(
441 (checkBoxButtonSize.height - checkBoxSize.height) / 2.0, 443 (checkBoxButtonSize.height - checkBoxSize.height) / 2.0,
442 base::i18n::IsRTL() ? largeHorizontalInset : smallHorizontalInset, 444 base::i18n::IsRTL() ? largeHorizontalInset : smallHorizontalInset,
443 (checkBoxButtonSize.height - checkBoxSize.height) / 2.0, 445 (checkBoxButtonSize.height - checkBoxSize.height) / 2.0,
444 base::i18n::IsRTL() ? smallHorizontalInset : largeHorizontalInset); 446 base::i18n::IsRTL() ? smallHorizontalInset : largeHorizontalInset);
445 } 447 }
446 448
447 - (void)layoutContainerView { 449 - (void)layoutContainerView {
448 // The container view is resized according to the final layout of 450 // The container view is resized according to the final layout of
449 // |checkBoxButton|, which is its lowest subview. The resized view is then 451 // |checkBoxButton|, which is its lowest subview. The resized view is then
450 // centered horizontally and vertically. 452 // centered horizontally and vertically. If necessary, it is shifted up to
453 // allow |kOptInLabelPadding| between |optInLabel| and |OKButton|.
451 CGSize containerViewSize = self.containerView.bounds.size; 454 CGSize containerViewSize = self.containerView.bounds.size;
452 containerViewSize.height = CGRectGetMaxY(self.checkBoxButton.frame); 455 containerViewSize.height = CGRectGetMaxY(self.checkBoxButton.frame);
456
457 CGFloat padding = kOptInLabelPadding[self.cr_heightSizeClass];
458 CGFloat originY = fmin(
459 (CGRectGetHeight(self.bounds) - containerViewSize.height) / 2.0,
460 CGRectGetMinY(self.OKButton.frame) - padding - containerViewSize.height);
461
453 self.containerView.frame = AlignRectOriginAndSizeToPixels(CGRectMake( 462 self.containerView.frame = AlignRectOriginAndSizeToPixels(CGRectMake(
454 (CGRectGetWidth(self.bounds) - containerViewSize.width) / 2.0, 463 (CGRectGetWidth(self.bounds) - containerViewSize.width) / 2.0, originY,
455 (CGRectGetHeight(self.bounds) - containerViewSize.height) / 2.0,
456 containerViewSize.width, CGRectGetMaxY(self.checkBoxButton.frame))); 464 containerViewSize.width, CGRectGetMaxY(self.checkBoxButton.frame)));
457 } 465 }
458 466
459 - (void)layoutOKButton { 467 - (void)layoutOKButton {
460 // The OK button is laid out at the bottom of the view as specified by 468 // The OK button is laid out at the bottom of the view as specified by
461 // kOKButtonBottomPadding. 469 // kOKButtonBottomPadding.
462 CGFloat OKButtonBottomPadding = 470 CGFloat OKButtonBottomPadding =
463 kOKButtonBottomPadding[self.cr_widthSizeClass]; 471 kOKButtonBottomPadding[self.cr_widthSizeClass];
464 CGSize OKButtonSize = self.OKButton.bounds.size; 472 CGSize OKButtonSize = self.OKButton.bounds.size;
465 self.OKButton.frame = AlignRectOriginAndSizeToPixels(CGRectMake( 473 self.OKButton.frame = AlignRectOriginAndSizeToPixels(CGRectMake(
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 552
545 - (void)OKButtonWasTapped { 553 - (void)OKButtonWasTapped {
546 [self.delegate welcomeToChromeViewDidTapOKButton:self]; 554 [self.delegate welcomeToChromeViewDidTapOKButton:self];
547 } 555 }
548 556
549 - (void)TOSLinkWasTapped { 557 - (void)TOSLinkWasTapped {
550 [self.delegate welcomeToChromeViewDidTapTOSLink:self]; 558 [self.delegate welcomeToChromeViewDidTapTOSLink:self];
551 } 559 }
552 560
553 @end 561 @end
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698