1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
/*
* Copyright 2023 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.dynamiccolor;
import androidx.annotation.NonNull;
/**
* Documents a constraint between two DynamicColors, in which their tones must have a certain
* distance from each other.
*
* <p>Prefer a DynamicColor with a background, this is for special cases when designers want tonal
* distance, literally contrast, between two colors that don't have a background / foreground
* relationship or a contrast guarantee.
*/
public final class ToneDeltaPair {
/** The first role in a pair. */
private final DynamicColor roleA;
/** The second role in a pair. */
private final DynamicColor roleB;
/** Required difference between tones. Absolute value, negative values have undefined behavior. */
private final double delta;
/** The relative relation between tones of roleA and roleB, as described above. */
private final TonePolarity polarity;
/**
* Whether these two roles should stay on the same side of the "awkward zone" (T50-59). This is
* necessary for certain cases where one role has two backgrounds.
*/
private final boolean stayTogether;
/**
* Documents a constraint in tone distance between two DynamicColors.
*
* <p>The polarity is an adjective that describes "A", compared to "B".
*
* <p>For instance, ToneDeltaPair(A, B, 15, 'darker', stayTogether) states that A's tone should be
* at least 15 darker than B's.
*
* <p>'nearer' and 'farther' describes closeness to the surface roles. For instance,
* ToneDeltaPair(A, B, 10, 'nearer', stayTogether) states that A should be 10 lighter than B in
* light mode, and 10 darker than B in dark mode.
*
* @param roleA The first role in a pair.
* @param roleB The second role in a pair.
* @param delta Required difference between tones. Absolute value, negative values have undefined
* behavior.
* @param polarity The relative relation between tones of roleA and roleB, as described above.
* @param stayTogether Whether these two roles should stay on the same side of the "awkward zone"
* (T50-59). This is necessary for certain cases where one role has two backgrounds.
*/
public ToneDeltaPair(
DynamicColor roleA,
DynamicColor roleB,
double delta,
TonePolarity polarity,
boolean stayTogether) {
this.roleA = roleA;
this.roleB = roleB;
this.delta = delta;
this.polarity = polarity;
this.stayTogether = stayTogether;
}
@NonNull
public DynamicColor getRoleA() {
return roleA;
}
@NonNull
public DynamicColor getRoleB() {
return roleB;
}
@NonNull
public double getDelta() {
return delta;
}
@NonNull
public TonePolarity getPolarity() {
return polarity;
}
@NonNull
public boolean getStayTogether() {
return stayTogether;
}
}
|