diff options
author | Philipp Hörist <philipp@hoerist.com> | 2022-10-10 23:01:26 +0300 |
---|---|---|
committer | Philipp Hörist <philipp@hoerist.com> | 2022-10-10 23:01:37 +0300 |
commit | 59e6de350b04cf07516483dcaba76e6cc9d72005 (patch) | |
tree | e6341985ef381a2dbce103fb6250800b781de3be | |
parent | ca13e02e7b25cffb6bc2f0aa9805acc5c12efd7b (diff) |
imprv: Avatar: Follow modernxmpps suggestions for color generation
Single Chat: Bare JID
Private Group Chat: Bare JID
Public Group Chat: Resource
-rw-r--r-- | gajim/gtk/avatar.py | 15 | ||||
-rw-r--r-- | gajim/gtk/util.py | 15 |
2 files changed, 23 insertions, 7 deletions
diff --git a/gajim/gtk/avatar.py b/gajim/gtk/avatar.py index 9ac5ccad3..e8f3cb943 100644 --- a/gajim/gtk/avatar.py +++ b/gajim/gtk/avatar.py @@ -41,9 +41,9 @@ from gajim.common.const import StyleAttr 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 @@ class AvatarStorage(metaclass=Singleton): 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 @@ class AvatarStorage(metaclass=Singleton): 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 diff --git a/gajim/gtk/util.py b/gajim/gtk/util.py index d9e733e6b..6946ed509 100644 --- a/gajim/gtk/util.py +++ b/gajim/gtk/util.py @@ -48,12 +48,14 @@ from nbxmpp.structs import TuneData 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) |