- Boring shapes for those who would prefer them

This commit is contained in:
trigg 2022-07-11 19:16:33 +01:00
parent 5b30f4b05e
commit 3cc3b62247
2 changed files with 62 additions and 16 deletions

View file

@ -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:

View file

@ -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