Index: ios/chrome/browser/ui/tab_switcher/tab_switcher_header_cell.mm |
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_switcher_header_cell.mm b/ios/chrome/browser/ui/tab_switcher/tab_switcher_header_cell.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a45bad08526bc33ff52b73541ed44a0079bda545 |
--- /dev/null |
+++ b/ios/chrome/browser/ui/tab_switcher/tab_switcher_header_cell.mm |
@@ -0,0 +1,89 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#import "ios/chrome/browser/ui/tab_switcher/tab_switcher_header_cell.h" |
+ |
+#include "base/logging.h" |
+#include "base/mac/scoped_nsobject.h" |
+#import "ios/chrome/browser/ui/tab_switcher/tab_switcher_session_cell_data.h" |
+#import "ios/chrome/browser/ui/uikit_ui_util.h" |
+#import "ios/third_party/material_components_ios/src/components/Palettes/src/MaterialPalettes.h" |
+#import "ios/third_party/material_components_ios/src/components/Typography/src/MaterialTypography.h" |
+ |
+namespace { |
+// View alpha value used when the header cell is not selected. |
+const CGFloat kInactiveAlpha = 0.54; |
+const CGFloat kImageViewWidth = 24; |
+} |
+ |
+@interface TabSwitcherHeaderCell () { |
+ base::scoped_nsobject<UIImageView> _imageView; |
+ base::scoped_nsobject<UILabel> _label; |
+} |
+@end |
+ |
+@implementation TabSwitcherHeaderCell |
+ |
+- (instancetype)initWithFrame:(CGRect)frame { |
+ self = [super initWithFrame:frame]; |
+ if (self) { |
+ self.backgroundColor = [[MDCPalette greyPalette] tint900]; |
+ [self loadSubviews]; |
+ [self setSelected:NO]; |
+ } |
+ return self; |
+} |
+ |
++ (NSString*)identifier { |
+ return @"TabSwitcherHeaderCell"; |
+} |
+ |
+- (NSString*)reuseIdentifier { |
+ return [[self class] identifier]; |
+} |
+ |
+- (void)loadSessionCellData:(SessionCellData*)sessionCellData { |
+ [_imageView setImage:sessionCellData.image]; |
+ [_label setText:sessionCellData.title]; |
+ [self setNeedsLayout]; |
+} |
+ |
+- (void)setSelected:(BOOL)selected { |
+ [super setSelected:selected]; |
+ [_imageView setAlpha:selected ? 1. : kInactiveAlpha]; |
+ [_label setAlpha:selected ? 1. : kInactiveAlpha]; |
+ [self setNeedsLayout]; |
+} |
+ |
+#pragma mark - Private |
+ |
+- (void)loadSubviews { |
+ _imageView.reset([[UIImageView alloc] initWithFrame:CGRectZero]); |
+ [_imageView setContentMode:UIViewContentModeCenter]; |
+ [_imageView setTranslatesAutoresizingMaskIntoConstraints:NO]; |
+ [_imageView setTintColor:[UIColor whiteColor]]; |
+ _label.reset([[UILabel alloc] initWithFrame:CGRectZero]); |
+ [_label setBackgroundColor:[UIColor clearColor]]; |
+ [_label setTranslatesAutoresizingMaskIntoConstraints:NO]; |
+ [_label setTextColor:[UIColor whiteColor]]; |
+ [_label setFont:[MDCTypography body2Font]]; |
+ |
+ // Configure layout. |
+ // The icon and the title are centered within |contentView|, have a spacing of |
+ // one-third of icon width and the icon is on the leading side of title. |
+ base::scoped_nsobject<UIStackView> stackView( |
+ [[UIStackView alloc] initWithArrangedSubviews:@[ _imageView, _label ]]); |
+ [stackView setSpacing:kImageViewWidth / 3]; |
+ [self.contentView addSubview:stackView]; |
+ |
+ [stackView setTranslatesAutoresizingMaskIntoConstraints:NO]; |
+ [NSLayoutConstraint activateConstraints:@[ |
+ [self.contentView.centerYAnchor |
+ constraintEqualToAnchor:[stackView centerYAnchor]], |
+ [self.contentView.centerXAnchor |
+ constraintEqualToAnchor:[stackView centerXAnchor]] |
+ ]]; |
+} |
+ |
+@end |