Chromium Code Reviews| Index: chrome/browser/ui/cocoa/omnibox/omnibox_popup_cell.mm |
| diff --git a/chrome/browser/ui/cocoa/omnibox/omnibox_popup_cell.mm b/chrome/browser/ui/cocoa/omnibox/omnibox_popup_cell.mm |
| index a41858a5db1156096b72a0cae272bd888bf6b149..68d6a337c52eb177dcbf069605343954756c82bd 100644 |
| --- a/chrome/browser/ui/cocoa/omnibox/omnibox_popup_cell.mm |
| +++ b/chrome/browser/ui/cocoa/omnibox/omnibox_popup_cell.mm |
| @@ -9,6 +9,7 @@ |
| #include <algorithm> |
| #include <cmath> |
| +#include "base/feature_list.h" |
| #include "base/i18n/rtl.h" |
| #include "base/mac/foundation_util.h" |
| #include "base/mac/objc_property_releaser.h" |
| @@ -40,10 +41,12 @@ constexpr CGFloat kMaterialTextStartOffset = 27.0; |
| constexpr CGFloat kMaterialImageXOffset = 6.0; |
| +constexpr CGFloat kDefaultVerticalMargin = 3.0; |
| + |
| +constexpr CGFloat kDefaultTextHeight = 19; |
| + |
| // Returns the margin that should appear at the top and bottom of the result. |
| CGFloat GetVerticalMargin() { |
| - constexpr CGFloat kDefaultVerticalMargin = 3.0; |
| - |
| return base::GetFieldTrialParamByFeatureAsInt( |
| omnibox::kUIExperimentVerticalMargin, |
| OmniboxFieldTrial::kUIVerticalMarginParam, kDefaultVerticalMargin); |
| @@ -424,8 +427,18 @@ NSAttributedString* CreateClassifiedAttributedString( |
| description_ = [CreateClassifiedAttributedString( |
| match.description, DimTextColor(isDarkTheme), |
| match.description_class, isDarkTheme) retain]; |
| + |
| + if (base::FeatureList::IsEnabled( |
| + omnibox::kUIExperimentVerticalLayout) && |
| + !AutocompleteMatch::IsSearchType(match.type)) { |
| + // Somtimes swap the contents and description in vertical layouts. |
|
groby-ooo-7-16
2017/05/31 00:14:51
When is "sometimes"?
tommycli
2017/05/31 18:20:40
Done.
|
| + // TODO(tommycli): If vertical layouts become permanent, swap these |
| + // in the underlying match instead of the UI code. |
|
groby-ooo-7-16
2017/05/31 00:14:51
Rendering order should not really affect anything
tommycli
2017/05/31 18:20:40
Done.
|
| + NSAttributedString* temp = contents_; |
|
groby-ooo-7-16
2017/05/31 00:14:51
std::swap(contents_, description_)
tommycli
2017/05/31 18:20:40
Done. Always forget that ObjC is also C++ ... or i
|
| + contents_ = description_; |
| + description_ = temp; |
| + } |
| } |
| - maxLines_ = 1; |
| } |
| propertyReleaser_OmniboxPopupCellData_.Init(self, |
| [OmniboxPopupCellData class]); |
| @@ -463,6 +476,9 @@ NSAttributedString* CreateClassifiedAttributedString( |
| } |
| - (void)drawMatchWithFrame:(NSRect)cellFrame inView:(NSView*)controlView { |
| + bool isVerticalLayout = |
| + base::FeatureList::IsEnabled(omnibox::kUIExperimentVerticalLayout); |
| + |
| OmniboxPopupCellData* cellData = |
| base::mac::ObjCCastStrict<OmniboxPopupCellData>([self objectValue]); |
| OmniboxPopupMatrix* tableView = |
| @@ -476,12 +492,12 @@ NSAttributedString* CreateClassifiedAttributedString( |
| int contentsMaxWidth, descriptionMaxWidth; |
| OmniboxPopupModel::ComputeMatchMaxWidths( |
| ceilf(contentsWidth), ceilf(separatorWidth), ceilf(descriptionWidth), |
| - ceilf(remainingWidth), |
| - [cellData isAnswer], |
| - !AutocompleteMatch::IsSearchType([cellData matchType]), |
| - &contentsMaxWidth, |
| + ceilf(remainingWidth), [cellData isAnswer] || isVerticalLayout, |
| + !AutocompleteMatch::IsSearchType([cellData matchType]), &contentsMaxWidth, |
| &descriptionMaxWidth); |
| + CGFloat halfLineHeight = (kDefaultTextHeight + kDefaultVerticalMargin) / 2; |
| + |
| NSWindow* parentWindow = [[controlView window] parentWindow]; |
| BOOL isDarkTheme = [parentWindow hasDarkTheme]; |
| NSRect imageRect = cellFrame; |
| @@ -491,6 +507,8 @@ NSAttributedString* CreateClassifiedAttributedString( |
| imageRect.origin.x += kMaterialImageXOffset + [tableView contentLeftPadding]; |
| imageRect.origin.y += |
| GetVerticalMargin() + kMaterialExtraVerticalImagePadding; |
| + if (isVerticalLayout) |
| + imageRect.origin.y += halfLineHeight; |
| [theImage drawInRect:FlipIfRTL(imageRect, cellFrame) |
| fromRect:NSZeroRect |
| operation:NSCompositeSourceOver |
| @@ -498,9 +516,13 @@ NSAttributedString* CreateClassifiedAttributedString( |
| respectFlipped:YES |
| hints:nil]; |
| - NSPoint origin = |
| - NSMakePoint(kMaterialTextStartOffset + [tableView contentLeftPadding], |
| - GetVerticalMargin()); |
| + CGFloat left = kMaterialTextStartOffset + [tableView contentLeftPadding]; |
| + NSPoint origin = NSMakePoint(left, GetVerticalMargin()); |
| + |
| + // For matches lacking description in vertical layout, center vertically. |
| + if (isVerticalLayout && descriptionMaxWidth == 0) |
| + origin.y += halfLineHeight; |
| + |
| if ([cellData matchType] == AutocompleteMatchType::SEARCH_SUGGEST_TAIL) { |
| // Tail suggestions are rendered with a prefix (usually ellipsis), which |
| // appear vertically stacked. |
| @@ -517,9 +539,8 @@ NSAttributedString* CreateClassifiedAttributedString( |
| if (descriptionMaxWidth > 0) { |
| if ([cellData isAnswer]) { |
| - origin = NSMakePoint( |
| - kMaterialTextStartOffset + [tableView contentLeftPadding], |
| - [OmniboxPopupCell getContentTextHeight] - GetVerticalMargin()); |
| + origin = NSMakePoint(left, [OmniboxPopupCell getContentTextHeight:false] - |
| + GetVerticalMargin()); |
| CGFloat imageSize = [tableView answerLineHeight]; |
| NSRect imageRect = |
| NSMakeRect(NSMinX(cellFrame) + origin.x, NSMinY(cellFrame) + origin.y, |
| @@ -538,17 +559,22 @@ NSAttributedString* CreateClassifiedAttributedString( |
| origin.y += 1; |
| } |
| } else { |
| - origin.x += [self drawMatchPart:[tableView separator] |
| - withFrame:cellFrame |
| - origin:origin |
| - withMaxWidth:separatorWidth |
| - forDarkTheme:isDarkTheme]; |
| + if (isVerticalLayout) { |
| + origin.x = left; |
|
groby-ooo-7-16
2017/05/31 00:14:51
If you assign the whole point:
origin = NSMakePoi
tommycli
2017/05/31 18:20:39
Hey. I actually need to add to the y coordinate, r
groby-ooo-7-16
2017/05/31 19:24:16
And so you do. TIL my brain skips characters at co
|
| + origin.y += halfLineHeight * 2; |
| + } else { |
| + origin.x += [self drawMatchPart:[tableView separator] |
| + withFrame:cellFrame |
| + origin:origin |
| + withMaxWidth:separatorWidth |
| + forDarkTheme:isDarkTheme]; |
| + } |
| } |
| - origin.x += [self drawMatchPart:[cellData description] |
| - withFrame:cellFrame |
| - origin:origin |
| - withMaxWidth:descriptionMaxWidth |
| - forDarkTheme:isDarkTheme]; |
| + [self drawMatchPart:[cellData description] |
| + withFrame:cellFrame |
| + origin:origin |
| + withMaxWidth:descriptionMaxWidth |
| + forDarkTheme:isDarkTheme]; |
| } |
| } |
| @@ -695,9 +721,11 @@ NSAttributedString* CreateClassifiedAttributedString( |
| return NSWidth(cellFrame) - kMaterialTextStartOffset; |
| } |
| -+ (CGFloat)getContentTextHeight { |
| - constexpr CGFloat kDefaultTextHeight = 19; |
| - return kDefaultTextHeight + 2 * GetVerticalMargin(); |
| ++ (CGFloat)getContentTextHeight:(BOOL)isTwoLine { |
| + CGFloat height = kDefaultTextHeight + 2 * GetVerticalMargin(); |
| + if (isTwoLine) |
| + height += kDefaultTextHeight + kDefaultVerticalMargin; |
| + return height; |
| } |
| @end |