* Fix styling when theme is change in another device * Fix drawer showing behind channel screen
86 lines
2.4 KiB
JavaScript
86 lines
2.4 KiB
JavaScript
// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
|
|
// See License.txt for license information.
|
|
|
|
import {StyleSheet} from 'react-native';
|
|
|
|
export function makeStyleSheetFromTheme(getStyleFromTheme) {
|
|
let lastTheme = null;
|
|
let style = null;
|
|
|
|
return (theme) => {
|
|
if (theme !== lastTheme) {
|
|
style = StyleSheet.create(getStyleFromTheme(theme));
|
|
lastTheme = theme;
|
|
}
|
|
|
|
return style;
|
|
};
|
|
}
|
|
|
|
function normalizeColor(oldColor) {
|
|
let color = oldColor;
|
|
if (color.length && color[0] === '#') {
|
|
color = color.slice(1);
|
|
}
|
|
|
|
if (color.length === 3) {
|
|
const tempColor = color;
|
|
color = '';
|
|
|
|
color += tempColor[0] + tempColor[0];
|
|
color += tempColor[1] + tempColor[1];
|
|
color += tempColor[2] + tempColor[2];
|
|
}
|
|
|
|
return color;
|
|
}
|
|
|
|
export function changeOpacity(oldColor, opacity) {
|
|
const color = normalizeColor(oldColor);
|
|
|
|
const r = parseInt(color.substring(0, 2), 16);
|
|
const g = parseInt(color.substring(2, 4), 16);
|
|
const b = parseInt(color.substring(4, 6), 16);
|
|
|
|
return `rgba(${r},${g},${b},${opacity})`;
|
|
}
|
|
|
|
function blendComponent(background, foreground, opacity) {
|
|
return ((1 - opacity) * background) + (opacity * foreground);
|
|
}
|
|
|
|
export function blendColors(background, foreground, opacity) {
|
|
const backgroundNormalized = normalizeColor(background);
|
|
const foregroundNormalized = normalizeColor(foreground);
|
|
|
|
const r = blendComponent(
|
|
parseInt(backgroundNormalized.substring(0, 2), 16),
|
|
parseInt(foregroundNormalized.substring(0, 2), 16),
|
|
opacity
|
|
);
|
|
const g = blendComponent(
|
|
parseInt(backgroundNormalized.substring(2, 4), 16),
|
|
parseInt(foregroundNormalized.substring(2, 4), 16),
|
|
opacity
|
|
);
|
|
const b = blendComponent(
|
|
parseInt(backgroundNormalized.substring(4, 6), 16),
|
|
parseInt(foregroundNormalized.substring(4, 6), 16),
|
|
opacity
|
|
);
|
|
|
|
return `rgb(${r},${g},${b})`;
|
|
}
|
|
|
|
export function concatStyles(...styles) {
|
|
return [].concat(styles);
|
|
}
|
|
|
|
export function setNavigatorStyles(navigator, theme) {
|
|
navigator.setStyle({
|
|
navBarTextColor: theme.sidebarHeaderTextColor,
|
|
navBarBackgroundColor: theme.sidebarHeaderBg,
|
|
navBarButtonColor: theme.sidebarHeaderTextColor,
|
|
screenBackgroundColor: theme.centerChannelBg
|
|
});
|
|
}
|