Philipp Hörist pushed to branch master at gajim / gajim
Commits: 59e6de35 by Philipp Hörist at 2022-10-10T22:01:37+02:00 imprv: Avatar: Follow modernxmpps suggestions for color generation
Single Chat: Bare JID Private Group Chat: Bare JID Public Group Chat: Resource
- - - - -
2 changed files:
- gajim/gtk/avatar.py - gajim/gtk/util.py
Changes:
===================================== gajim/gtk/avatar.py ===================================== @@ -41,9 +41,9 @@
from .const import DEFAULT_WORKSPACE_COLOR from .emoji_data_gtk import get_emoji_data +from .util import get_contact_color from .util import load_icon_surface from .util import load_pixbuf -from .util import text_to_color from .util import scale_with_ratio from .util import get_css_show_class from .util import convert_rgb_string_to_float @@ -124,12 +124,11 @@ def generate_avatar(letters: str,
@lru_cache(maxsize=None) def generate_default_avatar(letter: str, - color_string: str, + color: tuple[float, float, float], size: int, scale: int, style: str = 'circle') -> cairo.ImageSurface:
- color = text_to_color(color_string) surface = generate_avatar(letter, color, size, scale) surface = clip(surface, style) surface.set_device_scale(scale, scale) @@ -414,11 +413,10 @@ def get_surface(self, return surface
name = contact.name - color_string = str(contact.jid) - + color = get_contact_color(contact) letter = generate_avatar_letter(name) surface = generate_default_avatar( - letter, color_string, size, scale, style=style) + letter, color, size, scale, style=style) if show is not None: surface = add_status_to_avatar(surface, show) self._cache[jid][(size, scale, show)] = surface @@ -457,9 +455,12 @@ def get_muc_surface(self, app.storage.cache.set_muc(jid, 'avatar', None)
client = app.get_client(account) + contact = client.get_module('Contacts').get_bare_contact(jid) + name = get_groupchat_name(client, jid) + color = get_contact_color(contact) letter = generate_avatar_letter(name) - surface = generate_default_avatar(letter, str(jid), size, scale, style) + surface = generate_default_avatar(letter, color, size, scale, style) self._cache[jid][(size, scale, None)] = surface return surface
===================================== gajim/gtk/util.py ===================================== @@ -48,12 +48,14 @@
from gajim.common import app from gajim.common import configpaths +from gajim.common import types from gajim.common.i18n import _ from gajim.common.helpers import URL_REGEX from gajim.common.const import LOCATION_DATA from gajim.common.const import Display from gajim.common.const import StyleAttr from gajim.common.ged import EventHelper as CommonEventHelper +from gajim.common.modules.contacts import GroupchatParticipant from gajim.common.styling import PlainBlock from gajim.common.structs import VariantMixin
@@ -507,6 +509,19 @@ def text_to_color(text: str) -> tuple[float, float, float]: return nbxmpp.util.text_to_color(text, background) # type: ignore
+def get_contact_color(contact: types.ChatContactT + ) -> tuple[float, float, float]: + + if isinstance(contact, GroupchatParticipant): + if contact.room.muc_context in (None, 'public'): + return text_to_color(contact.name) + + if contact.real_jid is not None: + return text_to_color(str(contact.real_jid)) + + return text_to_color(str(contact.jid)) + + def get_color_for_account(account: str) -> str: col_r, col_g, col_b = text_to_color(account) rgba = Gdk.RGBA(red=col_r, green=col_g, blue=col_b)
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/commit/59e6de350b04cf07516483dcaba76e6cc...