Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Hörist <philipp@hoerist.com>2022-10-10 23:01:26 +0300
committerPhilipp Hörist <philipp@hoerist.com>2022-10-10 23:01:37 +0300
commit59e6de350b04cf07516483dcaba76e6cc9d72005 (patch)
treee6341985ef381a2dbce103fb6250800b781de3be
parentca13e02e7b25cffb6bc2f0aa9805acc5c12efd7b (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.py15
-rw-r--r--gajim/gtk/util.py15
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)