Skip to content

Commit 113d94f

Browse files
Add inverse color tokens
* Inverse surface * Inverse container surface, on container and container outline For #400
1 parent c628797 commit 113d94f

14 files changed

+569
-56
lines changed

theming/src/main/java/org/pushingpixels/radiance/theming/api/palette/ColorSchemeUtils.java

Lines changed: 106 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,21 @@ public float getOnContainerDisabledAlpha() {
113113
public float getContainerOutlineDisabledAlpha() {
114114
return tonalContainerColorResolver.getContainerOutlineDisabledAlpha(dynamicScheme);
115115
}
116+
117+
@Override
118+
public Color getInverseContainerSurface() {
119+
return tonalContainerColorResolver.getInverseContainerSurface(dynamicScheme);
120+
}
121+
122+
@Override
123+
public Color getInverseOnContainer() {
124+
return tonalContainerColorResolver.getInverseOnContainer(dynamicScheme);
125+
}
126+
127+
@Override
128+
public Color getInverseContainerOutline() {
129+
return tonalContainerColorResolver.getInverseContainerOutline(dynamicScheme);
130+
}
116131
};
117132
}
118133

@@ -168,23 +183,28 @@ private static ContainerColorTokens overlay(ContainerColorTokens original,
168183
overlay, (int) (255 * overlayAmount));
169184

170185
// Apply overlay on the container tokens
171-
Color containerLowest = RadianceColorUtilities.overlayColor(
186+
Color containerSurfaceLowest = RadianceColorUtilities.overlayColor(
172187
original.getContainerSurfaceLowest(), overlayWithAlpha);
173-
Color containerLow = RadianceColorUtilities.overlayColor(
188+
Color containerSurfaceLow = RadianceColorUtilities.overlayColor(
174189
original.getContainerSurfaceLow(), overlayWithAlpha);
175-
Color container = RadianceColorUtilities.overlayColor(
190+
Color containerSurface = RadianceColorUtilities.overlayColor(
176191
original.getContainerSurface(), overlayWithAlpha);
177-
Color containerHigh = RadianceColorUtilities.overlayColor(
192+
Color containerSurfaceHigh = RadianceColorUtilities.overlayColor(
178193
original.getContainerSurfaceHigh(), overlayWithAlpha);
179-
Color containerHighest = RadianceColorUtilities.overlayColor(
194+
Color containerSurfaceHighest = RadianceColorUtilities.overlayColor(
180195
original.getContainerSurfaceHighest(), overlayWithAlpha);
196+
Color inverseContainerSurface = RadianceColorUtilities.overlayColor(
197+
original.getInverseContainerSurface(), overlayWithAlpha);
181198

182199
// Leave on container and container outline tokens as they are
183200
Color onContainer = original.getOnContainer();
184201
Color onContainerVariant = original.getOnContainerVariant();
185202
Color containerOutline = original.getContainerOutline();
186203
Color containerOutlineVariant = original.getContainerOutlineVariant();
187204

205+
Color inverseOnContainer = original.getInverseOnContainer();
206+
Color inverseContainerOutline = original.getInverseContainerOutline();
207+
188208
return new ContainerColorTokens() {
189209
@Override
190210
public boolean isDark() {
@@ -193,27 +213,27 @@ public boolean isDark() {
193213

194214
@Override
195215
public Color getContainerSurfaceLowest() {
196-
return containerLowest;
216+
return containerSurfaceLowest;
197217
}
198218

199219
@Override
200220
public Color getContainerSurfaceLow() {
201-
return containerLow;
221+
return containerSurfaceLow;
202222
}
203223

204224
@Override
205225
public Color getContainerSurface() {
206-
return container;
226+
return containerSurface;
207227
}
208228

209229
@Override
210230
public Color getContainerSurfaceHigh() {
211-
return containerHigh;
231+
return containerSurfaceHigh;
212232
}
213233

214234
@Override
215235
public Color getContainerSurfaceHighest() {
216-
return containerHighest;
236+
return containerSurfaceHighest;
217237
}
218238

219239
@Override
@@ -250,6 +270,21 @@ public float getOnContainerDisabledAlpha() {
250270
public float getContainerOutlineDisabledAlpha() {
251271
return original.getContainerOutlineDisabledAlpha();
252272
}
273+
274+
@Override
275+
public Color getInverseContainerSurface() {
276+
return inverseContainerSurface;
277+
}
278+
279+
@Override
280+
public Color getInverseOnContainer() {
281+
return inverseOnContainer;
282+
}
283+
284+
@Override
285+
public Color getInverseContainerOutline() {
286+
return inverseContainerOutline;
287+
}
253288
};
254289
}
255290

@@ -387,6 +422,11 @@ public Color getSurfaceBright() {
387422
return schemeColorResolver.getSurfaceBright(scheme);
388423
}
389424

425+
@Override
426+
public Color getInverseSurface() {
427+
return schemeColorResolver.getInverseSurface(scheme);
428+
}
429+
390430
@Override
391431
public ContainerColorTokens getNeutralContainerTokens() {
392432
return neutralContainerTokens;
@@ -587,6 +627,21 @@ public float getOnContainerDisabledAlpha() {
587627
public float getContainerOutlineDisabledAlpha() {
588628
return colorResolver.getContainerOutlineDisabledAlpha(dynamicPalette);
589629
}
630+
631+
@Override
632+
public Color getInverseContainerSurface() {
633+
return colorResolver.getInverseContainerSurface(dynamicPalette);
634+
}
635+
636+
@Override
637+
public Color getInverseOnContainer() {
638+
return colorResolver.getInverseOnContainer(dynamicPalette);
639+
}
640+
641+
@Override
642+
public Color getInverseContainerOutline() {
643+
return colorResolver.getInverseContainerOutline(dynamicPalette);
644+
}
590645
};
591646
}
592647

@@ -631,6 +686,11 @@ public Color getSurfaceBright() {
631686
return colorResolver.getSurfaceBright(dynamicPalette);
632687
}
633688

689+
@Override
690+
public Color getInverseSurface() {
691+
return colorResolver.getInverseSurface(dynamicPalette);
692+
}
693+
634694
@Override
635695
public ContainerColorTokens getBaseContainerTokens() {
636696
return baseTokens;
@@ -713,6 +773,24 @@ public float getOnContainerDisabledAlpha() {
713773
public float getContainerOutlineDisabledAlpha() {
714774
return original.getContainerOutlineDisabledAlpha();
715775
}
776+
777+
@Override
778+
public Color getInverseContainerSurface() {
779+
return new Color(Blend.cam16Ucs(original.getInverseContainerSurface().getRGB(),
780+
Color.WHITE.getRGB(), tintFactor));
781+
}
782+
783+
@Override
784+
public Color getInverseOnContainer() {
785+
return new Color(Blend.cam16Ucs(original.getInverseOnContainer().getRGB(),
786+
Color.WHITE.getRGB(), tintFactor));
787+
}
788+
789+
@Override
790+
public Color getInverseContainerOutline() {
791+
return new Color(Blend.cam16Ucs(original.getInverseContainerOutline().getRGB(),
792+
Color.WHITE.getRGB(), tintFactor));
793+
}
716794
};
717795
}
718796

@@ -791,6 +869,24 @@ public float getOnContainerDisabledAlpha() {
791869
public float getContainerOutlineDisabledAlpha() {
792870
return original.getContainerOutlineDisabledAlpha();
793871
}
872+
873+
@Override
874+
public Color getInverseContainerSurface() {
875+
return new Color(Blend.cam16Ucs(original.getInverseContainerSurface().getRGB(),
876+
Color.BLACK.getRGB(), shadeFactor));
877+
}
878+
879+
@Override
880+
public Color getInverseOnContainer() {
881+
return new Color(Blend.cam16Ucs(original.getInverseOnContainer().getRGB(),
882+
Color.BLACK.getRGB(), shadeFactor));
883+
}
884+
885+
@Override
886+
public Color getInverseContainerOutline() {
887+
return new Color(Blend.cam16Ucs(original.getInverseContainerOutline().getRGB(),
888+
Color.BLACK.getRGB(), shadeFactor));
889+
}
794890
};
795891
}
796892
}

theming/src/main/java/org/pushingpixels/radiance/theming/api/palette/ContainerColorTokens.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,8 @@ public interface ContainerColorTokens {
4949
float getContainerSurfaceDisabledAlpha();
5050
float getOnContainerDisabledAlpha();
5151
float getContainerOutlineDisabledAlpha();
52+
53+
Color getInverseContainerSurface();
54+
Color getInverseOnContainer();
55+
Color getInverseContainerOutline();
5256
}

theming/src/main/java/org/pushingpixels/radiance/theming/api/palette/ExtendedContainerColorTokens.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,7 @@ public interface ExtendedContainerColorTokens {
3535
Color getSurface();
3636
Color getSurfaceDim();
3737
Color getSurfaceBright();
38+
Color getInverseSurface();
39+
3840
ContainerColorTokens getBaseContainerTokens();
3941
}

theming/src/main/java/org/pushingpixels/radiance/theming/api/palette/PaletteContainerColorsResolver.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ public interface PaletteContainerColorsResolver {
5454
float getOnContainerDisabledAlpha(DynamicPalette dynamicPalette);
5555
float getContainerOutlineDisabledAlpha(DynamicPalette dynamicPalette);
5656

57+
Color getInverseSurface(DynamicPalette dynamicPalette);
58+
Color getInverseContainerSurface(DynamicPalette dynamicPalette);
59+
Color getInverseOnContainer(DynamicPalette dynamicPalette);
60+
Color getInverseContainerOutline(DynamicPalette dynamicPalette);
61+
5762
default PaletteContainerColorsResolver overlayWith(PaletteContainerColorsResolverOverlay overlay) {
5863
return PaletteResolverUtils.overlayWith(this, overlay);
5964
}

theming/src/main/java/org/pushingpixels/radiance/theming/api/palette/PaletteContainerColorsResolverOverlay.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ public class PaletteContainerColorsResolverOverlay {
4949
private Function<DynamicPalette, Float> containerSurfaceDisabledAlpha;
5050
private Function<DynamicPalette, Float> onContainerDisabledAlpha;
5151
private Function<DynamicPalette, Float> containerOutlineDisabledAlpha;
52+
private Function<DynamicPalette, Integer> inverseSurface;
53+
private Function<DynamicPalette, Integer> inverseContainerSurface;
54+
private Function<DynamicPalette, Integer> inverseOnContainer;
55+
private Function<DynamicPalette, Integer> inverseContainerOutline;
5256

5357
public static Builder builder() {
5458
return new Builder();
@@ -116,6 +120,22 @@ public Function<DynamicPalette, Float> getContainerOutlineDisabledAlpha() {
116120
return this.containerOutlineDisabledAlpha;
117121
}
118122

123+
public Function<DynamicPalette, Integer> getInverseSurface() {
124+
return this.inverseSurface;
125+
}
126+
127+
public Function<DynamicPalette, Integer> getInverseContainerSurface() {
128+
return this.inverseContainerSurface;
129+
}
130+
131+
public Function<DynamicPalette, Integer> getInverseOnContainer() {
132+
return this.inverseOnContainer;
133+
}
134+
135+
public Function<DynamicPalette, Integer> getInverseContainerOutline() {
136+
return this.inverseContainerOutline;
137+
}
138+
119139
public final static class Builder {
120140
private Function<DynamicPalette, Integer> surface;
121141
private Function<DynamicPalette, Integer> surfaceDim;
@@ -132,6 +152,10 @@ public final static class Builder {
132152
private Function<DynamicPalette, Float> containerSurfaceDisabledAlpha;
133153
private Function<DynamicPalette, Float> onContainerDisabledAlpha;
134154
private Function<DynamicPalette, Float> containerOutlineDisabledAlpha;
155+
private Function<DynamicPalette, Integer> inverseSurface;
156+
private Function<DynamicPalette, Integer> inverseContainerSurface;
157+
private Function<DynamicPalette, Integer> inverseOnContainer;
158+
private Function<DynamicPalette, Integer> inverseContainerOutline;
135159

136160
private Builder() {}
137161

@@ -213,6 +237,28 @@ public Builder containerOutlineDisabledAlpha(
213237
return this;
214238
}
215239

240+
public Builder inverseSurface(Function<DynamicPalette, Integer> inverseSurface) {
241+
this.inverseSurface = inverseSurface;
242+
return this;
243+
}
244+
245+
public Builder inverseContainerSurface(
246+
Function<DynamicPalette, Integer> inverseContainerSurface) {
247+
this.inverseContainerSurface = inverseContainerSurface;
248+
return this;
249+
}
250+
251+
public Builder inverseOnContainer(Function<DynamicPalette, Integer> inverseOnContainer) {
252+
this.inverseOnContainer = inverseOnContainer;
253+
return this;
254+
}
255+
256+
public Builder inverseContainerOutline(
257+
Function<DynamicPalette, Integer> inverseContainerOutline) {
258+
this.inverseContainerOutline = inverseContainerOutline;
259+
return this;
260+
}
261+
216262
public PaletteContainerColorsResolverOverlay build() {
217263
PaletteContainerColorsResolverOverlay result = new PaletteContainerColorsResolverOverlay();
218264
result.surface = this.surface;
@@ -230,6 +276,10 @@ public PaletteContainerColorsResolverOverlay build() {
230276
result.containerSurfaceDisabledAlpha = this.containerSurfaceDisabledAlpha;
231277
result.onContainerDisabledAlpha = this.onContainerDisabledAlpha;
232278
result.containerOutlineDisabledAlpha = this.containerOutlineDisabledAlpha;
279+
result.inverseSurface = this.inverseSurface;
280+
result.inverseContainerSurface = this.inverseContainerSurface;
281+
result.inverseOnContainer = this.inverseOnContainer;
282+
result.inverseContainerOutline = this.inverseContainerOutline;
233283
return result;
234284
}
235285
}

theming/src/main/java/org/pushingpixels/radiance/theming/api/palette/PaletteResolverUtils.java

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,26 @@ public float getOnContainerDisabledAlpha(DynamicPalette dynamicPalette) {
112112
public float getContainerOutlineDisabledAlpha(DynamicPalette dynamicPalette) {
113113
return 0.35f;
114114
}
115+
116+
@Override
117+
public Color getInverseSurface(DynamicPalette dynamicPalette) {
118+
return new Color(dynamicPalette.getInverseSurface());
119+
}
120+
121+
@Override
122+
public Color getInverseContainerSurface(DynamicPalette dynamicPalette) {
123+
return new Color(dynamicPalette.getInverseTonalContainerSurface());
124+
}
125+
126+
@Override
127+
public Color getInverseOnContainer(DynamicPalette dynamicPalette) {
128+
return new Color(dynamicPalette.getInverseOnTonalContainer());
129+
}
130+
131+
@Override
132+
public Color getInverseContainerOutline(DynamicPalette dynamicPalette) {
133+
return new Color(dynamicPalette.getInverseTonalContainerOutline());
134+
}
115135
};
116136
return result;
117137
}
@@ -268,6 +288,46 @@ public float getContainerOutlineDisabledAlpha(DynamicPalette dynamicPalette) {
268288
return spec.apply(dynamicPalette);
269289
}
270290
}
291+
292+
@Override
293+
public Color getInverseSurface(DynamicPalette dynamicPalette) {
294+
Function<DynamicPalette, Integer> spec = overlay.getInverseSurface();
295+
if (spec == null) {
296+
return original.getInverseSurface(dynamicPalette);
297+
} else {
298+
return new Color(spec.apply(dynamicPalette), true);
299+
}
300+
}
301+
302+
@Override
303+
public Color getInverseContainerSurface(DynamicPalette dynamicPalette) {
304+
Function<DynamicPalette, Integer> spec = overlay.getInverseContainerSurface();
305+
if (spec == null) {
306+
return original.getInverseContainerSurface(dynamicPalette);
307+
} else {
308+
return new Color(spec.apply(dynamicPalette), true);
309+
}
310+
}
311+
312+
@Override
313+
public Color getInverseOnContainer(DynamicPalette dynamicPalette) {
314+
Function<DynamicPalette, Integer> spec = overlay.getInverseOnContainer();
315+
if (spec == null) {
316+
return original.getInverseOnContainer(dynamicPalette);
317+
} else {
318+
return new Color(spec.apply(dynamicPalette), true);
319+
}
320+
}
321+
322+
@Override
323+
public Color getInverseContainerOutline(DynamicPalette dynamicPalette) {
324+
Function<DynamicPalette, Integer> spec = overlay.getInverseContainerOutline();
325+
if (spec == null) {
326+
return original.getInverseContainerOutline(dynamicPalette);
327+
} else {
328+
return new Color(spec.apply(dynamicPalette), true);
329+
}
330+
}
271331
};
272332
}
273333
}

0 commit comments

Comments
 (0)