Philipp Hörist pushed to branch mainwindow at gajim / gajim


Commits:
002da9f8 by lovetox at 2021-03-02T18:09:21+01:00
Refactor Avatar clipping

- - - - -


1 changed file:

- gajim/gtk/avatar.py


Changes:

=====================================
gajim/gtk/avatar.py
=====================================
@@ -86,10 +86,7 @@ def generate_avatar(letters, color, size, scale):
 def generate_default_avatar(letter, color_string, size, scale, style='circle'):
     color = text_to_color(color_string)
     surface = generate_avatar(letter, color, size, scale)
-    if style == 'circle':
-        surface = clip_circle(surface)
-    elif style == 'round-corners':
-        surface = round_corners(surface)
+    surface = clip(surface, style)
     surface.set_device_scale(scale, scale)
     return surface
 
@@ -97,10 +94,7 @@ def generate_default_avatar(letter, color_string, size, 
scale, style='circle'):
 @lru_cache(maxsize=None)
 def make_workspace_avatar(letter, color, size, scale, style='round-corners'):
     surface = generate_avatar(letter, color, size, scale)
-    if style == 'circle':
-        surface = clip_circle(surface)
-    elif style == 'round-corners':
-        surface = round_corners(surface)
+    surface = clip(surface, style)
     surface.set_device_scale(scale, scale)
     return surface
 
@@ -178,6 +172,14 @@ def square(surface, size):
     return context.get_target()
 
 
+def clip(surface, mode):
+    if mode == 'circle':
+        return clip_circle(surface)
+    if mode == 'round-corners':
+        return round_corners(surface)
+    raise ValueError('clip mode unknown: %s' % mode)
+
+
 def clip_circle(surface):
     new_surface = cairo.ImageSurface(cairo.Format.ARGB32,
                                      surface.get_width(),
@@ -228,23 +230,6 @@ def round_corners(surface):
     return context.get_target()
 
 
-def get_avatar_from_pixbuf(pixbuf, scale, show=None):
-    size = max(pixbuf.get_width(), pixbuf.get_height())
-    size *= scale
-    surface = Gdk.cairo_surface_create_from_pixbuf(pixbuf, scale)
-    if surface is None:
-        return None
-    surface = square(surface, size)
-    if surface is None:
-        return None
-    surface = clip_circle(surface)
-    if surface is None:
-        return None
-    if show is not None:
-        return add_status_to_avatar(surface, show)
-    return surface
-
-
 class AvatarStorage(metaclass=Singleton):
     def __init__(self):
         self._cache = defaultdict(dict)
@@ -276,7 +261,7 @@ def get_surface(self,
             if surface is not None:
                 return surface
 
-            surface = self._get_avatar_from_storage(contact, size, scale)
+            surface = self._get_avatar_from_storage(contact, size, scale, 
style)
             if surface is not None:
                 if show is not None:
                     surface = add_status_to_avatar(surface, show)
@@ -294,7 +279,13 @@ def get_surface(self,
         self._cache[jid][(size, scale, show)] = surface
         return surface
 
-    def get_muc_surface(self, account, jid, size, scale, default=False):
+    def get_muc_surface(self,
+                        account,
+                        jid,
+                        size,
+                        scale,
+                        default=False,
+                        style='circle'):
         if not default:
             surface = self._cache[jid].get((size, scale))
             if surface is not None:
@@ -305,14 +296,14 @@ def get_muc_surface(self, account, jid, size, scale, 
default=False):
                 surface = self.surface_from_filename(avatar_sha, size, scale)
                 if surface is None:
                     return None
-                surface = clip_circle(surface)
+                surface = clip(surface, style)
                 self._cache[jid][(size, scale)] = surface
                 return surface
 
         con = app.connections[account]
         name = get_groupchat_name(con, jid)
         letter = self._generate_letter(name)
-        surface = generate_default_avatar(letter, str(jid), size, scale)
+        surface = generate_default_avatar(letter, str(jid), size, scale, style)
         self._cache[jid][(size, scale)] = surface
         return surface
 
@@ -414,7 +405,7 @@ def _load_surface_from_storage(self, filename, size, scale):
         surface = Gdk.cairo_surface_create_from_pixbuf(pixbuf, scale)
         return square(surface, size)
 
-    def _get_avatar_from_storage(self, contact, size, scale):
+    def _get_avatar_from_storage(self, contact, size, scale, style):
         avatar_sha = contact.avatar_sha
         if avatar_sha is None:
             return None
@@ -422,7 +413,7 @@ def _get_avatar_from_storage(self, contact, size, scale):
         surface = self._load_surface_from_storage(avatar_sha, size, scale)
         if surface is None:
             return None
-        return clip_circle(surface)
+        return clip(surface, style)
 
     @staticmethod
     def _generate_letter(name):



View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/002da9f8ad47954300977b908a4bd6c4a4bf3d36

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


_______________________________________________
Commits mailing list
Commits@gajim.org
https://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to