diff --git a/discover_overlay/draggable_window.py b/discover_overlay/draggable_window.py index cf82e83..8472f91 100644 --- a/discover_overlay/draggable_window.py +++ b/discover_overlay/draggable_window.py @@ -21,16 +21,12 @@ from gi.repository import Gtk, Gdk class DraggableWindow(Gtk.Window): """An X11 window which can be moved and resized""" - def __init__(self, x=0, y=0, w=300, h=300, message="Message", settings=None): + def __init__(self, pos_x=0, pos_y=0, width=300, height=300, message="Message", settings=None): Gtk.Window.__init__(self, type=Gtk.WindowType.POPUP) - if w < 100: - w = 100 - if h < 100: - h = 100 - self.x = x - self.y = y - self.w = w - self.h = h + self.pos_x = pos_x + self.pos_y = pos_y + self.width = max(100, width) + self.height = max(100, height) self.settings = settings self.message = message self.set_size_request(50, 50) @@ -60,48 +56,51 @@ class DraggableWindow(Gtk.Window): self.show_all() def force_location(self): - """Move the window to previously given co-ords. Also double check sanity on layer & decorations""" + """ + Move the window to previously given co-ords. + Also double check sanity on layer & decorations + """ self.set_decorated(False) self.set_keep_above(True) - self.move(self.x, self.y) - self.resize(self.w, self.h) + self.move(self.pos_x, self.pos_y) + self.resize(self.width, self.height) def drag(self, _w, event): """Called by GTK while mouse is moving over window. Used to resize and move""" if event.state & Gdk.ModifierType.BUTTON1_MASK: if self.drag_type == 1: # Center is move - self.x = event.x_root - self.drag_x - self.y = event.y_root - self.drag_y + self.pos_x = event.x_root - self.drag_x + self.pos_y = event.y_root - self.drag_y self.force_location() elif self.drag_type == 2: # Right edge - self.w += event.x - self.drag_x + self.width += event.x - self.drag_x self.drag_x = event.x self.force_location() elif self.drag_type == 3: # Bottom edge - self.h += event.y - self.drag_y + self.height += event.y - self.drag_y self.drag_y = event.y self.force_location() else: # Bottom Right - self.w += event.x - self.drag_x - self.h += event.y - self.drag_y + self.width += event.x - self.drag_x + self.height += event.y - self.drag_y self.drag_x = event.x self.drag_y = event.y self.force_location() - def button_press(self, w, event): + def button_press(self, _widget, event): """Called when a mouse button is pressed on this window""" - (w, h) = self.get_size() + (width, height) = self.get_size() if not self.drag_type: self.drag_type = 1 # Where in the window did we press? - if event.y > h - 32: + if event.y > height - 32: self.drag_type += 2 - if event.x > w - 32: + if event.x > width - 32: self.drag_type += 1 self.drag_x = event.x self.drag_y = event.y @@ -118,24 +117,26 @@ class DraggableWindow(Gtk.Window): context.paint() context.set_operator(cairo.OPERATOR_OVER) # Get size of window - (sw, sh) = self.get_size() + (window_width, window_height) = self.get_size() # Draw text context.set_source_rgba(0.0, 0.0, 0.0, 1.0) - _xb, _yb, w, h, _dx, _dy = context.text_extents(self.message) - context.move_to(sw / 2 - w / 2, sh / 2 - h / 2) + _xb, _yb, text_width, text_height, _dx, _dy = context.text_extents( + self.message) + context.move_to(window_width / 2 - text_width / 2, + window_height / 2 - text_height / 2) context.show_text(self.message) # Draw resizing edges context.set_source_rgba(0.0, 0.0, 1.0, 0.5) - context.rectangle(sw - 32, 0, 32, sh) + context.rectangle(window_width - 32, 0, 32, window_height) context.fill() - context.rectangle(0, sh - 32, sw, 32) + context.rectangle(0, window_height - 32, window_width, 32) context.fill() def get_coords(self): """Return window position and size""" - (x, y) = self.get_position() - (w, h) = self.get_size() - return (x, y, w, h) + (pos_x, pos_y) = self.get_position() + (width, height) = self.get_size() + return (pos_x, pos_y, width, height) diff --git a/discover_overlay/draggable_window_wayland.py b/discover_overlay/draggable_window_wayland.py index c587381..c53df80 100644 --- a/discover_overlay/draggable_window_wayland.py +++ b/discover_overlay/draggable_window_wayland.py @@ -25,16 +25,12 @@ except ImportError: class DraggableWindowWayland(Gtk.Window): """A Wayland full-screen window which can be moved and resized""" - def __init__(self, x=0, y=0, w=300, h=300, message="Message", settings=None): + def __init__(self, pos_x=0, pos_y=0, width=300, height=300, message="Message", settings=None): Gtk.Window.__init__(self, type=Gtk.WindowType.TOPLEVEL) - if w < 100: - w = 100 - if h < 100: - h = 100 - self.x = x - self.y = y - self.w = w - self.h = h + self.pos_x = pos_x + self.pos_y = pos_y + self.width = max(100, width) + self.height = max(100, height) self.settings = settings self.message = message self.set_size_request(50, 50) @@ -63,14 +59,10 @@ class DraggableWindowWayland(Gtk.Window): def force_location(self): """Move the window to previously given co-ords. In wayland just clip to current screen""" (size_x, size_y) = self.get_size() - if self.x < 0: - self.x = 0 - if self.y < 0: - self.y = 0 - if self.x + self.w > size_x: - self.x = size_x - self.w - if self.y + self.h > size_y: - self.y = size_y - self.h + self.pos_x = max(0, self.pos_x) + self.pos_x = min(size_x - self.width, self.pos_x) + self.pos_y = max(0, self.pos_y) + self.pos_y = min(size_y - self.height, self.pos_y) self.queue_draw() def drag(self, _w, event): @@ -78,43 +70,43 @@ class DraggableWindowWayland(Gtk.Window): if event.state & Gdk.ModifierType.BUTTON1_MASK: if self.drag_type == 1: # Center is move - self.x += event.x - self.drag_x - self.y += event.y - self.drag_y + self.pos_x += event.x - self.drag_x + self.pos_y += event.y - self.drag_y self.drag_x = event.x self.drag_y = event.y self.force_location() elif self.drag_type == 2: # Right edge - self.w += event.x - self.drag_x + self.width += event.x - self.drag_x self.drag_x = event.x self.force_location() elif self.drag_type == 3: # Bottom edge - self.h += event.y - self.drag_y + self.height += event.y - self.drag_y self.drag_y = event.y self.force_location() else: # Bottom Right - self.w += event.x - self.drag_x - self.h += event.y - self.drag_y + self.width += event.x - self.drag_x + self.height += event.y - self.drag_y self.drag_x = event.x self.drag_y = event.y self.force_location() def button_press(self, _w, event): """Called when a mouse button is pressed on this window""" - px = event.x - self.x - py = event.y - self.y + press_x = event.x - self.pos_x + press_y = event.y - self.pos_y if not self.drag_type: self.drag_type = 1 # Where in the window did we press? - if px < 20 and py < 20: + if press_x < 20 and press_y < 20: self.settings.change_placement(None) - if py > self.h - 32: + if press_y > self.height - 32: self.drag_type += 2 - if px > self.w - 32: + if press_x > self.width - 32: self.drag_type += 1 self.drag_x = event.x self.drag_y = event.y @@ -124,10 +116,14 @@ class DraggableWindowWayland(Gtk.Window): self.drag_type = None def dodraw(self, _widget, context): - """Draw our window. For wayland we're secretly a fullscreen app and need to draw only a single rectangle of the overlay""" - context.translate(self.x, self.y) + """ + Draw our window. For wayland we're secretly a + fullscreen app and need to draw only a single + rectangle of the overlay + """ + context.translate(self.pos_x, self.pos_y) context.save() - context.rectangle(0, 0, self.w, self.h) + context.rectangle(0, 0, self.width, self.height) context.clip() context.set_source_rgba(1.0, 1.0, 0.0, 0.7) @@ -139,15 +135,16 @@ class DraggableWindowWayland(Gtk.Window): # Draw text context.set_source_rgba(0.0, 0.0, 0.0, 1.0) _xb, _yb, width, height, _dx, _dy = context.text_extents(self.message) - context.move_to(self.w / 2 - width / 2, self.h / 2 - height / 2) + context.move_to(self.width / 2 - width / 2, + self.height / 2 - height / 2) context.show_text(self.message) # Draw resizing edges context.set_source_rgba(0.0, 0.0, 1.0, 0.5) - context.rectangle(self.w - 32, 0, 32, self.h) + context.rectangle(self.width - 32, 0, 32, self.height) context.fill() - context.rectangle(0, self.h - 32, self.w, 32) + context.rectangle(0, self.height - 32, self.width, 32) context.fill() # Draw Done! @@ -158,4 +155,4 @@ class DraggableWindowWayland(Gtk.Window): def get_coords(self): """Return the position and size of the window""" - return (self.x, self.y, self.w, self.h) + return (self.pos_x, self.pos_y, self.width, self.height) diff --git a/discover_overlay/general_settings.py b/discover_overlay/general_settings.py index 3a6654d..0325c82 100644 --- a/discover_overlay/general_settings.py +++ b/discover_overlay/general_settings.py @@ -16,7 +16,7 @@ import gi from .settings import SettingsWindow from .autostart import Autostart gi.require_version("Gtk", "3.0") -# pylint: disable=wrong-import-position +# pylint: disable=wrong-import-position,wrong-import-order from gi.repository import Gtk @@ -28,19 +28,18 @@ class GeneralSettingsWindow(SettingsWindow): self.overlay = overlay self.overlay2 = overlay2 self.xshape = None - self.autostart = None self.set_size_request(400, 200) self.connect("destroy", self.close_window) self.connect("delete-event", self.close_window) self.init_config() - self.a = Autostart("discover_overlay") + self.autostart_helper = Autostart("discover_overlay") self.placement_window = None self.create_gui() def read_config(self): config = ConfigParser(interpolation=None) - config.read(self.configFile) + config.read(self.config_file) self.xshape = config.getboolean("general", "xshape", fallback=False) # Pass all of our config over to the overlay @@ -49,13 +48,13 @@ class GeneralSettingsWindow(SettingsWindow): def save_config(self): config = ConfigParser(interpolation=None) - config.read(self.configFile) + config.read(self.config_file) if not config.has_section("general"): config.add_section("general") config.set("general", "xshape", "%d" % (int(self.xshape))) - with open(self.configFile, 'w') as file: + with open(self.config_file, 'w') as file: config.write(file) def create_gui(self): @@ -64,7 +63,7 @@ class GeneralSettingsWindow(SettingsWindow): # Auto start autostart_label = Gtk.Label.new("Autostart on boot") autostart = Gtk.CheckButton.new() - autostart.set_active(self.a.is_auto()) + autostart.set_active(self.autostart_helper.is_auto()) autostart.connect("toggled", self.change_autostart) # Force XShape @@ -81,8 +80,8 @@ class GeneralSettingsWindow(SettingsWindow): self.add(box) def change_autostart(self, button): - self.autostart = button.get_active() - self.a.set_autostart(self.autostart) + autostart = button.get_active() + self.autostart_helper.set_autostart(autostart) def change_xshape(self, button): self.overlay.set_force_xshape(button.get_active()) diff --git a/discover_overlay/image_getter.py b/discover_overlay/image_getter.py index 73c7632..7fe4024 100644 --- a/discover_overlay/image_getter.py +++ b/discover_overlay/image_getter.py @@ -28,7 +28,7 @@ class ImageGetter(): def __init__(self, func, url, identifier, size): self.func = func - self.id = identifier + self.identifier = identifier self.url = url self.size = size @@ -46,7 +46,7 @@ class ImageGetter(): pixbuf = pixbuf.scale_simple(self.size, self.size, GdkPixbuf.InterpType.BILINEAR) - self.func(self.id, pixbuf) + self.func(self.identifier, pixbuf) except urllib.error.URLError as exception: logging.error( "Could not access : %s", self.url) @@ -58,20 +58,24 @@ class SurfaceGetter(): def __init__(self, func, url, identifier, size): self.func = func - self.id = identifier + self.identifier = identifier self.url = url self.size = size def get_url(self): """Downloads and decodes""" try: - resp = requests.get(self.url, stream=True, headers={ - 'Referer': 'https://streamkit.discord.com/overlay/voice', 'User-Agent': 'Mozilla/5.0'}) + resp = requests.get( + self.url, stream=True, headers={ + 'Referer': 'https://streamkit.discord.com/overlay/voice', + 'User-Agent': 'Mozilla/5.0' + } + ) raw = resp.raw - im = Image.open(raw) - surf = self.from_pil(im) + image = Image.open(raw) + surface = self.from_pil(image) - self.func(self.id, surf) + self.func(self.identifier, surface) except requests.HTTPError: logging.error("Unable to open %s", self.url) except requests.TooManyRedirects: @@ -85,84 +89,86 @@ class SurfaceGetter(): except TypeError: logging.error("Unable to read %s", self.url) - def from_pil(self, im, alpha=1.0): + def from_pil(self, image, alpha=1.0): """ :param im: Pillow Image :param alpha: 0..1 alpha to add to non-alpha images :param format: Pixel format for output surface """ - if 'A' not in im.getbands(): - im.putalpha(int(alpha * 256.)) - arr = bytearray(im.tobytes('raw', 'BGRa')) + if 'A' not in image.getbands(): + image.putalpha(int(alpha * 256.)) + arr = bytearray(image.tobytes('raw', 'BGRa')) surface = cairo.ImageSurface.create_for_data( - arr, cairo.FORMAT_ARGB32, im.width, im.height) + arr, cairo.FORMAT_ARGB32, image.width, image.height) return surface def get_image(func, identifier, ava, size): """Download to GDK Pixmap""" image_getter = ImageGetter(func, identifier, ava, size) - t = threading.Thread(target=image_getter.get_url, args=()) - t.start() + thread = threading.Thread(target=image_getter.get_url, args=()) + thread.start() def get_surface(func, identifier, ava, size): """Download to cairo surface""" image_getter = SurfaceGetter(func, identifier, ava, size) - t = threading.Thread(target=image_getter.get_url, args=()) - t.start() + thread = threading.Thread(target=image_getter.get_url, args=()) + thread.start() -def get_aspected_size(img, w, h, anchor=0, hanchor=0): +def get_aspected_size(img, width, height, anchor=0, hanchor=0): """Get dimensions of image keeping current aspect ratio""" - px = img.get_width() - py = img.get_height() - if py < 1 or h < 1: + pic_width = img.get_width() + pic_height = img.get_height() + if pic_height < 1 or height < 1: return (0, 0, 0, 0) - img_aspect = px / py - rect_aspect = w / h + img_aspect = pic_width / pic_height + rect_aspect = width / height - y = 0 - x = 0 + offset_y = 0 + offset_x = 0 if img_aspect > rect_aspect: - oh = h - h = w / img_aspect + old_height = height + height = width / img_aspect if anchor == 0: - y = y + (oh - h) + offset_y = offset_y + (old_height - height) if anchor == 1: - y = y + ((oh - h) / 2) + offset_y = offset_y + ((old_height - height) / 2) elif img_aspect < rect_aspect: - ow = w - w = h * img_aspect + old_width = width + width = height * img_aspect if hanchor == 2: - x = x + (ow - w) + offset_x = offset_x + (old_width - width) if hanchor == 1: - x = x + ((ow - w) / 2) - return (x, y, w, h) + offset_x = offset_x + ((old_width - width) / 2) + return (offset_x, offset_y, width, height) -def draw_img_to_rect(img, ctx, x, y, w, h, path=False, aspect=False, anchor=0, hanchor=0): +def draw_img_to_rect(img, ctx, + pos_x, pos_y, + width, height, + path=False, aspect=False, + anchor=0, hanchor=0): """Draw cairo surface onto context""" # Path - only add the path do not fill : True/False # Aspect - keep aspect ratio : True/False # Anchor - with aspect : 0=left 1=middle 2=right # HAnchor - with apect : 0=bottom 1=middle 2=top ctx.save() - px = img.get_width() - py = img.get_height() - x_off = 0 - y_off = 0 + offset_x = 0 + offset_y = 0 if aspect: - (x_off, y_off, w, h) = get_aspected_size( - img, w, h, anchor=anchor, hanchor=hanchor) + (offset_x, offset_y, width, height) = get_aspected_size( + img, width, height, anchor=anchor, hanchor=hanchor) - ctx.translate(x + x_off, y + y_off) - ctx.scale(w, h) - ctx.scale(1 / px, 1 / py) + ctx.translate(pos_x + offset_x, pos_y + offset_y) + ctx.scale(width, height) + ctx.scale(1 / img.get_width(), 1 / img.get_height()) ctx.set_source_surface(img, 0, 0) - ctx.rectangle(0, 0, px, py) + ctx.rectangle(0, 0, img.get_width(), img.get_height()) if not path: ctx.fill() ctx.restore() - return (w, h) + return (width, height) diff --git a/discover_overlay/overlay.py b/discover_overlay/overlay.py index 5639462..3b41110 100644 --- a/discover_overlay/overlay.py +++ b/discover_overlay/overlay.py @@ -10,13 +10,16 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see . -"""Overlay parent class. Helpful if we need more overlay types without copy-and-pasting too much code""" +""" +Overlay parent class. Helpful if we need more overlay +types without copy-and-pasting too much code +""" import sys import logging import gi import cairo gi.require_version("Gtk", "3.0") -# pylint: disable=wrong-import-position +# pylint: disable=wrong-import-position,wrong-import-order from gi.repository import Gtk, Gdk try: from gi.repository import GtkLayerShell @@ -25,7 +28,10 @@ except ImportError: class OverlayWindow(Gtk.Window): - """Overlay parent class. Helpful if we need more overlay types without copy-and-pasting too much code""" + """ + Overlay parent class. Helpful if we need more overlay + types without copy-and-pasting too much code + """ def detect_type(self): window = Gtk.Window() @@ -43,10 +49,10 @@ class OverlayWindow(Gtk.Window): self.compositing = False self.text_font = None self.text_size = None - self.x = None - self.y = None - self.w = None - self.h = None + self.pos_x = None + self.pos_y = None + self.width = None + self.height = None self.set_size_request(50, 50) self.connect('draw', self.overlay_draw) @@ -97,24 +103,23 @@ class OverlayWindow(Gtk.Window): self.text_size = size self.redraw() - def set_floating(self, floating, x, y, w, h): + def set_floating(self, floating, pos_x, pos_y, width, height): self.floating = floating - self.x = x - self.y = y - self.w = w - self.h = h + self.pos_x = pos_x + self.pos_y = pos_y + self.width = width + self.height = height self.force_location() def set_untouchable(self): - (w, h) = self.get_size() - surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h) + (width, height) = self.get_size() + surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) surface_ctx = cairo.Context(surface) surface_ctx.set_source_rgba(0.0, 0.0, 0.0, 0.0) surface_ctx.set_operator(cairo.OPERATOR_SOURCE) surface_ctx.paint() reg = Gdk.cairo_region_create_from_surface(surface) self.input_shape_combine_region(reg) - # self.shape_combine_region(reg) def unset_shape(self): self.get_window().shape_combine_region(None, 0, 0) @@ -129,43 +134,38 @@ class OverlayWindow(Gtk.Window): geometry = monitor.get_geometry() scale_factor = monitor.get_scale_factor() if not self.floating: - w = scale_factor * geometry.width - h = scale_factor * geometry.height - x = geometry.x - y = geometry.y - self.resize(w, h) - self.move(x, y) + width = scale_factor * geometry.width + height = scale_factor * geometry.height + pos_x = geometry.x + pos_y = geometry.y + self.resize(width, height) + self.move(pos_x, pos_y) else: - self.move(self.x, self.y) - self.resize(self.w, self.h) + self.move(self.pos_x, self.pos_y) + self.resize(self.width, self.height) else: - if not self.floating: - screen = display.get_default_screen() - w = screen.width() - h = screen.height() - x = 0 - y = 0 - else: - self.move(self.x, self.y) - self.resize(self.w, self.h) + if self.floating: + self.move(self.pos_x, self.pos_y) + self.resize(self.width, self.height) if not self.floating: - (w, h) = self.get_size() - self.w = w - self.h = h + (width, height) = self.get_size() + self.width = width + self.height = height self.redraw() def redraw(self): gdkwin = self.get_window() if not self.floating: - (w, h) = self.get_size() - self.w = w - self.h = h + (width, height) = self.get_size() + self.width = width + self.height = height if gdkwin: if not self.compositing or self.force_xshape: - (w, h) = self.get_size() - surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h) + (width, height) = self.get_size() + surface = cairo.ImageSurface( + cairo.FORMAT_ARGB32, width, height) surface_ctx = cairo.Context(surface) self.overlay_draw(None, surface_ctx) reg = Gdk.cairo_region_create_from_surface(surface) @@ -182,18 +182,18 @@ class OverlayWindow(Gtk.Window): self.force_location() self.redraw() - def set_align_x(self, b): - self.align_right = b + def set_align_x(self, align_right): + self.align_right = align_right self.force_location() self.redraw() - def set_align_y(self, i): - self.align_vert = i + def set_align_y(self, align_vert): + self.align_vert = align_vert self.force_location() self.redraw() - def col(self, c, a=1.0): - self.context.set_source_rgba(c[0], c[1], c[2], c[3] * a) + def col(self, col, alpha=1.0): + self.context.set_source_rgba(col[0], col[1], col[2], col[3] * alpha) def set_force_xshape(self, force): self.force_xshape = force diff --git a/discover_overlay/settings.py b/discover_overlay/settings.py index 38c5387..4258f22 100644 --- a/discover_overlay/settings.py +++ b/discover_overlay/settings.py @@ -10,7 +10,10 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see . -"""Settings tab parent class. Helpful if we need more overlay types without copy-and-pasting too much code""" +""" +Settings tab parent class. Helpful if we need more +overlay types without copy-and-pasting too much code +""" import os import logging import gi @@ -26,13 +29,16 @@ except ModuleNotFoundError: class SettingsWindow(Gtk.VBox): - """Settings tab parent class. Helpful if we need more overlay types without copy-and-pasting too much code""" + """ + Settings tab parent class. Helpful if we need more + overlay types without copy-and-pasting too much code + """ def __init__(self): Gtk.VBox.__init__(self) self.placement_window = None - self.configDir = None - self.configFile = None + self.config_dir = None + self.config_file = None self.overlay = None self.floating_x = None self.floating_y = None @@ -40,20 +46,20 @@ class SettingsWindow(Gtk.VBox): self.floating_h = None def init_config(self): - self.configDir = os.path.join(xdg_config_home, "discover_overlay") - os.makedirs(self.configDir, exist_ok=True) - self.configFile = os.path.join(self.configDir, "config.ini") + self.config_dir = os.path.join(xdg_config_home, "discover_overlay") + os.makedirs(self.config_dir, exist_ok=True) + self.config_file = os.path.join(self.config_dir, "config.ini") self.read_config() def close_window(self, _a=None, _b=None): if self.placement_window: - (x, y) = self.placement_window.get_position() - (w, h) = self.placement_window.get_size() - self.floating_x = x - self.floating_y = y - self.floating_w = w - self.floating_h = h - self.overlay.set_floating(True, x, y, w, h) + (pos_x, pos_y) = self.placement_window.get_position() + (width, height) = self.placement_window.get_size() + self.floating_x = pos_x + self.floating_y = pos_y + self.floating_w = width + self.floating_h = height + self.overlay.set_floating(True, pos_x, pos_y, width, height) self.save_config() self.placement_window.close() self.placement_window = None diff --git a/discover_overlay/settings_window.py b/discover_overlay/settings_window.py index ec7bc05..bf17d13 100644 --- a/discover_overlay/settings_window.py +++ b/discover_overlay/settings_window.py @@ -16,7 +16,7 @@ from .voice_settings import VoiceSettingsWindow from .text_settings import TextSettingsWindow from .general_settings import GeneralSettingsWindow gi.require_version("Gtk", "3.0") -# pylint: disable=wrong-import-position +# pylint: disable=wrong-import-position,wrong-import-order from gi.repository import Gtk @@ -36,26 +36,26 @@ class MainSettingsWindow(Gtk.Window): self.set_default_size(280, 180) # Create - nb = Gtk.Notebook() + notebook = Gtk.Notebook() # nb.set_tab_pos(Gtk.POS_TOP) self.voice_settings = VoiceSettingsWindow(self.voice_overlay) - nb.append_page(self.voice_settings) - nb.set_tab_label_text(self.voice_settings, "Voice") + notebook.append_page(self.voice_settings) + notebook.set_tab_label_text(self.voice_settings, "Voice") self.text_settings = TextSettingsWindow(self.text_overlay) - nb.append_page(self.text_settings) - nb.set_tab_label_text(self.text_settings, "Text") + notebook.append_page(self.text_settings) + notebook.set_tab_label_text(self.text_settings, "Text") self.core_settings = GeneralSettingsWindow( self.text_overlay, self.voice_overlay) - nb.append_page(self.core_settings) - nb.set_tab_label_text(self.core_settings, "Core") - self.add(nb) - self.nb = nb + notebook.append_page(self.core_settings) + notebook.set_tab_label_text(self.core_settings, "Core") + self.add(notebook) + self.notebook = notebook - def close_window(self, a=None, b=None): - self.text_settings.close_window(a, b) - self.voice_settings.close_window(a, b) - self.core_settings.close_window(a, b) + def close_window(self, widget=None, event=None): + self.text_settings.close_window(widget, event) + self.voice_settings.close_window(widget, event) + self.core_settings.close_window(widget, event) self.hide() return True @@ -63,5 +63,5 @@ class MainSettingsWindow(Gtk.Window): self.voice_settings.present_settings() self.text_settings.present_settings() self.core_settings.present_settings() - self.nb.show() + self.notebook.show() self.show() diff --git a/discover_overlay/text_overlay.py b/discover_overlay/text_overlay.py index 654978a..784d648 100644 --- a/discover_overlay/text_overlay.py +++ b/discover_overlay/text_overlay.py @@ -20,7 +20,7 @@ from .image_getter import get_surface, draw_img_to_rect, get_aspected_size from .overlay import OverlayWindow gi.require_version("Gtk", "3.0") gi.require_version('PangoCairo', '1.0') -# pylint: disable=wrong-import-position +# pylint: disable=wrong-import-position,wrong-import-order from gi.repository import Pango, PangoCairo @@ -47,20 +47,20 @@ class TextOverlayWindow(OverlayWindow): self.fg_col = [1.0, 1.0, 1.0, 1.0] self.attachment = {} - self.imgList = [] - self.imgFinder = re.compile(r"`") + self.image_list = [] + self.img_finder = re.compile(r"`") self.set_title("Discover Text") - def set_text_time(self, t): - self.text_time = t + def set_text_time(self, timer): + self.text_time = timer - def set_text_list(self, tlist, alt): + def set_text_list(self, tlist, altered): self.content = tlist - if alt: + if altered: self.redraw() - def set_enabled(self, en): - if en: + def set_enabled(self, enabled): + if enabled: self.show_all() else: self.hide() @@ -73,12 +73,12 @@ class TextOverlayWindow(OverlayWindow): self.bg_col = bg_col self.redraw() - def set_show_attach(self, att): - self.show_attach = att + def set_show_attach(self, attachment): + self.show_attach = attachment self.redraw() - def set_popup_style(self, b): - self.popup_style = b + def set_popup_style(self, boolean): + self.popup_style = boolean def set_font(self, name, size): self.text_font = name @@ -88,48 +88,50 @@ class TextOverlayWindow(OverlayWindow): self.pango_rect.height = self.text_size * Pango.SCALE self.redraw() - def make_line(self, msg): + def make_line(self, message): ret = "" - if isinstance(msg, list): - for a in msg: - ret = "%s%s" % (ret, self.make_line(a)) - elif isinstance(msg, str): - ret = msg - elif msg['type'] == 'strong': - ret = "%s" % (self.make_line(msg['content'])) - elif msg['type'] == 'text': - ret = self.santize_string(msg['content']) - elif msg['type'] == 'link': - ret = "%s" % (self.make_line(msg['content'])) - elif msg['type'] == 'emoji': - if 'surrogate' in msg: + if isinstance(message, list): + for inner_message in message: + ret = "%s%s" % (ret, self.make_line(inner_message)) + elif isinstance(message, str): + ret = message + elif message['type'] == 'strong': + ret = "%s" % (self.make_line(message['content'])) + elif message['type'] == 'text': + ret = self.sanitize_string(message['content']) + elif message['type'] == 'link': + ret = "%s" % (self.make_line(message['content'])) + elif message['type'] == 'emoji': + if 'surrogate' in message: # ['src'] is SVG URL - #ret = msg - ret = msg['surrogate'] + # ret = msg + ret = message['surrogate'] else: ### Add Image ### url = ("https://cdn.discordapp.com/emojis/%s.png?v=1" % - (msg['emojiId'])) + (message['emojiId'])) img = {"url": url} - self.imgList.append(img) + self.image_list.append(img) ret = "`" - elif msg['type'] == 'inlineCode' or msg['type'] == 'codeBlock' or msg['type'] == 'blockQuote': + elif (message['type'] == 'inlineCode' or + message['type'] == 'codeBlock' or + message['type'] == 'blockQuote'): ret = "%s" % ( - self.make_line(msg['content'])) - elif msg['type'] == 'u': - ret = "%s" % (self.make_line(msg['content'])) - elif msg['type'] == 'em': - ret = "%s" % (self.make_line(msg['content'])) - elif msg['type'] == 's': - ret = "%s" % (self.make_line(msg['content'])) - elif msg['type'] == 'channel': - ret = self.make_line(msg['content']) - elif msg['type'] == 'mention': - ret = self.make_line(msg['content']) - elif msg['type'] == 'br': + self.make_line(message['content'])) + elif message['type'] == 'u': + ret = "%s" % (self.make_line(message['content'])) + elif message['type'] == 'em': + ret = "%s" % (self.make_line(message['content'])) + elif message['type'] == 's': + ret = "%s" % (self.make_line(message['content'])) + elif message['type'] == 'channel': + ret = self.make_line(message['content']) + elif message['type'] == 'mention': + ret = self.make_line(message['content']) + elif message['type'] == 'br': ret = '\n' else: - logging.error("Unknown text type : %s", msg["type"]) + logging.error("Unknown text type : %s", message["type"]) return ret def recv_attach(self, identifier, pix): @@ -139,7 +141,7 @@ class TextOverlayWindow(OverlayWindow): def overlay_draw(self, _w, context, data=None): self.context = context context.set_antialias(cairo.ANTIALIAS_GOOD) - (w, h) = self.get_size() + (width, height) = self.get_size() # Make background transparent context.set_source_rgba(0.0, 0.0, 0.0, 0.0) context.set_operator(cairo.OPERATOR_SOURCE) @@ -150,19 +152,19 @@ class TextOverlayWindow(OverlayWindow): # The window is full-screen regardless of what the user has selected. Because Wayland # We need to set a clip and a transform to imitate original behaviour - w = self.w - h = self.h - context.translate(self.x, self.y) - context.rectangle(0, 0, w, h) + width = self.width + height = self.height + context.translate(self.pos_x, self.pos_y) + context.rectangle(0, 0, width, height) context.clip() - cy = h + current_y = height tnow = time.time() for line in reversed(self.content): if self.popup_style and tnow - line['time'] > self.text_time: break out_line = "" - self.imgList = [] + self.image_list = [] col = "#fff" if 'nick_col' in line and line['nick_col']: @@ -170,98 +172,106 @@ class TextOverlayWindow(OverlayWindow): for in_line in line['content']: out_line = "%s%s" % (out_line, self.make_line(in_line)) if line['attach'] and self.show_attach: - at = line['attach'][0] - url = at['url'] + attachment = line['attach'][0] + url = attachment['url'] if url in self.attachment: - cy = self.draw_attach(cy, url) + current_y = self.draw_attach(current_y, url) else: get_surface(self.recv_attach, url, url, None) # cy = self.draw_text(cy, "%s" % (line['attach'])) - cy = self.draw_text(cy, "%s: %s" % (self.santize_string(col), - self.santize_string(line["nick"]), out_line)) - if cy <= 0: + message = "%s: %s" % (self.sanitize_string(col), + self.sanitize_string( + line["nick"]), + out_line) + current_y = self.draw_text(current_y, message) + if current_y <= 0: # We've done enough break if self.is_wayland: context.restore() - def draw_attach(self, y, url): + def draw_attach(self, pos_y, url): if url in self.attachment and self.attachment[url]: pix = self.attachment[url] - iw = pix.get_width() - ih = pix.get_height() - iw = min(iw, self.w) - ih = min(ih, (self.h * .7)) - (_ax, _ay, _aw, ah) = get_aspected_size(pix, iw, ih) + image_width = min(pix.get_width(), self.width) + image_height = min(pix.get_height(), (self.height * .7)) + (_ax, _ay, _aw, aspect_height) = get_aspected_size( + pix, image_width, image_height) self.col(self.bg_col) - self.context.rectangle(0, y - ah, self.w, ah) + self.context.rectangle(0, pos_y - aspect_height, + self.width, aspect_height) self.context.fill() self.context.set_operator(cairo.OPERATOR_OVER) _new_w, new_h = draw_img_to_rect( - pix, self.context, 0, y - ih, iw, ih, aspect=True) - return y - new_h - return y + pix, self.context, 0, pos_y - image_height, image_width, image_height, aspect=True) + return pos_y - new_h + return pos_y - def draw_text(self, y, text): + def draw_text(self, pos_y, text): layout = self.create_pango_layout(text) layout.set_markup(text, -1) attr = layout.get_attributes() - layout.set_width(Pango.SCALE * self.w) + layout.set_width(Pango.SCALE * self.width) layout.set_spacing(Pango.SCALE * 3) - if(self.text_font): + if self.text_font: font = Pango.FontDescription( "%s %s" % (self.text_font, self.text_size)) layout.set_font_description(font) - _tw, th = layout.get_pixel_size() + _tw, text_height = layout.get_pixel_size() self.col(self.bg_col) - self.context.rectangle(0, y - th, self.w, th) + self.context.rectangle(0, pos_y - text_height, self.width, text_height) self.context.fill() self.context.set_operator(cairo.OPERATOR_OVER) self.col(self.fg_col) - self.context.move_to(0, y - th) + self.context.move_to(0, pos_y - text_height) PangoCairo.context_set_shape_renderer( self.get_pango_context(), self.render_custom, None) text = layout.get_text() count = 0 - for loc in self.imgFinder.finditer(text): + for loc in self.img_finder.finditer(text): idx = loc.start() - if len(self.imgList) <= count: + if len(self.image_list) <= count: break # We fucked up. Who types ` anyway - #url = self.imgList[count] + # url = self.imgList[count] - at = Pango.attr_shape_new_with_data( + attachment = Pango.attr_shape_new_with_data( self.pango_rect, self.pango_rect, count, None) - at.start_index = idx - at.end_index = idx + 1 - attr.insert(at) + attachment.start_index = idx + attachment.end_index = idx + 1 + attr.insert(attachment) count += 1 layout.set_attributes(attr) PangoCairo.show_layout(self.context, layout) - return y - th + return pos_y - text_height def render_custom(self, ctx, shape, path, _data): - key = self.imgList[shape.data]['url'] + key = self.image_list[shape.data]['url'] if key not in self.attachment: get_surface(self.recv_attach, key, key, None) return pix = self.attachment[key] - (x, y) = ctx.get_current_point() - draw_img_to_rect(pix, ctx, x, y - self.text_size, self.text_size, + (pos_x, pos_y) = ctx.get_current_point() + draw_img_to_rect(pix, ctx, pos_x, pos_y - self.text_size, self.text_size, self.text_size, path=path) return True - def santize_string(self, string): + def sanitize_string(self, string): # I hate that Pango has nothing for this. - return string.replace("&", "&").replace("<", "<").replace(">", ">").replace("'", "'").replace("\"", """) + string.replace("&", "&") + string.replace("<", "<") + string .replace(">", ">") + string.replace("'", "'") + string.replace("\"", """) + return string diff --git a/discover_overlay/text_settings.py b/discover_overlay/text_settings.py index 9256ace..8945198 100644 --- a/discover_overlay/text_settings.py +++ b/discover_overlay/text_settings.py @@ -20,7 +20,7 @@ from .draggable_window_wayland import DraggableWindowWayland from .settings import SettingsWindow gi.require_version("Gtk", "3.0") -# pylint: disable=wrong-import-position +# pylint: disable=wrong-import-position,wrong-import-order from gi.repository import Gtk, Gdk, Pango @@ -80,26 +80,26 @@ class TextSettingsWindow(SettingsWindow): # if no guild is specified, populate channel list with every channel from each guild if self.guild == GUILD_DEFAULT_VALUE: c_model.append([guild_name, False]) - for c in self.list_channels_keys: - chan = self.list_channels[c] + for channel_key in self.list_channels_keys: + chan = self.list_channels[channel_key] if chan['guild_id'] == guild_id: c_model.append([chan["name"], True]) - self.channel_lookup.append(c) + self.channel_lookup.append(channel_key) # if a guild is specified, poulate channel list with every channel from *just that guild* if self.guild != GUILD_DEFAULT_VALUE: - for c in self.list_channels_keys: - chan = self.list_channels[c] + for channel_key in self.list_channels_keys: + chan = self.list_channels[channel_key] if chan['guild_id'] == self.guild: c_model.append([chan["name"], True]) - self.channel_lookup.append(c) + self.channel_lookup.append(channel_key) self.channel_widget.set_model(c_model) self.channel_model = c_model idx = 0 - for c in self.channel_lookup: - if c == self.channel: + for channel in self.channel_lookup: + if channel == self.channel: self.ignore_channel_change = True self.channel_widget.set_active(idx) self.ignore_channel_change = False @@ -180,7 +180,7 @@ class TextSettingsWindow(SettingsWindow): def read_config(self): config = ConfigParser(interpolation=None) - config.read(self.configFile) + config.read(self.config_file) self.enabled = config.getboolean("text", "enabled", fallback=False) self.align_x = config.getboolean("text", "rightalign", fallback=True) self.align_y = config.getint("text", "topalign", fallback=2) @@ -222,7 +222,7 @@ class TextSettingsWindow(SettingsWindow): def save_config(self): config = ConfigParser(interpolation=None) - config.read(self.configFile) + config.read(self.config_file) if not config.has_section("text"): config.add_section("text") @@ -246,7 +246,7 @@ class TextSettingsWindow(SettingsWindow): if self.font: config.set("text", "font", self.font) - with open(self.configFile, 'w') as file: + with open(self.config_file, 'w') as file: config.write(file) def create_gui(self): @@ -311,9 +311,9 @@ class TextSettingsWindow(SettingsWindow): monitor = Gtk.ComboBox.new_with_model(monitor_store) monitor.set_active(self.get_monitor_index(self.monitor)) monitor.connect("changed", self.change_monitor) - rt = Gtk.CellRendererText() - monitor.pack_start(rt, True) - monitor.add_attribute(rt, "text", 0) + renderer_text = Gtk.CellRendererText() + monitor.pack_start(renderer_text, True) + monitor.add_attribute(renderer_text, "text", 0) align_x_store = Gtk.ListStore(str) align_x_store.append(["Left"]) @@ -321,9 +321,9 @@ class TextSettingsWindow(SettingsWindow): align_x = Gtk.ComboBox.new_with_model(align_x_store) align_x.set_active(True if self.align_x else False) align_x.connect("changed", self.change_align_x) - rt = Gtk.CellRendererText() - align_x.pack_start(rt, True) - align_x.add_attribute(rt, "text", 0) + renderer_text = Gtk.CellRendererText() + align_x.pack_start(renderer_text, True) + align_x.add_attribute(renderer_text, "text", 0) align_y_store = Gtk.ListStore(str) align_y_store.append(["Top"]) @@ -332,9 +332,9 @@ class TextSettingsWindow(SettingsWindow): align_y = Gtk.ComboBox.new_with_model(align_y_store) align_y.set_active(self.align_y) align_y.connect("changed", self.change_align_y) - rt = Gtk.CellRendererText() - align_y.pack_start(rt, True) - align_y.add_attribute(rt, "text", 0) + renderer_text = Gtk.CellRendererText() + align_y.pack_start(renderer_text, True) + align_y.add_attribute(renderer_text, "text", 0) align_placement_button = Gtk.Button.new_with_label("Place Window") @@ -346,19 +346,19 @@ class TextSettingsWindow(SettingsWindow): channel = Gtk.ComboBox.new() channel.connect("changed", self.change_channel) - rt = Gtk.CellRendererText() - channel.pack_start(rt, True) - channel.add_attribute(rt, "text", 0) - channel.add_attribute(rt, 'sensitive', 1) + renderer_text = Gtk.CellRendererText() + channel.pack_start(renderer_text, True) + channel.add_attribute(renderer_text, "text", 0) + channel.add_attribute(renderer_text, 'sensitive', 1) guild_label = Gtk.Label.new("Server") guild = Gtk.ComboBox.new() guild.connect("changed", self.change_guild) - rt = Gtk.CellRendererText() - guild.pack_start(rt, True) - guild.add_attribute(rt, "text", 0) - guild.add_attribute(rt, 'sensitive', 1) + renderer_text = Gtk.CellRendererText() + guild.pack_start(renderer_text, True) + guild.add_attribute(renderer_text, "text", 0) + guild.add_attribute(renderer_text, 'sensitive', 1) # Show Attachments show_attach_label = Gtk.Label.new("Show Attachments") @@ -406,10 +406,10 @@ class TextSettingsWindow(SettingsWindow): def change_font(self, button): font = button.get_font() desc = Pango.FontDescription.from_string(font) - s = desc.get_size() + size = desc.get_size() if not desc.get_size_is_absolute(): - s = s / Pango.SCALE - self.overlay.set_font(desc.get_family(), s) + size = size / Pango.SCALE + self.overlay.set_font(desc.get_family(), size) self.font = desc.to_string() self.save_config() @@ -418,9 +418,9 @@ class TextSettingsWindow(SettingsWindow): if self.ignore_channel_change: return - c = self.channel_lookup[button.get_active()] - self.connector.start_listening_text(c) - self.channel = c + channel = self.channel_lookup[button.get_active()] + self.connector.start_listening_text(channel) + self.channel = channel self.save_config() def change_guild(self, button): @@ -433,12 +433,12 @@ class TextSettingsWindow(SettingsWindow): def change_placement(self, button): if self.placement_window: - (x, y, w, h) = self.placement_window.get_coords() - self.floating_x = x - self.floating_y = y - self.floating_w = w - self.floating_h = h - self.overlay.set_floating(True, x, y, w, h) + (pos_x, pos_y, width, height) = self.placement_window.get_coords() + self.floating_x = pos_x + self.floating_y = pos_y + self.floating_w = width + self.floating_h = height + self.overlay.set_floating(True, pos_x, pos_y, width, height) self.save_config() if not self.overlay.is_wayland: button.set_label("Place Window") @@ -448,13 +448,13 @@ class TextSettingsWindow(SettingsWindow): else: if self.overlay.is_wayland: self.placement_window = DraggableWindowWayland( - x=self.floating_x, y=self.floating_y, - w=self.floating_w, h=self.floating_h, + pos_x=self.floating_x, pos_y=self.floating_y, + width=self.floating_w, height=self.floating_h, message="Place & resize this window then press Green!", settings=self) else: self.placement_window = DraggableWindow( - x=self.floating_x, y=self.floating_y, - w=self.floating_w, h=self.floating_h, + pos_x=self.floating_x, pos_y=self.floating_y, + width=self.floating_w, height=self.floating_h, message="Place & resize this window then press Save!", settings=self) if not self.overlay.is_wayland: button.set_label("Save this position") @@ -535,19 +535,19 @@ class TextSettingsWindow(SettingsWindow): return self.channel def change_bg(self, button): - c = button.get_rgba() - c = [c.red, c.green, c.blue, c.alpha] - self.overlay.set_bg(c) + colour = button.get_rgba() + colour = [colour.red, colour.green, colour.blue, colour.alpha] + self.overlay.set_bg(colour) - self.bg_col = c + self.bg_col = colour self.save_config() def change_fg(self, button): - c = button.get_rgba() - c = [c.red, c.green, c.blue, c.alpha] - self.overlay.set_fg(c) + colour = button.get_rgba() + colour = [colour.red, colour.green, colour.blue, colour.alpha] + self.overlay.set_fg(colour) - self.fg_col = c + self.fg_col = colour self.save_config() def change_show_attach(self, button): diff --git a/discover_overlay/voice_overlay.py b/discover_overlay/voice_overlay.py index 582270c..917cab5 100644 --- a/discover_overlay/voice_overlay.py +++ b/discover_overlay/voice_overlay.py @@ -54,20 +54,20 @@ class VoiceOverlayWindow(OverlayWindow): 'def', self.avatar_size) self.set_title("Discover Voice") - def set_bg(self, bg): - self.norm_col = bg + def set_bg(self, background_colour): + self.norm_col = background_colour self.redraw() - def set_fg(self, fg): - self.text_col = fg + def set_fg(self, foreground_colour): + self.text_col = foreground_colour self.redraw() - def set_tk(self, tk): - self.talk_col = tk + def set_tk(self, talking_colour): + self.talk_col = talking_colour self.redraw() - def set_mt(self, mt): - self.mute_col = mt + def set_mt(self, mute_colour): + self.mute_col = mute_colour self.redraw() def set_avatar_size(self, size): @@ -116,11 +116,11 @@ class VoiceOverlayWindow(OverlayWindow): def set_norm_col(self): self.col(self.norm_col) - def set_talk_col(self, a=1.0): - self.col(self.talk_col, a) + def set_talk_col(self, alpha=1.0): + self.col(self.talk_col, alpha) - def set_mute_col(self, a=1.0): - self.col(self.mute_col, a) + def set_mute_col(self, alpha=1.0): + self.col(self.mute_col, alpha) def set_user_list(self, userlist, alt): self.userlist = userlist @@ -137,10 +137,10 @@ class VoiceOverlayWindow(OverlayWindow): else: # Name sort self.userlist.sort(key=lambda x: x["friendlyname"]) screen = self.get_screen() - c = screen.is_composited() - if not self.compositing == c: + # Check if composite state has changed + if not self.compositing == screen.is_composited(): alt = True - self.compositing = c + self.compositing = screen.is_composited() if alt: self.redraw() @@ -154,7 +154,7 @@ class VoiceOverlayWindow(OverlayWindow): self.context = context context.set_antialias(cairo.ANTIALIAS_GOOD) # Get size of window - (w, h) = self.get_size() + (width, height) = self.get_size() # Make background transparent self.set_wind_col() # Don't layer drawing over each other, always replace @@ -166,10 +166,10 @@ class VoiceOverlayWindow(OverlayWindow): # The window is full-screen regardless of what the user has selected. Because Wayland # We need to set a clip and a transform to imitate original behaviour - w = self.w - h = self.h - context.translate(self.x, self.y) - context.rectangle(0, 0, w, h) + width = self.width + height = self.height + context.translate(self.pos_x, self.pos_y) + context.rectangle(0, 0, width, height) context.clip() context.set_operator(cairo.OPERATOR_OVER) @@ -206,25 +206,25 @@ class VoiceOverlayWindow(OverlayWindow): self.users_to_draw.insert(0, self_user) # Calculate height needed to show overlay - height = (len(self.users_to_draw) * self.avatar_size) + \ + needed_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 + current_y = 0 + self.vert_edge_padding if self.align_vert == 1: # Ignore padding? - rh = (h / 2) - (height / 2) + current_y = (height / 2) - (needed_height / 2) elif self.align_vert == 2: - rh = h - height - self.vert_edge_padding + current_y = height - needed_height - self.vert_edge_padding for user in self.users_to_draw: - self.draw_avatar(context, user, rh) + self.draw_avatar(context, user, current_y) # Shift the relative position down to next location - rh += self.avatar_size + self.icon_spacing + current_y += self.avatar_size + self.icon_spacing - # Don't hold a ref if self.is_wayland: context.restore() + # Don't hold a ref self.context = None def recv_avatar(self, identifier, pix): @@ -238,7 +238,7 @@ class VoiceOverlayWindow(OverlayWindow): if id in self.avatars: del self.avatars[identifier] - def draw_avatar(self, context, user, y): + def draw_avatar(self, context, user, pos_y): # Ensure pixbuf for avatar if user["id"] not in self.avatars and user["avatar"]: url = "https://cdn.discordapp.com/avatars/%s/%s.jpg" % ( @@ -249,7 +249,7 @@ class VoiceOverlayWindow(OverlayWindow): # Set the key with no value to avoid spamming requests self.avatars[user["id"]] = None - c = None + colour = None mute = False deaf = False @@ -258,94 +258,125 @@ class VoiceOverlayWindow(OverlayWindow): if "deaf" in user and user["deaf"]: deaf = True if "speaking" in user and user["speaking"] and not deaf and not mute: - c = self.talk_col + colour = self.talk_col pix = None if user["id"] in self.avatars: pix = self.avatars[user["id"]] if self.align_right: if not self.icon_only: self.draw_text( - context, user["friendlyname"], self.w - self.avatar_size - self.horz_edge_padding, y) + context, user["friendlyname"], + self.width - self.avatar_size - self.horz_edge_padding, + pos_y + ) self.draw_avatar_pix( - context, pix, self.w - self.avatar_size - self.horz_edge_padding, y, c) + context, pix, + self.width - self.avatar_size - self.horz_edge_padding, + pos_y, + colour + ) if deaf: - self.draw_deaf(context, self.w - self.avatar_size - - self.horz_edge_padding, y) + self.draw_deaf(context, self.width - self.avatar_size - + self.horz_edge_padding, pos_y) elif mute: - self.draw_mute(context, self.w - self.avatar_size - - self.horz_edge_padding, y) + self.draw_mute(context, self.width - self.avatar_size - + self.horz_edge_padding, pos_y) else: if not self.icon_only: self.draw_text( - context, user["friendlyname"], self.avatar_size + self.horz_edge_padding, y) + context, + user["friendlyname"], + self.avatar_size + self.horz_edge_padding, + pos_y + ) self.draw_avatar_pix( - context, pix, self.horz_edge_padding, y, c) + context, pix, self.horz_edge_padding, pos_y, colour + ) if deaf: - self.draw_deaf(context, self.horz_edge_padding, y) + self.draw_deaf(context, self.horz_edge_padding, pos_y) elif mute: - self.draw_mute(context, self.horz_edge_padding, y) + self.draw_mute(context, self.horz_edge_padding, pos_y) - def draw_text(self, context, string, x, y): + def draw_text(self, context, string, pos_x, pos_y): if self.text_font: context.set_font_face(cairo.ToyFontFace( self.text_font, cairo.FontSlant.NORMAL, cairo.FontWeight.NORMAL)) context.set_font_size(self.text_size) - _xb, _yb, w, h, _dx, _dy = context.text_extents(string) - ho = (self.avatar_size / 2) - (h / 2) + _xb, _yb, width, height, _dx, _dy = context.text_extents(string) + height_offset = (self.avatar_size / 2) - (height / 2) if self.align_right: context.move_to(0, 0) self.set_norm_col() - context.rectangle(x - w - (self.text_pad * 2), y + ho - self.text_pad, - w + (self.text_pad * 4), h + (self.text_pad * 2)) + context.rectangle( + pos_x - width - (self.text_pad * 2), + pos_y + height_offset - self.text_pad, + width + (self.text_pad * 4), + height + (self.text_pad * 2) + ) context.fill() self.set_text_col() - context.move_to(x - w - self.text_pad, y + ho + h) + context.move_to( + pos_x - width - self.text_pad, + pos_y + height_offset + height + ) context.show_text(string) else: context.move_to(0, 0) self.set_norm_col() - context.rectangle(x - (self.text_pad * 2), y + ho - self.text_pad, - w + (self.text_pad * 4), h + (self.text_pad * 2)) + context.rectangle( + pos_x - (self.text_pad * 2), + pos_y + height_offset - self.text_pad, + width + (self.text_pad * 4), + height + (self.text_pad * 2) + ) context.fill() self.set_text_col() - context.move_to(x + self.text_pad, y + ho + h) + context.move_to(pos_x + self.text_pad, + pos_y + height_offset + height) context.show_text(string) - def draw_avatar_pix(self, context, pixbuf, x, y, c): + def draw_avatar_pix(self, context, pixbuf, pos_x, pos_y, border_colour): if not pixbuf: pixbuf = self.def_avatar if not pixbuf: return - context.move_to(x, y) + context.move_to(pos_x, pos_y) context.save() if self.round_avatar: - context.arc(x + (self.avatar_size / 2), y + + context.arc(pos_x + (self.avatar_size / 2), pos_y + (self.avatar_size / 2), self.avatar_size / 2, 0, 2 * math.pi) context.clip() self.set_norm_col() context.set_operator(cairo.OPERATOR_SOURCE) - context.rectangle(x, y, self.avatar_size, self.avatar_size) + context.rectangle(pos_x, pos_y, self.avatar_size, self.avatar_size) context.fill() - draw_img_to_rect(pixbuf, context, x, y, + draw_img_to_rect(pixbuf, context, pos_x, pos_y, self.avatar_size, self.avatar_size) context.restore() - if c: + if border_colour: if self.round_avatar: - context.arc(x + (self.avatar_size / 2), y + - (self.avatar_size / 2), self.avatar_size / 2, 0, 2 * math.pi) - self.col(c) + context.arc( + pos_x + (self.avatar_size / 2), + pos_y + (self.avatar_size / 2), + self.avatar_size / 2, + 0, 2 * math.pi + ) + self.col(border_colour) context.stroke() else: - context.rectangle(x, y, self.avatar_size, self.avatar_size) - self.col(c) + context.rectangle( + pos_x, pos_y, + self.avatar_size, self.avatar_size + ) + self.col(border_colour) context.stroke() - def draw_mute(self, context, x, y): + def draw_mute(self, context, pos_x, pos_y): context.save() - context.translate(x, y) + context.translate(pos_x, pos_y) context.scale(self.avatar_size, self.avatar_size) self.set_mute_col() context.save() @@ -397,9 +428,9 @@ class VoiceOverlayWindow(OverlayWindow): context.restore() - def draw_deaf(self, context, x, y): + def draw_deaf(self, context, pos_x, pos_y): context.save() - context.translate(x, y) + context.translate(pos_x, pos_y) context.scale(self.avatar_size, self.avatar_size) self.set_mute_col() context.save() diff --git a/discover_overlay/voice_settings.py b/discover_overlay/voice_settings.py index e4a98cd..20149b1 100644 --- a/discover_overlay/voice_settings.py +++ b/discover_overlay/voice_settings.py @@ -18,7 +18,7 @@ from .draggable_window import DraggableWindow from .draggable_window_wayland import DraggableWindowWayland from .settings import SettingsWindow gi.require_version("Gtk", "3.0") -# pylint: disable=wrong-import-position +# pylint: disable=wrong-import-position,wrong-import-order from gi.repository import Gtk, Gdk, Pango @@ -70,7 +70,7 @@ class VoiceSettingsWindow(SettingsWindow): def read_config(self): config = ConfigParser(interpolation=None) - config.read(self.configFile) + config.read(self.config_file) self.align_x = config.getboolean("main", "rightalign", fallback=True) self.align_y = config.getint("main", "topalign", fallback=1) self.bg_col = json.loads(config.get( @@ -130,14 +130,14 @@ class VoiceSettingsWindow(SettingsWindow): if self.font: desc = Pango.FontDescription.from_string(self.font) - s = desc.get_size() + size = desc.get_size() if not desc.get_size_is_absolute(): - s = s / Pango.SCALE - self.overlay.set_font(desc.get_family(), s) + size = size / Pango.SCALE + self.overlay.set_font(desc.get_family(), size) def save_config(self): config = ConfigParser(interpolation=None) - config.read(self.configFile) + config.read(self.config_file) if not config.has_section("main"): config.add_section("main") @@ -168,7 +168,7 @@ class VoiceSettingsWindow(SettingsWindow): config.set("main", "floating_h", "%s" % (self.floating_h)) config.set("main", "order", "%s" % (self.order)) - with open(self.configFile, 'w') as file: + with open(self.config_file, 'w') as file: config.write(file) def create_gui(self): @@ -231,9 +231,9 @@ class VoiceSettingsWindow(SettingsWindow): monitor = Gtk.ComboBox.new_with_model(monitor_store) monitor.set_active(self.get_monitor_index(self.monitor)) monitor.connect("changed", self.change_monitor) - rt = Gtk.CellRendererText() - monitor.pack_start(rt, True) - monitor.add_attribute(rt, "text", 0) + renderer_text = Gtk.CellRendererText() + monitor.pack_start(renderer_text, True) + monitor.add_attribute(renderer_text, "text", 0) align_x_store = Gtk.ListStore(str) align_x_store.append(["Left"]) @@ -241,9 +241,9 @@ class VoiceSettingsWindow(SettingsWindow): align_x = Gtk.ComboBox.new_with_model(align_x_store) align_x.set_active(True if self.align_x else False) align_x.connect("changed", self.change_align_x) - rt = Gtk.CellRendererText() - align_x.pack_start(rt, True) - align_x.add_attribute(rt, "text", 0) + renderer_text = Gtk.CellRendererText() + align_x.pack_start(renderer_text, True) + align_x.add_attribute(renderer_text, "text", 0) align_y_store = Gtk.ListStore(str) align_y_store.append(["Top"]) @@ -252,9 +252,9 @@ class VoiceSettingsWindow(SettingsWindow): align_y = Gtk.ComboBox.new_with_model(align_y_store) align_y.set_active(self.align_y) align_y.connect("changed", self.change_align_y) - rt = Gtk.CellRendererText() - align_y.pack_start(rt, True) - align_y.add_attribute(rt, "text", 0) + renderer_text = Gtk.CellRendererText() + align_y.pack_start(renderer_text, True) + align_y.add_attribute(renderer_text, "text", 0) align_placement_button = Gtk.Button.new_with_label("Place Window") @@ -329,9 +329,9 @@ class VoiceSettingsWindow(SettingsWindow): order = Gtk.ComboBox.new_with_model(order_store) order.set_active(self.order) order.connect("changed", self.change_order) - rt = Gtk.CellRendererText() - order.pack_start(rt, True) - order.add_attribute(rt, "text", 0) + renderer_text = Gtk.CellRendererText() + order.pack_start(renderer_text, True) + order.add_attribute(renderer_text, "text", 0) box.attach(font_label, 0, 0, 1, 1) box.attach(font, 1, 0, 1, 1) @@ -374,12 +374,12 @@ class VoiceSettingsWindow(SettingsWindow): def change_placement(self, button): if self.placement_window: - (x, y, w, h) = self.placement_window.get_coords() - self.floating_x = x - self.floating_y = y - self.floating_w = w - self.floating_h = h - self.overlay.set_floating(True, x, y, w, h) + (pos_x, pos_y, width, height) = self.placement_window.get_coords() + self.floating_x = pos_x + self.floating_y = pos_y + self.floating_w = width + self.floating_h = height + self.overlay.set_floating(True, pos_x, pos_y, width, height) self.save_config() if not self.overlay.is_wayland: button.set_label("Place Window") @@ -388,13 +388,13 @@ class VoiceSettingsWindow(SettingsWindow): else: if self.overlay.is_wayland: self.placement_window = DraggableWindowWayland( - x=self.floating_x, y=self.floating_y, - w=self.floating_w, h=self.floating_h, + pos_x=self.floating_x, pos_y=self.floating_y, + width=self.floating_w, height=self.floating_h, message="Place & resize this window then press Green!", settings=self) else: self.placement_window = DraggableWindow( - x=self.floating_x, y=self.floating_y, - w=self.floating_w, h=self.floating_h, + pos_x=self.floating_x, pos_y=self.floating_y, + width=self.floating_w, height=self.floating_h, message="Place & resize this window then press Save!", settings=self) if not self.overlay.is_wayland: button.set_label("Save this position") @@ -428,44 +428,44 @@ class VoiceSettingsWindow(SettingsWindow): def change_font(self, button): font = button.get_font() desc = Pango.FontDescription.from_string(font) - s = desc.get_size() + size = desc.get_size() if not desc.get_size_is_absolute(): - s = s / Pango.SCALE - self.overlay.set_font(desc.get_family(), s) + size = size / Pango.SCALE + self.overlay.set_font(desc.get_family(), size) self.font = desc.to_string() self.save_config() def change_bg(self, button): - c = button.get_rgba() - c = [c.red, c.green, c.blue, c.alpha] - self.overlay.set_bg(c) + colour = button.get_rgba() + colour = [colour.red, colour.green, colour.blue, colour.alpha] + self.overlay.set_bg(colour) - self.bg_col = c + self.bg_col = colour self.save_config() def change_fg(self, button): - c = button.get_rgba() - c = [c.red, c.green, c.blue, c.alpha] - self.overlay.set_fg(c) + colour = button.get_rgba() + colour = [colour.red, colour.green, colour.blue, colour.alpha] + self.overlay.set_fg(colour) - self.fg_col = c + self.fg_col = colour self.save_config() def change_tk(self, button): - c = button.get_rgba() - c = [c.red, c.green, c.blue, c.alpha] - self.overlay.set_tk(c) + colour = button.get_rgba() + colour = [colour.red, colour.green, colour.blue, colour.alpha] + self.overlay.set_tk(colour) - self.tk_col = c + self.tk_col = colour self.save_config() def change_mt(self, button): - c = button.get_rgba() - c = [c.red, c.green, c.blue, c.alpha] - self.overlay.set_mt(c) + colour = button.get_rgba() + colour = [colour.red, colour.green, colour.blue, colour.alpha] + self.overlay.set_mt(colour) - self.mt_col = c + self.mt_col = colour self.save_config() def change_avatar_size(self, button):