import logging from gi.repository import GLib, Gst, cairo from lib.config import Config class VideoWarningOverlay(object): """Displays a Warning-Overlay above the Video-Feed of another VideoDisplay""" def __init__(self, drawing_area): self.log = logging.getLogger('VideoWarningOverlay') self.drawing_area = drawing_area self.drawing_area.connect("draw", self.draw_callback) self.text = None self.blink_state = False GLib.timeout_add_seconds(1, self.on_blink_callback) def on_blink_callback(self): self.blink_state = not self.blink_state self.drawing_area.queue_draw() return True def enable(self, text=None): self.text = text self.drawing_area.show() self.drawing_area.queue_draw() def set_text(self, text=None): self.text = text self.drawing_area.queue_draw() def disable(self): self.drawing_area.hide() self.drawing_area.queue_draw() def draw_callback(self, area, cr): w = self.drawing_area.get_allocated_width() h = self.drawing_area.get_allocated_height() self.log.debug('draw_callback: w/h=%u/%u, blink_state=%u', w, h, self.blink_state) if self.blink_state: cr.set_source_rgba(1.0, 0.0, 0.0, 0.8) else: cr.set_source_rgba(1.0, 0.5, 0.0, 0.8) cr.rectangle(0, 0, w, h) cr.fill() text = "Stream is Blanked" if self.text: text += ": " + self.text cr.set_font_size(h * 0.75) (xbearing, ybearing, txtwidth, txtheight, xadvance, yadvance) = cr.text_extents(text) cr.move_to(w / 2 - txtwidth / 2, h * 0.75) cr.set_source_rgba(1.0, 1.0, 1.0, 1.0) cr.show_text(text)