diff options
| author | Henry Jameson <me@hjkos.com> | 2020-02-07 01:25:26 +0200 |
|---|---|---|
| committer | Henry Jameson <me@hjkos.com> | 2020-02-07 01:25:26 +0200 |
| commit | 611da13a4b252c10f1613d70d877e2d039ba64b7 (patch) | |
| tree | 8eb14e7855d9d0ba595502a3d2d66d4fa3113a36 /src/services | |
| parent | e46bb942260d192beb601727519ed90df5c62494 (diff) | |
Better Disabled buttons support. Mammal theme fixes. Implemented proper
context-aware `mod` argument - now checks lightness of "variant" color. needs
retesting tho
Diffstat (limited to 'src/services')
| -rw-r--r-- | src/services/style_setter/style_setter.js | 17 | ||||
| -rw-r--r-- | src/services/theme_data/pleromafe.js | 31 | ||||
| -rw-r--r-- | src/services/theme_data/theme_data.service.js | 9 |
3 files changed, 27 insertions, 30 deletions
diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js index 533145d4..b9a23ad7 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -114,10 +114,7 @@ export const generateColors = (themeData) => { ? colors2to3(themeData.colors || themeData) : themeData.colors || themeData - const isLightOnDark = convert(sourceColors.bg).hsl.l < convert(sourceColors.text).hsl.l - const mod = isLightOnDark ? 1 : -1 - - const { colors, opacity } = getColors(sourceColors, themeData.opacity || {}, mod) + const { colors, opacity } = getColors(sourceColors, themeData.opacity || {}) const htmlColors = Object.entries(colors) .reduce((acc, [k, v]) => { @@ -381,25 +378,17 @@ export const getThemes = () => { } export const colors2to3 = (colors) => { return Object.entries(colors).reduce((acc, [slotName, color]) => { - const btnStates = ['', 'Pressed', 'Disabled', 'Toggled'] const btnPositions = ['', 'Panel', 'TopBar'] switch (slotName) { case 'lightBg': return { ...acc, highlight: color } - case 'btn': - return { - ...acc, - ...btnStates.reduce((stateAcc, state) => ({ ...stateAcc, ['btn' + state]: color }), {}) - } case 'btnText': return { ...acc, ...btnPositions - .map(position => btnStates.map(state => state + position)) - .flat() .reduce( - (statePositionAcc, statePosition) => - ({ ...statePositionAcc, ['btn' + statePosition + 'Text']: color }) + (statePositionAcc, position) => + ({ ...statePositionAcc, ['btn' + position + 'Text']: color }) , {} ) } diff --git a/src/services/theme_data/pleromafe.js b/src/services/theme_data/pleromafe.js index 354009ee..98fba5ef 100644 --- a/src/services/theme_data/pleromafe.js +++ b/src/services/theme_data/pleromafe.js @@ -85,6 +85,8 @@ export const SLOT_INHERITANCE = { }, text: { depends: [], + layer: 'bg', + opacity: null, priority: 1 }, underlay: { @@ -422,6 +424,7 @@ export const SLOT_INHERITANCE = { // Buttons btn: { depends: ['fg'], + variant: 'btn', opacity: 'btn' }, btnText: { @@ -430,20 +433,23 @@ export const SLOT_INHERITANCE = { textColor: true }, btnPanelText: { - depends: ['panelText'], + depends: ['btnText'], layer: 'btnPanel', variant: 'btn', textColor: true }, btnTopBarText: { - depends: ['topBarText'], + depends: ['btnText'], layer: 'btnTopBar', variant: 'btn', textColor: true }, // Buttons: pressed - btnPressed: '--btn', + btnPressed: { + depends: ['btn'], + layer: 'btn' + }, btnPressedText: { depends: ['btnText'], layer: 'btn', @@ -451,7 +457,8 @@ export const SLOT_INHERITANCE = { textColor: true }, btnPressedPanel: { - depends: ['btnPressed'] + depends: ['btnPressed'], + layer: 'btn' }, btnPressedPanelText: { depends: ['btnPanelText'], @@ -469,6 +476,7 @@ export const SLOT_INHERITANCE = { // Buttons: toggled btnToggled: { depends: ['btn'], + layer: 'btn', color: (mod, btn) => brightness(mod * 20, btn).rgb }, btnToggledText: { @@ -496,25 +504,22 @@ export const SLOT_INHERITANCE = { color: (mod, btn, bg) => alphaBlend(btn, 0.5, bg) }, btnDisabledText: { - depends: ['btnText'], + depends: ['btnText', 'btnDisabled'], layer: 'btn', variant: 'btnDisabled', - textColor: true, - color: (mod, text) => brightness(mod * -60, text).rgb + color: (mod, text, btn) => alphaBlend(text, 0.5, btn) }, btnDisabledPanelText: { - depends: ['btnPanelText'], + depends: ['btnPanelText', 'btnDisabled'], layer: 'btnPanel', variant: 'btnDisabled', - textColor: true, - color: (mod, text) => brightness(mod * -60, text).rgb + color: (mod, text, btn) => alphaBlend(text, 0.5, btn) }, btnDisabledTopBarText: { - depends: ['btnTopBarText'], + depends: ['btnTopBarText', 'btnDisabled'], layer: 'btnTopBar', variant: 'btnDisabled', - textColor: true, - color: (mod, text) => brightness(mod * -60, text).rgb + color: (mod, text, btn) => alphaBlend(text, 0.5, btn) }, // Input fields diff --git a/src/services/theme_data/theme_data.service.js b/src/services/theme_data/theme_data.service.js index 49b99148..e9ed3781 100644 --- a/src/services/theme_data/theme_data.service.js +++ b/src/services/theme_data/theme_data.service.js @@ -255,14 +255,17 @@ export const computeDynamicColor = (sourceColor, getColor, mod) => { } /** - * THE function you want to use. Takes provided colors and opacities, mod + * THE function you want to use. Takes provided colors and opacities * value and uses inheritance data to figure out color needed for the slot. */ -export const getColors = (sourceColors, sourceOpacity, mod) => SLOT_ORDERED.reduce(({ colors, opacity }, key) => { +export const getColors = (sourceColors, sourceOpacity) => SLOT_ORDERED.reduce(({ colors, opacity }, key) => { const value = SLOT_INHERITANCE[key] const isObject = typeof value === 'object' const isString = typeof value === 'string' const sourceColor = sourceColors[key] + const variant = value.variant || value.layer || 'bg' + const isLightOnDark = relativeLuminance(colors[variant] || sourceColors[variant]) < 0.5 + const mod = isLightOnDark ? 1 : -1 let outputColor = null if (sourceColor) { // Color is defined in source color @@ -318,7 +321,7 @@ export const getColors = (sourceColors, sourceOpacity, mod) => SLOT_ORDERED.redu opacity ) ) - const isLightOnDark = relativeLuminance(bg) > 127 + const isLightOnDark = relativeLuminance(bg) > 0.5 const mod = isLightOnDark ? 1 : -1 if (value.textColor === 'bw') { |
