mirror of
https://github.com/element-hq/element-web
synced 2024-11-27 03:36:07 +03:00
Use color values for default avatar backgrounds
We still need to convert them to URLs for the notification icon, so use a canvas (with a cache in front of it) to do that.
This commit is contained in:
parent
b1870660d8
commit
e8e99c2646
4 changed files with 26 additions and 2 deletions
Binary file not shown.
Before Width: | Height: | Size: 169 B |
Binary file not shown.
Before Width: | Height: | Size: 171 B |
Binary file not shown.
Before Width: | Height: | Size: 170 B |
|
@ -53,13 +53,37 @@ export function avatarUrlForUser(user, width, height, resizeMethod) {
|
||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function urlForColor(color) {
|
||||||
|
const size = 40;
|
||||||
|
const canvas = document.createElement("canvas");
|
||||||
|
canvas.width = size;
|
||||||
|
canvas.height = size;
|
||||||
|
const ctx = canvas.getContext("2d");
|
||||||
|
ctx.fillStyle = color;
|
||||||
|
ctx.fillRect(0, 0, size, size);
|
||||||
|
return canvas.toDataURL();
|
||||||
|
}
|
||||||
|
|
||||||
|
// XXX: Ideally we'd clear this cache when the theme changes
|
||||||
|
// but since this function is at global scope, it's a bit
|
||||||
|
// hard to install a listener here, even if there were a clear event to listen to
|
||||||
|
const colorToDataURLCache = new Map();
|
||||||
|
|
||||||
export function defaultAvatarUrlForString(s) {
|
export function defaultAvatarUrlForString(s) {
|
||||||
const images = ['03b381', '368bd6', 'ac3ba8'];
|
const defaultColors = ['#03b381', '#368bd6', '#ac3ba8'];
|
||||||
let total = 0;
|
let total = 0;
|
||||||
for (let i = 0; i < s.length; ++i) {
|
for (let i = 0; i < s.length; ++i) {
|
||||||
total += s.charCodeAt(i);
|
total += s.charCodeAt(i);
|
||||||
}
|
}
|
||||||
return require('../res/img/' + images[total % images.length] + '.png');
|
const colorIndex = total % defaultColors.length;
|
||||||
|
// overwritten color value in custom themes
|
||||||
|
const color = defaultColors[colorIndex];
|
||||||
|
let dataUrl = colorToDataURLCache.get(color);
|
||||||
|
if (!dataUrl) {
|
||||||
|
dataUrl = urlForColor(color);
|
||||||
|
colorToDataURLCache.set(color, dataUrl);
|
||||||
|
}
|
||||||
|
return dataUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue