diff --git a/gridplayer/widgets/video_overlay.py b/gridplayer/widgets/video_overlay.py index f898b9c..7296c1c 100644 --- a/gridplayer/widgets/video_overlay.py +++ b/gridplayer/widgets/video_overlay.py @@ -95,14 +95,16 @@ def ui_setup(self): # noqa: WPS213 layout_main.setContentsMargins(0, 0, 0, 0) layout_main.setStackingMode(QStackedLayout.StackAll) - control_widget = QWidget(self) + self.control_widget = QWidget(self) + self.control_widget.setMouseTracking(True) + self.border_widget = OverlayBorder(parent=self) self.border_widget.hide() - layout_control = QVBoxLayout(control_widget) + layout_control = QVBoxLayout(self.control_widget) layout_control.setContentsMargins(10, 10, 10, 10) - layout_main.addWidget(control_widget) + layout_main.addWidget(self.control_widget) layout_main.addWidget(self.border_widget) self.top_bar = QVBoxLayout() @@ -334,14 +336,26 @@ def paintEvent(self, event): self.move_to_parent() if self.is_opaque: - mask = self.childrenRegion() # 0 coord to keep children from sliding off - mask = mask.united(QRegion(QRect(0, 0, 1, 1))) + mask = QRegion(QRect(0, 0, 1, 1)) + + if self.border_widget.isVisible(): + frame_width = 5 + frame = QRegion(self.rect()) + frame -= QRegion( + QRect( + frame_width, + frame_width, + self.width() - frame_width * 2, + self.height() - frame_width * 2, + ) + ) + mask = mask.united(frame) + + mask = mask.united(self.control_widget.childrenRegion()) self.setMask(mask) - event.ignore() - def move_to_parent(self): new_pos = self.parent().mapToGlobal(QPoint()) diff --git a/gridplayer/widgets/video_overlay_elements.py b/gridplayer/widgets/video_overlay_elements.py index a11bc2f..93ce985 100644 --- a/gridplayer/widgets/video_overlay_elements.py +++ b/gridplayer/widgets/video_overlay_elements.py @@ -480,6 +480,11 @@ def _get_y_within_bounds(self, y): class OverlayBorder(OverlayWidget): + def __init__(self, **kwargs): + super().__init__(**kwargs) + + self.setAttribute(Qt.WA_TransparentForMouseEvents) + def paintEvent(self, event) -> None: painter = QPainter(self)