From e3004b817dada9b6ee44a78726aeb220a3407882 Mon Sep 17 00:00:00 2001 From: trigg Date: Wed, 30 Sep 2020 17:14:17 +0100 Subject: [PATCH] - Text Popup Style. Fixes #23 --- discover_overlay/discord_connector.py | 11 ++++++- discover_overlay/text_overlay.py | 42 ++++++++++++++++-------- discover_overlay/text_settings.py | 46 +++++++++++++++++++-------- 3 files changed, 70 insertions(+), 29 deletions(-) diff --git a/discover_overlay/discord_connector.py b/discover_overlay/discord_connector.py index 365a877..b54f4c6 100644 --- a/discover_overlay/discord_connector.py +++ b/discover_overlay/discord_connector.py @@ -4,6 +4,7 @@ import time import json import requests import logging +import calendar class DiscordConnector: @@ -84,6 +85,10 @@ class DiscordConnector: self.in_room.remove(userid) def add_text(self, message): + utc_time = time.strptime( + message["timestamp"], "%Y-%m-%dT%H:%M:%S.%f%z") + t = time.time() + epoch_time = calendar.timegm(utc_time) un = message["author"]["username"] if "nick" in message and message['nick'] and len(message["nick"]) > 1: un = message["nick"] @@ -95,6 +100,7 @@ class DiscordConnector: 'content': self.get_message_from_message(message), 'nick': un, 'nick_col': ac, + 'time': epoch_time, }) self.text_altered = True @@ -105,7 +111,8 @@ class DiscordConnector: new_message = {'id': message['id'], 'content': self.get_message_from_message(message_in), 'nick': message['nick'], - 'nick_col': message['nick_col']} + 'nick_col': message['nick_col'], + 'time': message['time']} self.text[idx] = new_message self.text_altered = True return @@ -372,6 +379,8 @@ class DiscordConnector: self.voice_overlay.set_connection(self.last_connection) list_altered = False # Update text list + if self.text_overlay.popup_style: + self.text_altered = True if self.text_altered: self.text_overlay.set_text_list(self.text, self.text_altered) self.text_altered = False diff --git a/discover_overlay/text_overlay.py b/discover_overlay/text_overlay.py index 24242b3..4f40182 100644 --- a/discover_overlay/text_overlay.py +++ b/discover_overlay/text_overlay.py @@ -8,6 +8,7 @@ from gi.repository.GdkPixbuf import Pixbuf from gi.repository import Gtk, GLib, Gio, GdkPixbuf, Gdk, Pango, PangoCairo import cairo import logging +import time class TextOverlayWindow(OverlayWindow): @@ -40,32 +41,37 @@ class TextOverlayWindow(OverlayWindow): self.bg_col = bg_col self.redraw() + def set_popup_style(self, b): + self.popup_style = b + def do_draw(self, context): self.context = context context.set_antialias(self.compositing) (w, h) = self.get_size() # Make background transparent - context.set_source_rgba(0.0, 0.0, 0.0, 0.4) - # Don't layer drawing over each other, always replace - self.col(self.bg_col) + context.set_source_rgba(0.0, 0.0, 0.0, 0.0) context.paint() - context.set_operator(cairo.OPERATOR_OVER) - self.col(self.fg_col) - if not self.connected: return long_string = "" + sep = "" + tnow = time.time() for line in self.content: - col = "#fff" - if 'nick_col' in line and line['nick_col']: - col = line['nick_col'] - long_string = "%s\n%s: %s" % ( - long_string, - self.santize_string(col), - self.santize_string(line["nick"]), - self.santize_string(line["content"])) + if not self.popup_style or tnow - line['time'] < 30: + col = "#fff" + if 'nick_col' in line and line['nick_col']: + col = line['nick_col'] + long_string = "%s%s%s: %s" % ( + long_string, + sep, + self.santize_string(col), + self.santize_string(line["nick"]), + self.santize_string(line["content"])) + sep = '\n' + if len(long_string) == 0: + return layout = self.create_pango_layout(long_string) layout.set_markup(long_string, -1) attr = Pango.AttrList() @@ -77,6 +83,14 @@ class TextOverlayWindow(OverlayWindow): "%s %s" % (self.text_font, self.text_size)) layout.set_font_description(font) tw, th = layout.get_pixel_size() + + # Don't layer drawing over each other, always replace + self.col(self.bg_col) + context.rectangle(0, -th + h, w, th) + context.fill() + context.set_operator(cairo.OPERATOR_OVER) + self.col(self.fg_col) + context.move_to(0, -th + h) PangoCairo.show_layout(context, layout) diff --git a/discover_overlay/text_settings.py b/discover_overlay/text_settings.py index d9c439a..259fbf3 100644 --- a/discover_overlay/text_settings.py +++ b/discover_overlay/text_settings.py @@ -98,6 +98,8 @@ class TextSettingsWindow(SettingsWindow): "text", "bg_col", fallback="[0.0,0.0,0.0,0.5]")) self.fg_col = json.loads(config.get( "text", "fg_col", fallback="[1.0,1.0,1.0,1.0]")) + self.popup_style = config.getboolean( + "text", "popup_style", fallback=False) logging.info( "Loading saved channel %s" % (self.channel)) @@ -111,6 +113,7 @@ class TextSettingsWindow(SettingsWindow): self.floating, self.floating_x, self.floating_y, self.floating_w, self.floating_h) self.overlay.set_bg(self.bg_col) self.overlay.set_fg(self.fg_col) + self.overlay.set_popup_style(self.popup_style) def save_config(self): config = ConfigParser(interpolation=None) @@ -130,6 +133,7 @@ class TextSettingsWindow(SettingsWindow): config.set("text", "channel", self.channel) config.set("text", "bg_col", json.dumps(self.bg_col)) config.set("text", "fg_col", json.dumps(self.fg_col)) + config.set("text", "popup_style", "%s" % (int(self.popup_style))) if self.font: config.set("text", "font", self.font) @@ -146,6 +150,12 @@ class TextSettingsWindow(SettingsWindow): enabled.set_active(self.enabled) enabled.connect("toggled", self.change_enabled) + # Popup Style + popup_style_label = Gtk.Label.new("Popup Style") + popup_style = Gtk.CheckButton.new() + popup_style.set_active(self.popup_style) + popup_style.connect("toggled", self.change_popup_style) + # Font chooser font_label = Gtk.Label.new("Font") font = Gtk.FontButton() @@ -235,21 +245,23 @@ class TextSettingsWindow(SettingsWindow): box.attach(enabled_label, 0, 0, 1, 1) box.attach(enabled, 1, 0, 1, 1) - box.attach(channel_label, 0, 1, 1, 1) - box.attach(channel, 1, 1, 1, 1) + box.attach(popup_style_label, 0, 1, 1, 1) + box.attach(popup_style, 1, 1, 1, 1) + box.attach(channel_label, 0, 2, 1, 1) + box.attach(channel, 1, 2, 1, 1) - box.attach(font_label, 0, 2, 1, 1) - box.attach(font, 1, 2, 1, 1) - box.attach(fg_col_label, 0, 3, 1, 1) - box.attach(fg_col, 1, 3, 1, 1) - box.attach(bg_col_label, 0, 4, 1, 1) - box.attach(bg_col, 1, 4, 1, 1) - box.attach(align_label, 0, 5, 1, 5) - box.attach(align_type_box, 1, 5, 1, 1) - box.attach(monitor, 1, 6, 1, 1) - box.attach(align_x, 1, 7, 1, 1) - box.attach(align_y, 1, 8, 1, 1) - box.attach(align_placement_button, 1, 9, 1, 1) + box.attach(font_label, 0, 3, 1, 1) + box.attach(font, 1, 3, 1, 1) + box.attach(fg_col_label, 0, 4, 1, 1) + box.attach(fg_col, 1, 4, 1, 1) + box.attach(bg_col_label, 0, 5, 1, 1) + box.attach(bg_col, 1, 5, 1, 1) + box.attach(align_label, 0, 6, 1, 5) + box.attach(align_type_box, 1, 6, 1, 1) + box.attach(monitor, 1, 7, 1, 1) + box.attach(align_x, 1, 8, 1, 1) + box.attach(align_y, 1, 9, 1, 1) + box.attach(align_placement_button, 1, 10, 1, 1) self.add(box) @@ -342,6 +354,12 @@ class TextSettingsWindow(SettingsWindow): self.enabled = button.get_active() self.save_config() + def change_popup_style(self, button): + self.overlay.set_popup_style(button.get_active()) + + self.popup_style = button.get_active() + self.save_config() + def get_channel(self): return self.channel