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

Side by Side Diff: ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_utils.mm

Issue 2857123003: Move frame-related methods out of GoogleLandingViewController (Closed)
Patch Set: Fix the number of columns Created 3 years, 7 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
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_collectio n_utils.h"
6
7 #include "base/logging.h"
8 #import "ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_mos t_visited_item.h"
9 #import "ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_mos t_visited_tile.h"
10 #include "ios/chrome/browser/ui/ui_util.h"
11
12 #if !defined(__has_feature) || !__has_feature(objc_arc)
13 #error "This file requires ARC support."
14 #endif
15
16 namespace {
17 const CGFloat kMaxSearchFieldFrameMargin = 200;
18 const CGFloat kDoodleTopMarginIPadPortrait = 82;
19 const CGFloat kDoodleTopMarginIPadLandscape = 82;
20 const CGFloat kNTPSearchFieldBottomPadding = 16;
21
22 // Height for the doodle frame when Google is not the default search engine.
23 const CGFloat kNonGoogleSearchDoodleHeight = 60;
24 // Height for the header view on tablet when Google is not the default search
25 // engine.
26 const CGFloat kNonGoogleSearchHeaderHeightIPad = 10;
27
28 enum InterfaceOrientation {
29 ALL,
30 IPHONE_LANDSCAPE,
31 };
32 }
33
34 namespace content_suggestions {
35
36 CGRect getOrientationFrame(const CGRect frames[], CGFloat width) {
37 UIInterfaceOrientation orient =
marq (ping after 24h) 2017/05/04 08:15:00 Rather than having to have two variables that shou
gambard 2017/05/04 15:12:32 Done.
38 [[UIApplication sharedApplication] statusBarOrientation];
39 InterfaceOrientation inter_orient =
marq (ping after 24h) 2017/05/04 08:15:00 inter_orient -> orientation
gambard 2017/05/04 15:12:32 Done.
40 (IsIPadIdiom() || UIInterfaceOrientationIsPortrait(orient))
41 ? ALL
42 : IPHONE_LANDSCAPE;
43
44 // Calculate width based on screen width and origin x.
45 CGRect frame = frames[inter_orient];
marq (ping after 24h) 2017/05/04 08:15:00 Since this depends on ALL == 0, please add explici
gambard 2017/05/04 15:12:31 Done.
46 frame.size.width = fmax(width - 2 * frame.origin.x, 50);
47 return frame;
48 }
49
50 CGFloat leftMarginForWidth(CGFloat width) {
51 NSUInteger columns = [ContentSuggestionsMostVisitedCell
52 numberOfTilesForWidth:width -
53 2 * [ContentSuggestionsMostVisitedCell spacing]];
54 CGFloat whitespace =
55 width - columns * [ContentSuggestionsMostVisitedTile width] -
56 (columns - 1) * [ContentSuggestionsMostVisitedCell spacing];
57 CGFloat margin = AlignValueToPixel(whitespace / 2);
58 DCHECK(margin >= [ContentSuggestionsMostVisitedCell spacing]);
59 return margin;
60 }
61
62 CGRect doodleFrame(CGFloat width, BOOL logoIsShowing) {
63 const CGRect kDoodleFrame[2] = {
64 {{0, 66}, {0, 120}}, {{0, 56}, {0, 120}},
marq (ping after 24h) 2017/05/04 08:15:00 Please use CGRectMake instead of bare struct assig
gambard 2017/05/04 15:12:32 Done.
65 };
66 CGRect doodleFrame = getOrientationFrame(kDoodleFrame, width);
67 if (!IsIPadIdiom() && !logoIsShowing)
68 doodleFrame.size.height = kNonGoogleSearchDoodleHeight;
69 if (IsIPadIdiom()) {
70 doodleFrame.origin.y = IsPortrait() ? kDoodleTopMarginIPadPortrait
71 : kDoodleTopMarginIPadLandscape;
72 }
73 return doodleFrame;
74 }
75
76 CGRect searchFieldFrame(CGFloat width, BOOL logoIsShowing) {
77 CGFloat y = CGRectGetMaxY(doodleFrame(width, logoIsShowing));
78 CGFloat leftMargin = leftMarginForWidth(width);
79 if (leftMargin > kMaxSearchFieldFrameMargin)
80 leftMargin = kMaxSearchFieldFrameMargin;
81 const CGRect kSearchFieldFrame[2] = {
82 {{leftMargin, y + 32}, {0, 50}}, {{leftMargin, y + 16}, {0, 50}},
marq (ping after 24h) 2017/05/04 08:15:00 CGRectMake.
gambard 2017/05/04 15:12:32 Done.
83 };
marq (ping after 24h) 2017/05/04 08:15:00 This seems like it's broken for RTL? If we don't c
gambard 2017/05/04 15:12:32 The "leftMargin" name was misleading. I corrected
84 CGRect searchFieldFrame = getOrientationFrame(kSearchFieldFrame, width);
85 if (IsIPadIdiom()) {
86 CGFloat iPadTopMargin = IsPortrait() ? kDoodleTopMarginIPadPortrait
87 : kDoodleTopMarginIPadLandscape;
88 searchFieldFrame.origin.y += iPadTopMargin - 32;
89 }
90 return searchFieldFrame;
91 }
92
93 CGFloat heightForLogoHeader(CGFloat width,
94 BOOL logoIsShowing,
95 BOOL promoCanShow) {
96 CGFloat headerHeight = CGRectGetMaxY(searchFieldFrame(width, logoIsShowing)) +
97 kNTPSearchFieldBottomPadding;
98 if (IsIPadIdiom()) {
99 if (logoIsShowing) {
100 if (!promoCanShow) {
101 UIInterfaceOrientation orient =
102 [[UIApplication sharedApplication] statusBarOrientation];
103 const CGFloat kTopSpacingMaterialPortrait = 56;
104 const CGFloat kTopSpacingMaterialLandscape = 32;
105 headerHeight += UIInterfaceOrientationIsPortrait(orient)
106 ? kTopSpacingMaterialPortrait
107 : kTopSpacingMaterialLandscape;
108 }
109 } else {
110 headerHeight = kNonGoogleSearchHeaderHeightIPad;
111 }
112 }
113 return headerHeight;
marq (ping after 24h) 2017/05/04 08:15:00 Maybe un-nest some of the conditionals here for cl
gambard 2017/05/04 15:12:32 Done.
114 }
115
116 } // namespace content_suggestions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698