1*970e1046SAndroid Build Coastguard Worker /* 2*970e1046SAndroid Build Coastguard Worker * Copyright 2021 Google LLC 3*970e1046SAndroid Build Coastguard Worker * 4*970e1046SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*970e1046SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*970e1046SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*970e1046SAndroid Build Coastguard Worker * 8*970e1046SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*970e1046SAndroid Build Coastguard Worker * 10*970e1046SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*970e1046SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*970e1046SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*970e1046SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*970e1046SAndroid Build Coastguard Worker * limitations under the License. 15*970e1046SAndroid Build Coastguard Worker */ 16*970e1046SAndroid Build Coastguard Worker 17*970e1046SAndroid Build Coastguard Worker package com.google.ux.material.libmonet.palettes; 18*970e1046SAndroid Build Coastguard Worker 19*970e1046SAndroid Build Coastguard Worker import static java.lang.Math.max; 20*970e1046SAndroid Build Coastguard Worker import static java.lang.Math.min; 21*970e1046SAndroid Build Coastguard Worker 22*970e1046SAndroid Build Coastguard Worker import com.google.ux.material.libmonet.hct.Hct; 23*970e1046SAndroid Build Coastguard Worker 24*970e1046SAndroid Build Coastguard Worker /** 25*970e1046SAndroid Build Coastguard Worker * An intermediate concept between the key color for a UI theme, and a full color scheme. 5 sets of 26*970e1046SAndroid Build Coastguard Worker * tones are generated, all except one use the same hue as the key color, and all vary in chroma. 27*970e1046SAndroid Build Coastguard Worker */ 28*970e1046SAndroid Build Coastguard Worker public final class CorePalette { 29*970e1046SAndroid Build Coastguard Worker public TonalPalette a1; 30*970e1046SAndroid Build Coastguard Worker public TonalPalette a2; 31*970e1046SAndroid Build Coastguard Worker public TonalPalette a3; 32*970e1046SAndroid Build Coastguard Worker public TonalPalette n1; 33*970e1046SAndroid Build Coastguard Worker public TonalPalette n2; 34*970e1046SAndroid Build Coastguard Worker public TonalPalette error; 35*970e1046SAndroid Build Coastguard Worker 36*970e1046SAndroid Build Coastguard Worker /** 37*970e1046SAndroid Build Coastguard Worker * Create key tones from a color. 38*970e1046SAndroid Build Coastguard Worker * 39*970e1046SAndroid Build Coastguard Worker * @param argb ARGB representation of a color 40*970e1046SAndroid Build Coastguard Worker */ of(int argb)41*970e1046SAndroid Build Coastguard Worker public static CorePalette of(int argb) { 42*970e1046SAndroid Build Coastguard Worker return new CorePalette(argb, false); 43*970e1046SAndroid Build Coastguard Worker } 44*970e1046SAndroid Build Coastguard Worker 45*970e1046SAndroid Build Coastguard Worker /** 46*970e1046SAndroid Build Coastguard Worker * Create content key tones from a color. 47*970e1046SAndroid Build Coastguard Worker * 48*970e1046SAndroid Build Coastguard Worker * @param argb ARGB representation of a color 49*970e1046SAndroid Build Coastguard Worker */ contentOf(int argb)50*970e1046SAndroid Build Coastguard Worker public static CorePalette contentOf(int argb) { 51*970e1046SAndroid Build Coastguard Worker return new CorePalette(argb, true); 52*970e1046SAndroid Build Coastguard Worker } 53*970e1046SAndroid Build Coastguard Worker CorePalette(int argb, boolean isContent)54*970e1046SAndroid Build Coastguard Worker private CorePalette(int argb, boolean isContent) { 55*970e1046SAndroid Build Coastguard Worker Hct hct = Hct.fromInt(argb); 56*970e1046SAndroid Build Coastguard Worker double hue = hct.getHue(); 57*970e1046SAndroid Build Coastguard Worker double chroma = hct.getChroma(); 58*970e1046SAndroid Build Coastguard Worker if (isContent) { 59*970e1046SAndroid Build Coastguard Worker this.a1 = TonalPalette.fromHueAndChroma(hue, chroma); 60*970e1046SAndroid Build Coastguard Worker this.a2 = TonalPalette.fromHueAndChroma(hue, chroma / 3.); 61*970e1046SAndroid Build Coastguard Worker this.a3 = TonalPalette.fromHueAndChroma(hue + 60., chroma / 2.); 62*970e1046SAndroid Build Coastguard Worker this.n1 = TonalPalette.fromHueAndChroma(hue, min(chroma / 12., 4.)); 63*970e1046SAndroid Build Coastguard Worker this.n2 = TonalPalette.fromHueAndChroma(hue, min(chroma / 6., 8.)); 64*970e1046SAndroid Build Coastguard Worker } else { 65*970e1046SAndroid Build Coastguard Worker this.a1 = TonalPalette.fromHueAndChroma(hue, max(48., chroma)); 66*970e1046SAndroid Build Coastguard Worker this.a2 = TonalPalette.fromHueAndChroma(hue, 16.); 67*970e1046SAndroid Build Coastguard Worker this.a3 = TonalPalette.fromHueAndChroma(hue + 60., 24.); 68*970e1046SAndroid Build Coastguard Worker this.n1 = TonalPalette.fromHueAndChroma(hue, 4.); 69*970e1046SAndroid Build Coastguard Worker this.n2 = TonalPalette.fromHueAndChroma(hue, 8.); 70*970e1046SAndroid Build Coastguard Worker } 71*970e1046SAndroid Build Coastguard Worker this.error = TonalPalette.fromHueAndChroma(25, 84.); 72*970e1046SAndroid Build Coastguard Worker } 73*970e1046SAndroid Build Coastguard Worker } 74