- Enforce redraw() only being called from main thread
- Added a bunch of INFO messages on redraw - Don't request an image that has already been requested (consider passing fails over!)
This commit is contained in:
parent
e29980577c
commit
5d5a2e0e9c
4 changed files with 91 additions and 30 deletions
|
|
@ -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 = {
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -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']))
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
"""
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue