diff options
Diffstat (limited to 'scheme/SchemeContent.java')
-rw-r--r-- | scheme/SchemeContent.java | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/scheme/SchemeContent.java b/scheme/SchemeContent.java new file mode 100644 index 0000000..11771f0 --- /dev/null +++ b/scheme/SchemeContent.java @@ -0,0 +1,58 @@ +/* + * Copyright 2022 Google LLC + * + * 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. + */ + +package com.google.ux.material.libmonet.scheme; + +import static java.lang.Math.max; + +import com.google.ux.material.libmonet.dislike.DislikeAnalyzer; +import com.google.ux.material.libmonet.hct.Hct; +import com.google.ux.material.libmonet.palettes.TonalPalette; +import com.google.ux.material.libmonet.temperature.TemperatureCache; + +/** + * A scheme that places the source color in Scheme.primaryContainer. + * + * <p>Primary Container is the source color, adjusted for color relativity. It maintains constant + * appearance in light mode and dark mode. This adds ~5 tone in light mode, and subtracts ~5 tone in + * dark mode. + * + * <p>Tertiary Container is an analogous color, specifically, the analog of a color wheel divided + * into 6, and the precise analog is the one found by increasing hue. This is a scientifically + * grounded equivalent to rotating hue clockwise by 60 degrees. It also maintains constant + * appearance. + */ +public class SchemeContent extends DynamicScheme { + public SchemeContent(Hct sourceColorHct, boolean isDark, double contrastLevel) { + super( + sourceColorHct, + Variant.CONTENT, + isDark, + contrastLevel, + TonalPalette.fromHueAndChroma(sourceColorHct.getHue(), sourceColorHct.getChroma()), + TonalPalette.fromHueAndChroma( + sourceColorHct.getHue(), + max(sourceColorHct.getChroma() - 32.0, sourceColorHct.getChroma() * 0.5)), + TonalPalette.fromHct( + DislikeAnalyzer.fixIfDisliked( + new TemperatureCache(sourceColorHct) + .getAnalogousColors(/* count= */ 3, /* divisions= */ 6) + .get(2))), + TonalPalette.fromHueAndChroma(sourceColorHct.getHue(), sourceColorHct.getChroma() / 8.0), + TonalPalette.fromHueAndChroma( + sourceColorHct.getHue(), (sourceColorHct.getChroma() / 8.0) + 4.0)); + } +} |