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/59e6de350b04cf07516483dcaba76e6cc9d72005

-- 
View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/59e6de350b04cf07516483dcaba76e6cc9d72005
You're receiving this email because of your account on dev.gajim.org.


_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to