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
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits