Daniel Brötzmann pushed to branch mainwindow at gajim / gajim


Commits:
318ca493 by wurstsalat at 2021-07-14T19:46:41+02:00
Workspaces: Add image avatars

- - - - -


2 changed files:

- gajim/gtk/avatar.py
- gajim/gtk/workspace_dialog.py


Changes:

=====================================
gajim/gtk/avatar.py
=====================================
@@ -349,13 +349,18 @@ def get_workspace_surface(self, workspace_id, size, 
scale):
         color = app.settings.get_workspace_setting(workspace_id, 'color')
         avatar_sha = app.settings.get_workspace_setting(
             workspace_id, 'avatar_sha')
-        if not avatar_sha:
-            rgba = make_rgba(color or DEFAULT_WORKSPACE_COLOR)
-            letter = name[:1].upper()
-            surface = make_workspace_avatar(
-                letter, rgba_to_float(rgba), size, scale)
-            self._cache[workspace_id][(size, scale)] = surface
-            return surface
+        if avatar_sha:
+            surface = self._load_surface_from_storage(avatar_sha, size, scale)
+            if surface is None:
+                return None
+            return clip(surface, 'round-corners')
+
+        rgba = make_rgba(color or DEFAULT_WORKSPACE_COLOR)
+        letter = name[:1].upper()
+        surface = make_workspace_avatar(
+            letter, rgba_to_float(rgba), size, scale)
+        self._cache[workspace_id][(size, scale)] = surface
+        return surface
 
     def prepare_for_publish(self, path):
         success, data = self._load_for_publish(path)


=====================================
gajim/gtk/workspace_dialog.py
=====================================
@@ -49,7 +49,7 @@ def __init__(self, workspace_id=None):
 
         name = _('My Workspace')
         color = None
-        avatar_sha = None
+        self._avatar_sha = None
 
         if workspace_id is None:
             self._ui.remove_workspace_button.set_sensitive(False)
@@ -58,8 +58,15 @@ def __init__(self, workspace_id=None):
                 workspace_id, 'name')
             color = app.settings.get_workspace_setting(
                 workspace_id, 'color')
+            self._avatar_sha = app.settings.get_workspace_setting(
+                workspace_id, 'avatar_sha')
+            if self._avatar_sha == '':
+                self._avatar_sha = None
 
         rgba = make_rgba(color or DEFAULT_WORKSPACE_COLOR)
+        if self._avatar_sha is not None:
+            self._ui.image_switch.set_state(True)
+            self._ui.style_stack.set_visible_child_name('image')
 
         self._ui.entry.set_text(name)
         self._ui.color_chooser.set_rgba(rgba)
@@ -92,25 +99,36 @@ def _on_text_changed(self, entry, _param):
     def _on_image_switch_toggled(self, switch, *args):
         if switch.get_active():
             self._ui.style_stack.set_visible_child_name('image')
+            if self._workspace_id is not None:
+                self._avatar_sha = app.settings.get_workspace_setting(
+                    self._workspace_id, 'avatar_sha')
         else:
             self._ui.style_stack.set_visible_child_name('color')
+            self._avatar_sha = None
+        self._update_avatar()
 
     def _update_avatar(self):
         name = self._ui.entry.get_text()
         rgba = self._ui.color_chooser.get_rgba()
         scale = self.get_scale_factor()
-        surface = make_workspace_avatar(
-            name[:1].upper(),
-            rgba_to_float(rgba),
-            AvatarSize.WORKSPACE_EDIT,
-            scale)
+        if self._avatar_sha is not None:
+            surface = app.interface.avatar_storage.get_workspace_surface(
+                self._workspace_id,
+                AvatarSize.WORKSPACE_EDIT,
+                scale)
+        else:
+            surface = make_workspace_avatar(
+                name[:1].upper(),
+                rgba_to_float(rgba),
+                AvatarSize.WORKSPACE_EDIT,
+                scale)
         self._ui.preview.set_from_surface(surface)
 
     def _get_avatar_data(self):
         if not self._avatar_selector.get_prepared():
             return None
 
-        success, data, width, height = self._avatar_selector.get_avatar_bytes()
+        success, data, _wid, _hei = self._avatar_selector.get_avatar_bytes()
         if not success:
             return None
 
@@ -119,15 +137,23 @@ def _get_avatar_data(self):
     def _on_save(self, _button):
         name = self._ui.entry.get_text()
         rgba = self._ui.color_chooser.get_rgba()
-        # use_image = self._ui.image_switch.get_active()
-        # if use_image:
-        #    avatar = self._get_avatar_data()
+        use_image = self._ui.image_switch.get_active()
+        if use_image:
+            data = self._get_avatar_data()
+            if data is not None:
+                self._avatar_sha = app.interface.save_avatar(data)
 
         if self._workspace_id is not None:
             app.settings.set_workspace_setting(
                 self._workspace_id, 'name', name)
             app.settings.set_workspace_setting(
                 self._workspace_id, 'color', rgba.to_string())
+            if self._avatar_sha is None:
+                app.settings.set_workspace_setting(
+                    self._workspace_id, 'avatar_sha', '')
+            else:
+                app.settings.set_workspace_setting(
+                    self._workspace_id, 'avatar_sha', self._avatar_sha)
 
             app.window.update_workspace(self._workspace_id)
             self.destroy()
@@ -136,6 +162,9 @@ def _on_save(self, _button):
         workspace_id = app.settings.add_workspace(name)
         app.settings.set_workspace_setting(
             workspace_id, 'color', rgba.to_string())
+        if self._avatar_sha is not None:
+            app.settings.set_workspace_setting(
+                workspace_id, 'avatar_sha', self._avatar_sha)
 
         app.window.add_workspace(workspace_id)
         self.destroy()



View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/318ca493a6d716bb69d927c0bbb6d9b543c6ab35

-- 
View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/318ca493a6d716bb69d927c0bbb6d9b543c6ab35
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