blob: 6a403fbef5dd3ef74f60bc099163db835b81f282 [file] [log] [blame]
// Copyright 2016-present the Material Components for iOS authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#import "MDCPalettes.h"
#import "private/MDCPaletteExpansions.h"
#import "private/MDCPaletteNames.h"
const MDCPaletteTint MDCPaletteTint50Name = MDC_PALETTE_TINT_50_INTERNAL_NAME;
const MDCPaletteTint MDCPaletteTint100Name = MDC_PALETTE_TINT_100_INTERNAL_NAME;
const MDCPaletteTint MDCPaletteTint200Name = MDC_PALETTE_TINT_200_INTERNAL_NAME;
const MDCPaletteTint MDCPaletteTint300Name = MDC_PALETTE_TINT_300_INTERNAL_NAME;
const MDCPaletteTint MDCPaletteTint400Name = MDC_PALETTE_TINT_400_INTERNAL_NAME;
const MDCPaletteTint MDCPaletteTint500Name = MDC_PALETTE_TINT_500_INTERNAL_NAME;
const MDCPaletteTint MDCPaletteTint600Name = MDC_PALETTE_TINT_600_INTERNAL_NAME;
const MDCPaletteTint MDCPaletteTint700Name = MDC_PALETTE_TINT_700_INTERNAL_NAME;
const MDCPaletteTint MDCPaletteTint800Name = MDC_PALETTE_TINT_800_INTERNAL_NAME;
const MDCPaletteTint MDCPaletteTint900Name = MDC_PALETTE_TINT_900_INTERNAL_NAME;
const MDCPaletteAccent MDCPaletteAccent100Name = MDC_PALETTE_ACCENT_100_INTERNAL_NAME;
const MDCPaletteAccent MDCPaletteAccent200Name = MDC_PALETTE_ACCENT_200_INTERNAL_NAME;
const MDCPaletteAccent MDCPaletteAccent400Name = MDC_PALETTE_ACCENT_400_INTERNAL_NAME;
const MDCPaletteAccent MDCPaletteAccent700Name = MDC_PALETTE_ACCENT_700_INTERNAL_NAME;
// Creates a UIColor from a 24-bit RGB color encoded as an integer.
static inline UIColor *ColorFromRGB(uint32_t rgbValue) {
return [UIColor colorWithRed:((CGFloat)((rgbValue & 0xFF0000) >> 16)) / 255
green:((CGFloat)((rgbValue & 0x00FF00) >> 8)) / 255
blue:((CGFloat)((rgbValue & 0x0000FF) >> 0)) / 255
alpha:1];
}
@interface MDCPalette () {
NSDictionary<MDCPaletteTint, UIColor *> *_tints;
NSDictionary<MDCPaletteAccent, UIColor *> *_accents;
}
@end
@implementation MDCPalette
+ (MDCPalette *)redPalette {
static MDCPalette *palette;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
palette = [[self alloc] initWithTints:@{
MDCPaletteTint50Name : ColorFromRGB(0xFFEBEE),
MDCPaletteTint100Name : ColorFromRGB(0xFFCDD2),
MDCPaletteTint200Name : ColorFromRGB(0xEF9A9A),
MDCPaletteTint300Name : ColorFromRGB(0xE57373),
MDCPaletteTint400Name : ColorFromRGB(0xEF5350),
MDCPaletteTint500Name : ColorFromRGB(0xF44336),
MDCPaletteTint600Name : ColorFromRGB(0xE53935),
MDCPaletteTint700Name : ColorFromRGB(0xD32F2F),
MDCPaletteTint800Name : ColorFromRGB(0xC62828),
MDCPaletteTint900Name : ColorFromRGB(0xB71C1C)
}
accents:@{
MDCPaletteAccent100Name : ColorFromRGB(0xFF8A80),
MDCPaletteAccent200Name : ColorFromRGB(0xFF5252),
MDCPaletteAccent400Name : ColorFromRGB(0xFF1744),
MDCPaletteAccent700Name : ColorFromRGB(0xD50000)
}];
});
return palette;
}
+ (MDCPalette *)pinkPalette {
static MDCPalette *palette;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
palette = [[self alloc] initWithTints:@{
MDCPaletteTint50Name : ColorFromRGB(0xFCE4EC),
MDCPaletteTint100Name : ColorFromRGB(0xF8BBD0),
MDCPaletteTint200Name : ColorFromRGB(0xF48FB1),
MDCPaletteTint300Name : ColorFromRGB(0xF06292),
MDCPaletteTint400Name : ColorFromRGB(0xEC407A),
MDCPaletteTint500Name : ColorFromRGB(0xE91E63),
MDCPaletteTint600Name : ColorFromRGB(0xD81B60),
MDCPaletteTint700Name : ColorFromRGB(0xC2185B),
MDCPaletteTint800Name : ColorFromRGB(0xAD1457),
MDCPaletteTint900Name : ColorFromRGB(0x880E4F)
}
accents:@{
MDCPaletteAccent100Name : ColorFromRGB(0xFF80AB),
MDCPaletteAccent200Name : ColorFromRGB(0xFF4081),
MDCPaletteAccent400Name : ColorFromRGB(0xF50057),
MDCPaletteAccent700Name : ColorFromRGB(0xC51162)
}];
});
return palette;
}
+ (MDCPalette *)purplePalette {
static MDCPalette *palette;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
palette = [[self alloc] initWithTints:@{
MDCPaletteTint50Name : ColorFromRGB(0xF3E5F5),
MDCPaletteTint100Name : ColorFromRGB(0xE1BEE7),
MDCPaletteTint200Name : ColorFromRGB(0xCE93D8),
MDCPaletteTint300Name : ColorFromRGB(0xBA68C8),
MDCPaletteTint400Name : ColorFromRGB(0xAB47BC),
MDCPaletteTint500Name : ColorFromRGB(0x9C27B0),
MDCPaletteTint600Name : ColorFromRGB(0x8E24AA),
MDCPaletteTint700Name : ColorFromRGB(0x7B1FA2),
MDCPaletteTint800Name : ColorFromRGB(0x6A1B9A),
MDCPaletteTint900Name : ColorFromRGB(0x4A148C)
}
accents:@{
MDCPaletteAccent100Name : ColorFromRGB(0xEA80FC),
MDCPaletteAccent200Name : ColorFromRGB(0xE040FB),
MDCPaletteAccent400Name : ColorFromRGB(0xD500F9),
MDCPaletteAccent700Name : ColorFromRGB(0xAA00FF)
}];
});
return palette;
}
+ (MDCPalette *)deepPurplePalette {
static MDCPalette *palette;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
palette = [[self alloc] initWithTints:@{
MDCPaletteTint50Name : ColorFromRGB(0xEDE7F6),
MDCPaletteTint100Name : ColorFromRGB(0xD1C4E9),
MDCPaletteTint200Name : ColorFromRGB(0xB39DDB),
MDCPaletteTint300Name : ColorFromRGB(0x9575CD),
MDCPaletteTint400Name : ColorFromRGB(0x7E57C2),
MDCPaletteTint500Name : ColorFromRGB(0x673AB7),
MDCPaletteTint600Name : ColorFromRGB(0x5E35B1),
MDCPaletteTint700Name : ColorFromRGB(0x512DA8),
MDCPaletteTint800Name : ColorFromRGB(0x4527A0),
MDCPaletteTint900Name : ColorFromRGB(0x311B92)
}
accents:@{
MDCPaletteAccent100Name : ColorFromRGB(0xB388FF),
MDCPaletteAccent200Name : ColorFromRGB(0x7C4DFF),
MDCPaletteAccent400Name : ColorFromRGB(0x651FFF),
MDCPaletteAccent700Name : ColorFromRGB(0x6200EA)
}];
});
return palette;
}
+ (MDCPalette *)indigoPalette {
static MDCPalette *palette;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
palette = [[self alloc] initWithTints:@{
MDCPaletteTint50Name : ColorFromRGB(0xE8EAF6),
MDCPaletteTint100Name : ColorFromRGB(0xC5CAE9),
MDCPaletteTint200Name : ColorFromRGB(0x9FA8DA),
MDCPaletteTint300Name : ColorFromRGB(0x7986CB),
MDCPaletteTint400Name : ColorFromRGB(0x5C6BC0),
MDCPaletteTint500Name : ColorFromRGB(0x3F51B5),
MDCPaletteTint600Name : ColorFromRGB(0x3949AB),
MDCPaletteTint700Name : ColorFromRGB(0x303F9F),
MDCPaletteTint800Name : ColorFromRGB(0x283593),
MDCPaletteTint900Name : ColorFromRGB(0x1A237E)
}
accents:@{
MDCPaletteAccent100Name : ColorFromRGB(0x8C9EFF),
MDCPaletteAccent200Name : ColorFromRGB(0x536DFE),
MDCPaletteAccent400Name : ColorFromRGB(0x3D5AFE),
MDCPaletteAccent700Name : ColorFromRGB(0x304FFE)
}];
});
return palette;
}
+ (MDCPalette *)bluePalette {
static MDCPalette *palette;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
palette = [[self alloc] initWithTints:@{
MDCPaletteTint50Name : ColorFromRGB(0xE3F2FD),
MDCPaletteTint100Name : ColorFromRGB(0xBBDEFB),
MDCPaletteTint200Name : ColorFromRGB(0x90CAF9),
MDCPaletteTint300Name : ColorFromRGB(0x64B5F6),
MDCPaletteTint400Name : ColorFromRGB(0x42A5F5),
MDCPaletteTint500Name : ColorFromRGB(0x2196F3),
MDCPaletteTint600Name : ColorFromRGB(0x1E88E5),
MDCPaletteTint700Name : ColorFromRGB(0x1976D2),
MDCPaletteTint800Name : ColorFromRGB(0x1565C0),
MDCPaletteTint900Name : ColorFromRGB(0x0D47A1)
}
accents:@{
MDCPaletteAccent100Name : ColorFromRGB(0x82B1FF),
MDCPaletteAccent200Name : ColorFromRGB(0x448AFF),
MDCPaletteAccent400Name : ColorFromRGB(0x2979FF),
MDCPaletteAccent700Name : ColorFromRGB(0x2962FF)
}];
});
return palette;
}
+ (MDCPalette *)lightBluePalette {
static MDCPalette *palette;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
palette = [[self alloc] initWithTints:@{
MDCPaletteTint50Name : ColorFromRGB(0xE1F5FE),
MDCPaletteTint100Name : ColorFromRGB(0xB3E5FC),
MDCPaletteTint200Name : ColorFromRGB(0x81D4FA),
MDCPaletteTint300Name : ColorFromRGB(0x4FC3F7),
MDCPaletteTint400Name : ColorFromRGB(0x29B6F6),
MDCPaletteTint500Name : ColorFromRGB(0x03A9F4),
MDCPaletteTint600Name : ColorFromRGB(0x039BE5),
MDCPaletteTint700Name : ColorFromRGB(0x0288D1),
MDCPaletteTint800Name : ColorFromRGB(0x0277BD),
MDCPaletteTint900Name : ColorFromRGB(0x01579B)
}
accents:@{
MDCPaletteAccent100Name : ColorFromRGB(0x80D8FF),
MDCPaletteAccent200Name : ColorFromRGB(0x40C4FF),
MDCPaletteAccent400Name : ColorFromRGB(0x00B0FF),
MDCPaletteAccent700Name : ColorFromRGB(0x0091EA)
}];
});
return palette;
}
+ (MDCPalette *)cyanPalette {
static MDCPalette *palette;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
palette = [[self alloc] initWithTints:@{
MDCPaletteTint50Name : ColorFromRGB(0xE0F7FA),
MDCPaletteTint100Name : ColorFromRGB(0xB2EBF2),
MDCPaletteTint200Name : ColorFromRGB(0x80DEEA),
MDCPaletteTint300Name : ColorFromRGB(0x4DD0E1),
MDCPaletteTint400Name : ColorFromRGB(0x26C6DA),
MDCPaletteTint500Name : ColorFromRGB(0x00BCD4),
MDCPaletteTint600Name : ColorFromRGB(0x00ACC1),
MDCPaletteTint700Name : ColorFromRGB(0x0097A7),
MDCPaletteTint800Name : ColorFromRGB(0x00838F),
MDCPaletteTint900Name : ColorFromRGB(0x006064)
}
accents:@{
MDCPaletteAccent100Name : ColorFromRGB(0x84FFFF),
MDCPaletteAccent200Name : ColorFromRGB(0x18FFFF),
MDCPaletteAccent400Name : ColorFromRGB(0x00E5FF),
MDCPaletteAccent700Name : ColorFromRGB(0x00B8D4)
}];
});
return palette;
}
+ (MDCPalette *)tealPalette {
static MDCPalette *palette;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
palette = [[self alloc] initWithTints:@{
MDCPaletteTint50Name : ColorFromRGB(0xE0F2F1),
MDCPaletteTint100Name : ColorFromRGB(0xB2DFDB),
MDCPaletteTint200Name : ColorFromRGB(0x80CBC4),
MDCPaletteTint300Name : ColorFromRGB(0x4DB6AC),
MDCPaletteTint400Name : ColorFromRGB(0x26A69A),
MDCPaletteTint500Name : ColorFromRGB(0x009688),
MDCPaletteTint600Name : ColorFromRGB(0x00897B),
MDCPaletteTint700Name : ColorFromRGB(0x00796B),
MDCPaletteTint800Name : ColorFromRGB(0x00695C),
MDCPaletteTint900Name : ColorFromRGB(0x004D40)
}
accents:@{
MDCPaletteAccent100Name : ColorFromRGB(0xA7FFEB),
MDCPaletteAccent200Name : ColorFromRGB(0x64FFDA),
MDCPaletteAccent400Name : ColorFromRGB(0x1DE9B6),
MDCPaletteAccent700Name : ColorFromRGB(0x00BFA5)
}];
});
return palette;
}
+ (MDCPalette *)greenPalette {
static MDCPalette *palette;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
palette = [[self alloc] initWithTints:@{
MDCPaletteTint50Name : ColorFromRGB(0xE8F5E9),
MDCPaletteTint100Name : ColorFromRGB(0xC8E6C9),
MDCPaletteTint200Name : ColorFromRGB(0xA5D6A7),
MDCPaletteTint300Name : ColorFromRGB(0x81C784),
MDCPaletteTint400Name : ColorFromRGB(0x66BB6A),
MDCPaletteTint500Name : ColorFromRGB(0x4CAF50),
MDCPaletteTint600Name : ColorFromRGB(0x43A047),
MDCPaletteTint700Name : ColorFromRGB(0x388E3C),
MDCPaletteTint800Name : ColorFromRGB(0x2E7D32),
MDCPaletteTint900Name : ColorFromRGB(0x1B5E20)
}
accents:@{
MDCPaletteAccent100Name : ColorFromRGB(0xB9F6CA),
MDCPaletteAccent200Name : ColorFromRGB(0x69F0AE),
MDCPaletteAccent400Name : ColorFromRGB(0x00E676),
MDCPaletteAccent700Name : ColorFromRGB(0x00C853)
}];
});
return palette;
}
+ (MDCPalette *)lightGreenPalette {
static MDCPalette *palette;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
palette = [[self alloc] initWithTints:@{
MDCPaletteTint50Name : ColorFromRGB(0xF1F8E9),
MDCPaletteTint100Name : ColorFromRGB(0xDCEDC8),
MDCPaletteTint200Name : ColorFromRGB(0xC5E1A5),
MDCPaletteTint300Name : ColorFromRGB(0xAED581),
MDCPaletteTint400Name : ColorFromRGB(0x9CCC65),
MDCPaletteTint500Name : ColorFromRGB(0x8BC34A),
MDCPaletteTint600Name : ColorFromRGB(0x7CB342),
MDCPaletteTint700Name : ColorFromRGB(0x689F38),
MDCPaletteTint800Name : ColorFromRGB(0x558B2F),
MDCPaletteTint900Name : ColorFromRGB(0x33691E)
}
accents:@{
MDCPaletteAccent100Name : ColorFromRGB(0xCCFF90),
MDCPaletteAccent200Name : ColorFromRGB(0xB2FF59),
MDCPaletteAccent400Name : ColorFromRGB(0x76FF03),
MDCPaletteAccent700Name : ColorFromRGB(0x64DD17)
}];
});
return palette;
}
+ (MDCPalette *)limePalette {
static MDCPalette *palette;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
palette = [[self alloc] initWithTints:@{
MDCPaletteTint50Name : ColorFromRGB(0xF9FBE7),
MDCPaletteTint100Name : ColorFromRGB(0xF0F4C3),
MDCPaletteTint200Name : ColorFromRGB(0xE6EE9C),
MDCPaletteTint300Name : ColorFromRGB(0xDCE775),
MDCPaletteTint400Name : ColorFromRGB(0xD4E157),
MDCPaletteTint500Name : ColorFromRGB(0xCDDC39),
MDCPaletteTint600Name : ColorFromRGB(0xC0CA33),
MDCPaletteTint700Name : ColorFromRGB(0xAFB42B),
MDCPaletteTint800Name : ColorFromRGB(0x9E9D24),
MDCPaletteTint900Name : ColorFromRGB(0x827717)
}
accents:@{
MDCPaletteAccent100Name : ColorFromRGB(0xF4FF81),
MDCPaletteAccent200Name : ColorFromRGB(0xEEFF41),
MDCPaletteAccent400Name : ColorFromRGB(0xC6FF00),
MDCPaletteAccent700Name : ColorFromRGB(0xAEEA00)
}];
});
return palette;
}
+ (MDCPalette *)yellowPalette {
static MDCPalette *palette;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
palette = [[self alloc] initWithTints:@{
MDCPaletteTint50Name : ColorFromRGB(0xFFFDE7),
MDCPaletteTint100Name : ColorFromRGB(0xFFF9C4),
MDCPaletteTint200Name : ColorFromRGB(0xFFF59D),
MDCPaletteTint300Name : ColorFromRGB(0xFFF176),
MDCPaletteTint400Name : ColorFromRGB(0xFFEE58),
MDCPaletteTint500Name : ColorFromRGB(0xFFEB3B),
MDCPaletteTint600Name : ColorFromRGB(0xFDD835),
MDCPaletteTint700Name : ColorFromRGB(0xFBC02D),
MDCPaletteTint800Name : ColorFromRGB(0xF9A825),
MDCPaletteTint900Name : ColorFromRGB(0xF57F17)
}
accents:@{
MDCPaletteAccent100Name : ColorFromRGB(0xFFFF8D),
MDCPaletteAccent200Name : ColorFromRGB(0xFFFF00),
MDCPaletteAccent400Name : ColorFromRGB(0xFFEA00),
MDCPaletteAccent700Name : ColorFromRGB(0xFFD600)
}];
});
return palette;
}
+ (MDCPalette *)amberPalette {
static MDCPalette *palette;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
palette = [[self alloc] initWithTints:@{
MDCPaletteTint50Name : ColorFromRGB(0xFFF8E1),
MDCPaletteTint100Name : ColorFromRGB(0xFFECB3),
MDCPaletteTint200Name : ColorFromRGB(0xFFE082),
MDCPaletteTint300Name : ColorFromRGB(0xFFD54F),
MDCPaletteTint400Name : ColorFromRGB(0xFFCA28),
MDCPaletteTint500Name : ColorFromRGB(0xFFC107),
MDCPaletteTint600Name : ColorFromRGB(0xFFB300),
MDCPaletteTint700Name : ColorFromRGB(0xFFA000),
MDCPaletteTint800Name : ColorFromRGB(0xFF8F00),
MDCPaletteTint900Name : ColorFromRGB(0xFF6F00)
}
accents:@{
MDCPaletteAccent100Name : ColorFromRGB(0xFFE57F),
MDCPaletteAccent200Name : ColorFromRGB(0xFFD740),
MDCPaletteAccent400Name : ColorFromRGB(0xFFC400),
MDCPaletteAccent700Name : ColorFromRGB(0xFFAB00)
}];
});
return palette;
}
+ (MDCPalette *)orangePalette {
static MDCPalette *palette;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
palette = [[self alloc] initWithTints:@{
MDCPaletteTint50Name : ColorFromRGB(0xFFF3E0),
MDCPaletteTint100Name : ColorFromRGB(0xFFE0B2),
MDCPaletteTint200Name : ColorFromRGB(0xFFCC80),
MDCPaletteTint300Name : ColorFromRGB(0xFFB74D),
MDCPaletteTint400Name : ColorFromRGB(0xFFA726),
MDCPaletteTint500Name : ColorFromRGB(0xFF9800),
MDCPaletteTint600Name : ColorFromRGB(0xFB8C00),
MDCPaletteTint700Name : ColorFromRGB(0xF57C00),
MDCPaletteTint800Name : ColorFromRGB(0xEF6C00),
MDCPaletteTint900Name : ColorFromRGB(0xE65100)
}
accents:@{
MDCPaletteAccent100Name : ColorFromRGB(0xFFD180),
MDCPaletteAccent200Name : ColorFromRGB(0xFFAB40),
MDCPaletteAccent400Name : ColorFromRGB(0xFF9100),
MDCPaletteAccent700Name : ColorFromRGB(0xFF6D00)
}];
});
return palette;
}
+ (MDCPalette *)deepOrangePalette {
static MDCPalette *palette;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
palette = [[self alloc] initWithTints:@{
MDCPaletteTint50Name : ColorFromRGB(0xFBE9E7),
MDCPaletteTint100Name : ColorFromRGB(0xFFCCBC),
MDCPaletteTint200Name : ColorFromRGB(0xFFAB91),
MDCPaletteTint300Name : ColorFromRGB(0xFF8A65),
MDCPaletteTint400Name : ColorFromRGB(0xFF7043),
MDCPaletteTint500Name : ColorFromRGB(0xFF5722),
MDCPaletteTint600Name : ColorFromRGB(0xF4511E),
MDCPaletteTint700Name : ColorFromRGB(0xE64A19),
MDCPaletteTint800Name : ColorFromRGB(0xD84315),
MDCPaletteTint900Name : ColorFromRGB(0xBF360C)
}
accents:@{
MDCPaletteAccent100Name : ColorFromRGB(0xFF9E80),
MDCPaletteAccent200Name : ColorFromRGB(0xFF6E40),
MDCPaletteAccent400Name : ColorFromRGB(0xFF3D00),
MDCPaletteAccent700Name : ColorFromRGB(0xDD2C00)
}];
});
return palette;
}
+ (MDCPalette *)brownPalette {
static MDCPalette *palette;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
palette = [[self alloc] initWithTints:@{
MDCPaletteTint50Name : ColorFromRGB(0xEFEBE9),
MDCPaletteTint100Name : ColorFromRGB(0xD7CCC8),
MDCPaletteTint200Name : ColorFromRGB(0xBCAAA4),
MDCPaletteTint300Name : ColorFromRGB(0xA1887F),
MDCPaletteTint400Name : ColorFromRGB(0x8D6E63),
MDCPaletteTint500Name : ColorFromRGB(0x795548),
MDCPaletteTint600Name : ColorFromRGB(0x6D4C41),
MDCPaletteTint700Name : ColorFromRGB(0x5D4037),
MDCPaletteTint800Name : ColorFromRGB(0x4E342E),
MDCPaletteTint900Name : ColorFromRGB(0x3E2723)
}
accents:nil];
});
return palette;
}
+ (MDCPalette *)greyPalette {
static MDCPalette *palette;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
palette = [[self alloc] initWithTints:@{
MDCPaletteTint50Name : ColorFromRGB(0xFAFAFA),
MDCPaletteTint100Name : ColorFromRGB(0xF5F5F5),
MDCPaletteTint200Name : ColorFromRGB(0xEEEEEE),
MDCPaletteTint300Name : ColorFromRGB(0xE0E0E0),
MDCPaletteTint400Name : ColorFromRGB(0xBDBDBD),
MDCPaletteTint500Name : ColorFromRGB(0x9E9E9E),
MDCPaletteTint600Name : ColorFromRGB(0x757575),
MDCPaletteTint700Name : ColorFromRGB(0x616161),
MDCPaletteTint800Name : ColorFromRGB(0x424242),
MDCPaletteTint900Name : ColorFromRGB(0x212121)
}
accents:nil];
});
return palette;
}
+ (MDCPalette *)blueGreyPalette {
static MDCPalette *palette;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
palette = [[self alloc] initWithTints:@{
MDCPaletteTint50Name : ColorFromRGB(0xECEFF1),
MDCPaletteTint100Name : ColorFromRGB(0xCFD8DC),
MDCPaletteTint200Name : ColorFromRGB(0xB0BEC5),
MDCPaletteTint300Name : ColorFromRGB(0x90A4AE),
MDCPaletteTint400Name : ColorFromRGB(0x78909C),
MDCPaletteTint500Name : ColorFromRGB(0x607D8B),
MDCPaletteTint600Name : ColorFromRGB(0x546E7A),
MDCPaletteTint700Name : ColorFromRGB(0x455A64),
MDCPaletteTint800Name : ColorFromRGB(0x37474F),
MDCPaletteTint900Name : ColorFromRGB(0x263238)
}
accents:nil];
});
return palette;
}
+ (instancetype)paletteGeneratedFromColor:(nonnull UIColor *)target500Color {
NSArray *tintNames = @[
MDCPaletteTint50Name, MDCPaletteTint100Name, MDCPaletteTint200Name, MDCPaletteTint300Name,
MDCPaletteTint400Name, MDCPaletteTint500Name, MDCPaletteTint600Name, MDCPaletteTint700Name,
MDCPaletteTint800Name, MDCPaletteTint900Name, MDCPaletteAccent100Name, MDCPaletteAccent200Name,
MDCPaletteAccent400Name, MDCPaletteAccent700Name
];
NSMutableDictionary *tints = [[NSMutableDictionary alloc] init];
for (MDCPaletteTint name in tintNames) {
[tints setObject:MDCPaletteTintFromTargetColor(target500Color, name) forKey:name];
}
NSArray *accentNames = @[
MDCPaletteAccent100Name, MDCPaletteAccent200Name, MDCPaletteAccent400Name,
MDCPaletteAccent700Name
];
NSMutableDictionary *accents = [[NSMutableDictionary alloc] init];
for (MDCPaletteAccent name in accentNames) {
[accents setObject:MDCPaletteAccentFromTargetColor(target500Color, name) forKey:name];
}
return [self paletteWithTints:tints accents:accents];
}
+ (instancetype)paletteWithTints:(NSDictionary<MDCPaletteTint, UIColor *> *)tints
accents:(NSDictionary<MDCPaletteAccent, UIColor *> *)accents {
return [[self alloc] initWithTints:tints accents:accents];
}
- (instancetype)initWithTints:(NSDictionary<MDCPaletteTint, UIColor *> *)tints
accents:(NSDictionary<MDCPaletteAccent, UIColor *> *)accents {
self = [super init];
if (self) {
_accents = accents ? [accents copy] : @{};
// Check if all the accent colors are present.
NSDictionary<MDCPaletteTint, UIColor *> *allTints = tints;
NSMutableSet<MDCPaletteAccent> *requiredTintKeys =
[NSMutableSet setWithSet:[[self class] requiredTintKeys]];
[requiredTintKeys minusSet:[NSSet setWithArray:[tints allKeys]]];
if ([requiredTintKeys count] != 0) {
NSAssert(NO, @"Missing accent colors for the following keys: %@.", requiredTintKeys);
NSMutableDictionary<MDCPaletteTint, UIColor *> *replacementTints =
[NSMutableDictionary dictionaryWithDictionary:_accents];
for (MDCPaletteTint tintKey in requiredTintKeys) {
[replacementTints setObject:[UIColor clearColor] forKey:tintKey];
}
allTints = replacementTints;
}
_tints = [allTints copy];
}
return self;
}
- (UIColor *)tint50 {
return _tints[MDCPaletteTint50Name];
}
- (UIColor *)tint100 {
return _tints[MDCPaletteTint100Name];
}
- (UIColor *)tint200 {
return _tints[MDCPaletteTint200Name];
}
- (UIColor *)tint300 {
return _tints[MDCPaletteTint300Name];
}
- (UIColor *)tint400 {
return _tints[MDCPaletteTint400Name];
}
- (UIColor *)tint500 {
return _tints[MDCPaletteTint500Name];
}
- (UIColor *)tint600 {
return _tints[MDCPaletteTint600Name];
}
- (UIColor *)tint700 {
return _tints[MDCPaletteTint700Name];
}
- (UIColor *)tint800 {
return _tints[MDCPaletteTint800Name];
}
- (UIColor *)tint900 {
return _tints[MDCPaletteTint900Name];
}
- (UIColor *)accent100 {
return _accents[MDCPaletteAccent100Name];
}
- (UIColor *)accent200 {
return _accents[MDCPaletteAccent200Name];
}
- (UIColor *)accent400 {
return _accents[MDCPaletteAccent400Name];
}
- (UIColor *)accent700 {
return _accents[MDCPaletteAccent700Name];
}
#pragma mark - Private methods
+ (nonnull NSSet<MDCPaletteTint> *)requiredTintKeys {
return [NSSet setWithArray:@[
MDCPaletteTint50Name, MDCPaletteTint100Name, MDCPaletteTint200Name, MDCPaletteTint300Name,
MDCPaletteTint400Name, MDCPaletteTint500Name, MDCPaletteTint600Name, MDCPaletteTint700Name,
MDCPaletteTint800Name, MDCPaletteTint900Name
]];
}
@end