From 3cc3b62247bbbbde20aaf57f0378a91a9eb7b202 Mon Sep 17 00:00:00 2001 From: trigg Date: Mon, 11 Jul 2022 19:16:33 +0100 Subject: [PATCH] - Boring shapes for those who would prefer them --- discover_overlay/voice_overlay.py | 47 ++++++++++++++++++++++-------- discover_overlay/voice_settings.py | 31 +++++++++++++++++--- 2 files changed, 62 insertions(+), 16 deletions(-) diff --git a/discover_overlay/voice_overlay.py b/discover_overlay/voice_overlay.py index 61aef15..9bc0e9f 100644 --- a/discover_overlay/voice_overlay.py +++ b/discover_overlay/voice_overlay.py @@ -86,6 +86,7 @@ class VoiceOverlayWindow(OverlayWindow): self.channel_title = "" self.border_width = 2 self.icon_transparency = 0.0 + self.fancy_border = False self.round_avatar = True self.icon_only = True @@ -258,6 +259,13 @@ class VoiceOverlayWindow(OverlayWindow): self.round_avatar = not i self.needsredraw = True + def set_fancy_border(self, border): + """ + Sets if border should wrap around non-square avatar images + """ + self.fancy_border = border + self.needsredraw = True + def set_only_speaking(self, only_speaking): """ Set if overlay should only show people who are talking @@ -789,20 +797,35 @@ class VoiceOverlayWindow(OverlayWindow): return # Draw the "border" by doing a scaled-up copy in a flat colour - if border_colour: + if border_colour: self.col(border_colour) - context.set_operator(cairo.OPERATOR_SOURCE) - for off_x in range(-self.border_width, self.border_width+1): - for off_y in range(-self.border_width, self.border_width+1): - context.save() - if self.round_avatar: - context.new_path() - context.arc(pos_x + off_x + (avatar_size / 2), pos_y+ off_y + - (avatar_size / 2), avatar_size / 2, 0, 2 * math.pi) - context.clip() - draw_img_to_mask(mask, context, pos_x + off_x, pos_y + off_y, + if self.fancy_border: + context.set_operator(cairo.OPERATOR_SOURCE) + for off_x in range(-self.border_width, self.border_width+1): + for off_y in range(-self.border_width, self.border_width+1): + context.save() + if self.round_avatar: + context.new_path() + context.arc(pos_x + off_x + (avatar_size / 2), pos_y+ off_y + + (avatar_size / 2), avatar_size / 2, 0, 2 * math.pi) + context.clip() + draw_img_to_mask(mask, context, pos_x + off_x, pos_y + off_y, avatar_size, avatar_size) - context.restore() + context.restore() + else: + if self.round_avatar: + context.new_path() + context.arc(pos_x + (avatar_size / 2), pos_y+ + (avatar_size / 2), avatar_size / 2 + (self.border_width/2.0), 0, 2 * math.pi) + context.set_line_width(self.border_width) + context.stroke() + else: + context.new_path() + context.rectangle(pos_x - (self.border_width/2), pos_y - (self.border_width/2), avatar_size + self.border_width, avatar_size + self.border_width) + context.set_line_width(self.border_width) + + context.stroke() + # Cut the image back out context.save() if self.round_avatar: diff --git a/discover_overlay/voice_settings.py b/discover_overlay/voice_settings.py index e0b4b25..ea2bd08 100644 --- a/discover_overlay/voice_settings.py +++ b/discover_overlay/voice_settings.py @@ -87,6 +87,7 @@ class VoiceSettingsWindow(SettingsWindow): self.show_disconnected = None self.border_width = 2 self.icon_transparency = 1.0 + self.fancy_border = False self.init_config() self.create_gui() @@ -170,6 +171,8 @@ class VoiceSettingsWindow(SettingsWindow): self.border_width = config.getint("main", "border_width", fallback=2) self.icon_transparency = config.getfloat( "main", "icon_transparency", fallback=1.0) + self.fancy_border = config.getboolean("main", + "fancy_border", fallback=True) # Pass all of our config over to the overlay self.overlay.set_align_x(self.align_x) @@ -204,6 +207,7 @@ class VoiceSettingsWindow(SettingsWindow): self.overlay.set_show_disconnected(self.show_disconnected) self.overlay.set_border_width(self.border_width) self.overlay.set_icon_transparency(self.icon_transparency) + self.overlay.set_fancy_border(self.fancy_border) self.overlay.set_floating( self.floating, self.floating_x, self.floating_y, self.floating_w, self.floating_h) @@ -268,6 +272,7 @@ class VoiceSettingsWindow(SettingsWindow): config.set("main", "border_width", "%s" % (int(self.border_width))) config.set("main", "icon_transparency", "%.2f" % (self.icon_transparency)) + config.set("main", "fancy_border", "%d" % (int(self.fancy_border))) with open(self.config_file, 'w') as file: config.write(file) @@ -474,6 +479,16 @@ class VoiceSettingsWindow(SettingsWindow): avatar_box.attach(square_avatar_label, 0, 3, 1, 1) avatar_box.attach(square_avatar, 1, 3, 1, 1) + # Fancy Avatar shapes + fancy_avatar_label = Gtk.Label.new(_("Fancy Avatar shapes")) + fancy_avatar_label.set_xalign(0) + fancy_avatar = Gtk.CheckButton.new() + fancy_avatar.set_active(self.fancy_border) + fancy_avatar.connect("toggled", self.change_fancy_avatar) + + avatar_box.attach(fancy_avatar_label, 0, 4, 1, 1) + avatar_box.attach(fancy_avatar, 1 , 4, 1, 1) + # Display icon only icon_only_label = Gtk.Label.new(_("Display Icon Only")) icon_only_label.set_xalign(0) @@ -491,8 +506,8 @@ class VoiceSettingsWindow(SettingsWindow): only_speaking.set_active(self.only_speaking) only_speaking.connect("toggled", self.change_only_speaking) - alignment_box.attach(only_speaking_label, 0, 8, 1, 1) - alignment_box.attach(only_speaking, 1, 8, 1, 1) + alignment_box.attach(only_speaking_label, 0, 9, 1, 1) + alignment_box.attach(only_speaking, 1, 9, 1, 1) # Highlight self highlight_self_label = Gtk.Label.new(_("Highlight Self")) @@ -501,8 +516,8 @@ class VoiceSettingsWindow(SettingsWindow): highlight_self.set_active(self.highlight_self) highlight_self.connect("toggled", self.change_highlight_self) - avatar_box.attach(highlight_self_label, 0, 5, 1, 1) - avatar_box.attach(highlight_self, 1, 5, 1, 1) + alignment_box.attach(highlight_self_label, 0, 8, 1, 1) + alignment_box.attach(highlight_self, 1, 8, 1, 1) # Order avatars order_label = Gtk.Label.new(_("Order Avatars By")) @@ -845,6 +860,14 @@ class VoiceSettingsWindow(SettingsWindow): self.square_avatar = button.get_active() self.save_config() + def change_fancy_avatar(self, button): + """ + Fancy avatar border shapes changed + """ + self.overlay.set_fancy_border(button.get_active()) + self.fancy_avatar = button.get_active() + self.save_config() + def change_only_speaking(self, button): """ Show only speaking users setting changed