| Index: ios/chrome/browser/ui/ntp/new_tab_page_bar_button.mm
|
| diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_bar_button.mm b/ios/chrome/browser/ui/ntp/new_tab_page_bar_button.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..91580eee51861a286585c8d684c538cea67f8275
|
| --- /dev/null
|
| +++ b/ios/chrome/browser/ui/ntp/new_tab_page_bar_button.mm
|
| @@ -0,0 +1,138 @@
|
| +// 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/ntp/new_tab_page_bar_button.h"
|
| +
|
| +#include "base/logging.h"
|
| +#include "base/mac/objc_property_releaser.h"
|
| +#import "ios/chrome/browser/ui/ntp/new_tab_page_bar_item.h"
|
| +#import "ios/chrome/browser/ui/uikit_ui_util.h"
|
| +#import "ios/third_party/material_components_ios/src/components/Typography/src/MaterialTypography.h"
|
| +
|
| +namespace {
|
| +
|
| +const int kButtonColor = 0x333333;
|
| +const int kButtonSelectedColor = 0x4285F4;
|
| +
|
| +} // anonymous namespace
|
| +
|
| +@interface NewTabPageBarButton () {
|
| + UIColor* _color;
|
| + UIColor* _selectedColor;
|
| + UIColor* _incognitoColor;
|
| + UIColor* _incognitoSelectedColor;
|
| + UIColor* _interpolatedColor;
|
| + UIColor* _interpolatedSelectedColor;
|
| +
|
| + UIImage* _image;
|
| + NSString* _title;
|
| + base::mac::ObjCPropertyReleaser _propertyReleaser_NewTabPageBarButton;
|
| +}
|
| +
|
| +@property(nonatomic, retain) UIColor* color;
|
| +@property(nonatomic, retain) UIColor* selectedColor;
|
| +@property(nonatomic, retain) UIColor* incognitoColor;
|
| +@property(nonatomic, retain) UIColor* incognitoSelectedColor;
|
| +@property(nonatomic, retain) UIColor* interpolatedColor;
|
| +@property(nonatomic, retain) UIColor* interpolatedSelectedColor;
|
| +@property(nonatomic, retain) UIImage* image;
|
| +@property(nonatomic, copy) NSString* title;
|
| +
|
| +// Sets the tint color of the button to |interpolatedColor| or
|
| +// |interpolatedSelectedColor|, depending on the state of the button.
|
| +- (void)refreshTintColor;
|
| +
|
| +@end
|
| +
|
| +@implementation NewTabPageBarButton
|
| +
|
| +@synthesize color = _color;
|
| +@synthesize selectedColor = _selectedColor;
|
| +@synthesize incognitoColor = _incognitoColor;
|
| +@synthesize incognitoSelectedColor = _incognitoSelectedColor;
|
| +@synthesize interpolatedColor = _interpolatedColor;
|
| +@synthesize interpolatedSelectedColor = _interpolatedSelectedColor;
|
| +@synthesize image = _image;
|
| +@synthesize title = _title;
|
| +
|
| ++ (instancetype)buttonWithItem:(NewTabPageBarItem*)item {
|
| + DCHECK(item);
|
| + DCHECK(item.title);
|
| + DCHECK(item.image);
|
| + NewTabPageBarButton* button =
|
| + [[self class] buttonWithType:UIButtonTypeCustom];
|
| + button->_propertyReleaser_NewTabPageBarButton.Init(
|
| + button, [NewTabPageBarButton class]);
|
| +
|
| + button.title = item.title;
|
| + button.image =
|
| + [item.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
|
| + button.color = UIColorFromRGB(kButtonColor, 1.0);
|
| + button.selectedColor = UIColorFromRGB(kButtonSelectedColor, 1.0);
|
| + button.incognitoColor = [UIColor colorWithWhite:1 alpha:0.5];
|
| + button.incognitoSelectedColor = [UIColor whiteColor];
|
| +
|
| + button.autoresizingMask = UIViewAutoresizingFlexibleWidth;
|
| + button.adjustsImageWhenHighlighted = NO;
|
| + button.accessibilityLabel = item.title;
|
| + button.titleLabel.font = [MDCTypography body2Font];
|
| + button.titleLabel.adjustsFontSizeToFitWidth = YES;
|
| + button.titleLabel.minimumScaleFactor = 0.6;
|
| +
|
| + [button useIncognitoColorScheme:0];
|
| + [button setContentToDisplay:new_tab_page_bar_button::ContentType::TEXT];
|
| + return button;
|
| +}
|
| +
|
| +- (void)useIncognitoColorScheme:(CGFloat)percentage {
|
| + DCHECK(percentage >= 0 && percentage <= 1);
|
| + self.interpolatedColor =
|
| + InterpolateFromColorToColor(_color, _incognitoColor, percentage);
|
| + self.interpolatedSelectedColor = InterpolateFromColorToColor(
|
| + _selectedColor, _incognitoSelectedColor, percentage);
|
| +
|
| + [self setTitleColor:_interpolatedColor forState:UIControlStateNormal];
|
| + [self setTitleColor:_interpolatedSelectedColor
|
| + forState:UIControlStateSelected];
|
| + [self setTitleColor:_interpolatedSelectedColor
|
| + forState:UIControlStateHighlighted];
|
| +
|
| + [self refreshTintColor];
|
| +}
|
| +
|
| +- (void)setContentToDisplay:(new_tab_page_bar_button::ContentType)contentType {
|
| + switch (contentType) {
|
| + case new_tab_page_bar_button::ContentType::IMAGE:
|
| + [self setImage:_image forState:UIControlStateNormal];
|
| + [self setTitle:nil forState:UIControlStateNormal];
|
| + break;
|
| + case new_tab_page_bar_button::ContentType::TEXT:
|
| + [self setImage:nil forState:UIControlStateNormal];
|
| + [self setTitle:_title forState:UIControlStateNormal];
|
| + break;
|
| + }
|
| +}
|
| +
|
| +- (void)refreshTintColor {
|
| + if (self.selected || self.highlighted) {
|
| + [self setTintColor:_interpolatedSelectedColor];
|
| + } else {
|
| + [self setTintColor:_interpolatedColor];
|
| + }
|
| +}
|
| +
|
| +#pragma mark -
|
| +#pragma mark UIButton overrides
|
| +
|
| +- (void)setSelected:(BOOL)selected {
|
| + [super setSelected:selected];
|
| + [self refreshTintColor];
|
| +}
|
| +
|
| +- (void)setHighlighted:(BOOL)highlighted {
|
| + [super setHighlighted:highlighted];
|
| + [self refreshTintColor];
|
| +}
|
| +
|
| +@end
|
|
|