Merge pull request #60 from bytechef/master

Added option to only display users that are speaking
This commit is contained in:
trigg 2020-10-02 19:26:57 +01:00 committed by GitHub
commit d2b9a5a178
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 4 deletions

View file

@ -12,6 +12,8 @@ import logging
class VoiceOverlayWindow(OverlayWindow):
def __init__(self):
OverlayWindow.__init__(self)
@ -32,6 +34,7 @@ class VoiceOverlayWindow(OverlayWindow):
self.wind_col = [0.0, 0.0, 0.0, 0.0]
self.mute_col = [0.7, 0.0, 0.0, 1.0]
self.userlist = []
self.users_to_draw = []
self.connected = False
self.force_location()
self.def_avatar = get_image(self.recv_avatar,
@ -81,6 +84,9 @@ class VoiceOverlayWindow(OverlayWindow):
self.round_avatar = not i
self.redraw()
def set_only_speaking(self, only_speaking):
self.only_speaking = only_speaking
def set_wind_col(self):
self.col(self.wind_col)
@ -136,11 +142,22 @@ class VoiceOverlayWindow(OverlayWindow):
if not self.connected:
return
# Gather which users to draw
if self.only_speaking:
self.users_to_draw = self.userlist[:]
# Remove users that arent speaking
for user in self.userlist:
speaking = "speaking" in user and user["speaking"]
if not speaking:
self.users_to_draw.remove(user)
else:
self.users_to_draw = self.userlist
# Get size of window
(w, h) = self.get_size()
# Calculate height needed to show overlay
height = (len(self.userlist) * self.avatar_size) + \
(len(self.userlist) + 1) * self.icon_spacing
height = (len(self.users_to_draw) * self.avatar_size) + \
(len(self.users_to_draw) + 1) * self.icon_spacing
# Choose where to start drawing
rh = 0 + self.vert_edge_padding
@ -149,8 +166,8 @@ class VoiceOverlayWindow(OverlayWindow):
rh = (h / 2) - (height / 2)
elif self.align_vert == 2:
rh = h - height - self.vert_edge_padding
# Iterate users in room.
for user in self.userlist:
for user in self.users_to_draw:
self.draw_avatar(context, user, rh)
# Shift the relative position down to next location
rh += self.avatar_size + self.icon_spacing

View file

@ -55,6 +55,7 @@ class VoiceSettingsWindow(SettingsWindow):
self.font = config.get("main", "font", fallback=None)
self.square_avatar = config.getboolean(
"main", "square_avatar", fallback=False)
self.only_speaking = config.getboolean("main", "only_speaking", fallback=True)
self.monitor = config.get("main", "monitor", fallback="None")
self.vert_edge_padding = config.getint(
"main", "vert_edge_padding", fallback=0)
@ -77,6 +78,7 @@ class VoiceSettingsWindow(SettingsWindow):
self.overlay.set_icon_spacing(self.icon_spacing)
self.overlay.set_text_padding(self.text_padding)
self.overlay.set_square_avatar(self.square_avatar)
self.overlay.set_only_speaking(self.only_speaking)
self.overlay.set_monitor(self.get_monitor_index(self.monitor))
self.overlay.set_vert_edge_padding(self.vert_edge_padding)
self.overlay.set_horz_edge_padding(self.horz_edge_padding)
@ -109,6 +111,7 @@ class VoiceSettingsWindow(SettingsWindow):
if self.font:
config.set("main", "font", self.font)
config.set("main", "square_avatar", "%d" % (int(self.square_avatar)))
config.set("main", "only_speaking", "%d" % (int(self.only_speaking)))
config.set("main", "monitor", self.monitor)
config.set("main", "vert_edge_padding", "%d" %
(self.vert_edge_padding))
@ -256,6 +259,11 @@ class VoiceSettingsWindow(SettingsWindow):
square_avatar.set_active(self.square_avatar)
square_avatar.connect("toggled", self.change_square_avatar)
only_speaking_label = Gtk.Label.new("Only Speaking")
only_speaking = Gtk.CheckButton.new()
only_speaking.set_active(self.only_speaking)
only_speaking.connect("toggled", self.change_only_speaking)
box.attach(font_label, 0, 0, 1, 1)
box.attach(font, 1, 0, 1, 1)
box.attach(bg_col_label, 0, 1, 1, 1)
@ -284,6 +292,8 @@ class VoiceSettingsWindow(SettingsWindow):
box.attach(horz_edge_padding, 1, 14, 1, 1)
box.attach(square_avatar_label, 0, 15, 1, 1)
box.attach(square_avatar, 1, 15, 1, 1)
box.attach(only_speaking_label, 0, 16, 1, 1)
box.attach(only_speaking, 1, 16, 1, 1)
self.add(box)
@ -436,3 +446,9 @@ class VoiceSettingsWindow(SettingsWindow):
self.square_avatar = button.get_active()
self.save_config()
def change_only_speaking(self, button):
self.overlay.set_only_speaking(button.get_active())
self.only_speaking = button.get_active()
self.save_config()