diff --git a/discover_overlay/discord_connector.py b/discover_overlay/discord_connector.py index 149ba8a..cc57d75 100644 --- a/discover_overlay/discord_connector.py +++ b/discover_overlay/discord_connector.py @@ -604,6 +604,12 @@ class DiscordConnector: if self.authed: self.set_text_channel(self.text_settings.get_channel()) + if self.voice_overlay.needsredraw: + self.voice_overlay.redraw() + + if self.text_overlay.needsredraw: + self.text_overlay.redraw() + if len(self.rate_limited_channels) > 0: guild = self.rate_limited_channels.pop() cmd = { diff --git a/discover_overlay/overlay.py b/discover_overlay/overlay.py index 0e1e556..6aca303 100644 --- a/discover_overlay/overlay.py +++ b/discover_overlay/overlay.py @@ -61,6 +61,7 @@ class OverlayWindow(Gtk.Window): self.pos_y = None self.width = None self.height = None + self.needsredraw = False self.set_size_request(50, 50) self.connect('draw', self.overlay_draw) @@ -101,7 +102,7 @@ class OverlayWindow(Gtk.Window): Xatom.CARDINAL,32, [0xffffffff], X.PropModeReplace) - print("Setting STEAM_EXTERNAL_OVERLAY") + logging.info("Setting STEAM_EXTERNAL_OVERLAY") display.sync() self.monitor = 0 self.align_right = True @@ -138,7 +139,8 @@ class OverlayWindow(Gtk.Window): Set the font used by the overlay """ self.text_font = font - self.redraw() + self.needsredraw=True + logging.info("set_font redraw") def set_floating(self, floating, pos_x, pos_y, width, height): """ @@ -203,7 +205,7 @@ class OverlayWindow(Gtk.Window): (width, height) = self.get_size() self.width = width self.height = height - self.redraw() + self.needsredraw = True def redraw(self): """ @@ -211,6 +213,7 @@ class OverlayWindow(Gtk.Window): If we're using XShape (optionally or forcibly) then render the image into the shape so that we only cut out clear sections """ + self.needsredraw = False gdkwin = self.get_window() if not self.floating: (width, height) = self.get_size() @@ -239,7 +242,9 @@ class OverlayWindow(Gtk.Window): if mon: GtkLayerShell.set_monitor(self, mon) self.force_location() - self.redraw() + self.needsredraw = True + logging.info("set_monitor redraw") + def set_align_x(self, align_right): """ @@ -247,7 +252,9 @@ class OverlayWindow(Gtk.Window): """ self.align_right = align_right self.force_location() - self.redraw() + self.needsredraw = True + logging.info("set_align_x redraw") + def set_align_y(self, align_vert): """ @@ -255,7 +262,9 @@ class OverlayWindow(Gtk.Window): """ self.align_vert = align_vert self.force_location() - self.redraw() + self.needsredraw = True + logging.info("set_align_y redraw") + def col(self, col, alpha=1.0): """ diff --git a/discover_overlay/text_overlay.py b/discover_overlay/text_overlay.py index fa0a9a8..ccd856a 100644 --- a/discover_overlay/text_overlay.py +++ b/discover_overlay/text_overlay.py @@ -63,28 +63,36 @@ class TextOverlayWindow(OverlayWindow): """ self.content = tlist if altered: - self.redraw() + self.needsredraw = True + logging.info("set_text_list redraw") + def set_fg(self, fg_col): """ Set default text colour """ self.fg_col = fg_col - self.redraw() + self.needsredraw = True + logging.info("set_fg redraw") + def set_bg(self, bg_col): """ Set background colour """ self.bg_col = bg_col - self.redraw() + self.needsredraw = True + logging.info("set_bg redraw") + def set_show_attach(self, attachment): """ Set if attachments should be shown inline """ self.show_attach = attachment - self.redraw() + self.needsredraw = True + logging.info("set_show_attach redraw") + def set_popup_style(self, boolean): """ @@ -102,7 +110,9 @@ class TextOverlayWindow(OverlayWindow): font = Pango.FontDescription(self.text_font) self.pango_rect.width = font.get_size() * Pango.SCALE self.pango_rect.height = font.get_size() * Pango.SCALE - self.redraw() + self.needsredraw = True + logging.info("set_font redraw") + def make_line(self, message): """ @@ -159,7 +169,9 @@ class TextOverlayWindow(OverlayWindow): Called when an image has been downloaded by image_getter """ self.attachment[identifier] = pix - self.redraw() + self.needsredraw = True + logging.info("recv_attach redraw") + def overlay_draw(self, _w, context, data=None): """ @@ -210,6 +222,7 @@ class TextOverlayWindow(OverlayWindow): get_surface(self.recv_attach, url, url, None) + self.attachment[url] = None # Avoid asking repeatedly else: logging.warning("Unknown file extension '%s'", extension) # cy = self.draw_text(cy, "%s" % (line['attach'])) diff --git a/discover_overlay/voice_overlay.py b/discover_overlay/voice_overlay.py index e4ab816..4ec2274 100644 --- a/discover_overlay/voice_overlay.py +++ b/discover_overlay/voice_overlay.py @@ -70,91 +70,117 @@ class VoiceOverlayWindow(OverlayWindow): Set the background colour """ self.norm_col = background_colour - self.redraw() + self.needsredraw = True + logging.info("set_bg redraw") + def set_fg(self, foreground_colour): """ Set the text colour """ self.text_col = foreground_colour - self.redraw() + self.needsredraw = True + logging.info("set_fg redraw") + def set_tk(self, talking_colour): """ Set the border colour for users who are talking """ self.talk_col = talking_colour - self.redraw() + self.needsredraw = True + logging.info("set_tk redraw") + def set_mt(self, mute_colour): """ Set the colour of mute and deafen logos """ self.mute_col = mute_colour - self.redraw() + self.needsredraw = True + logging.info("set_mt redraw") + def set_hi(self, highlight_colour): """ Set the colour of background for speaking users """ self.hili_col = highlight_colour - self.redraw() + self.needsredraw = True + logging.info("set_hi redraw") + def set_fg_hi(self, highlight_colour): """ Set the colour of background for speaking users """ self.text_hili_col = highlight_colour - self.redraw() + self.needsredraw = True + logging.info("set_fg_hi redraw") + def set_avatar_size(self, size): """ Set the size of the avatar icons """ self.avatar_size = size - self.redraw() + self.needsredraw = True + logging.info("set_avatar_size redraw") + def set_icon_spacing(self, i): """ Set the spacing between avatar icons """ self.icon_spacing = i - self.redraw() + self.needsredraw = True + logging.info("set_icon_spacing redraw") + def set_text_padding(self, i): """ Set padding between text and border """ self.text_pad = i - self.redraw() + self.needsredraw = True + logging.info("set_text_padding redraw") + def set_text_baseline_adj(self, i): """ Set padding between text and border """ self.text_baseline_adj = i - self.redraw() + self.needsredraw = True + logging.info("set_text_baseline_adj redraw") + def set_vert_edge_padding(self, i): """ Set padding between top/bottom of screen and overlay contents """ self.vert_edge_padding = i - self.redraw() + self.needsredraw = True + logging.info("set_text_vert_edge_padding redraw") + def set_horz_edge_padding(self, i): """ Set padding between left/right of screen and overlay contents """ self.horz_edge_padding = i - self.redraw() + self.needsredraw = True + logging.info("set_horz_edge_padding redraw") + def set_square_avatar(self, i): """ Set if the overlay should crop avatars to a circle or show full square image """ self.round_avatar = not i - self.redraw() + self.needsredraw = True + logging.info("set_square_avatar redraw") + def set_only_speaking(self, only_speaking): """ @@ -179,11 +205,12 @@ class VoiceOverlayWindow(OverlayWindow): Set if the overlay should draw only the icon """ self.icon_only = i - self.redraw() + self.needsredraw = True + logging.info("set_icon_only redraw") def set_horizontal(self, horizontal=False): self.horizontal = horizontal - self.redraw() + self.needsredraw = True def set_guild_ids(self, guild_ids=tuple()): try: @@ -242,7 +269,9 @@ class VoiceOverlayWindow(OverlayWindow): alt = True self.compositing = screen.is_composited() if alt: - self.redraw() + self.needsredraw = True + logging.info("set_user_list redraw") + def set_connection(self, connection): """ @@ -251,7 +280,9 @@ class VoiceOverlayWindow(OverlayWindow): is_connected = connection == "VOICE_CONNECTED" if self.connected != is_connected: self.connected = is_connected - self.redraw() + self.needsredraw = True + logging.info("set_connection redraw") + def overlay_draw(self, _w, context, _data=None): """ @@ -363,7 +394,9 @@ class VoiceOverlayWindow(OverlayWindow): else: self.avatars[identifier] = pix if self.context: - self.redraw() + self.needsredraw = True + logging.info("recv_avatar redraw") + def draw_avatar(self, context, user, pos_y): """