Borealis-Legacy/screen_overlays.py

81 lines
3.2 KiB
Python

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtCore import Qt, QRect, QPoint
from PyQt5.QtGui import QPainter, QPen, QColor, QFont, QFontMetrics
class OverlayCanvas(QWidget):
"""
UI overlay for drawing and interacting with on-screen elements.
"""
def __init__(self, parent=None):
super().__init__(parent)
# **Full-screen overlay**
screen_geo = QApplication.primaryScreen().geometry()
self.setGeometry(screen_geo) # Set to full screen
self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
self.setAttribute(Qt.WA_TranslucentBackground, True)
self.setAttribute(Qt.WA_NoSystemBackground, True)
self.setAttribute(Qt.WA_OpaquePaintEvent, False)
self.setAttribute(Qt.WA_AlwaysStackOnTop, True)
# **Helper Object: Low Health Alert**
self.helper_LowHealthAlert = QRect(250, 300, 900, 35) # Adjusted width and height
self.dragging = False
self.resizing = False
self.drag_offset = QPoint()
def paintEvent(self, event):
"""Draw the helper overlay objects."""
painter = QPainter(self)
painter.setPen(Qt.NoPen)
painter.setBrush(QColor(255, 0, 0)) # Solid red rectangle
painter.drawRect(self.helper_LowHealthAlert)
# Draw bold white text centered within the rectangle
font = QFont("Arial", 14, QFont.Bold) # Scaled text
painter.setFont(font)
painter.setPen(QColor(255, 255, 255))
text = "LOW HEALTH"
metrics = QFontMetrics(font)
text_width = metrics.horizontalAdvance(text)
text_height = metrics.height()
text_x = self.helper_LowHealthAlert.center().x() - text_width // 2
text_y = self.helper_LowHealthAlert.center().y() + text_height // 4
painter.drawText(text_x, text_y, text)
def mousePressEvent(self, event):
"""Detect clicks for dragging and resizing the helper object."""
if event.button() == Qt.LeftButton:
if self.helper_LowHealthAlert.contains(event.pos()):
if event.pos().x() > self.helper_LowHealthAlert.right() - 10 and event.pos().y() > self.helper_LowHealthAlert.bottom() - 10:
self.resizing = True
else:
self.dragging = True
self.drag_offset = event.pos() - self.helper_LowHealthAlert.topLeft()
def mouseMoveEvent(self, event):
"""Handle dragging and resizing movements."""
if self.dragging:
self.helper_LowHealthAlert.moveTopLeft(event.pos() - self.drag_offset)
self.update()
elif self.resizing:
new_width = max(150, event.pos().x() - self.helper_LowHealthAlert.x())
new_height = max(20, event.pos().y() - self.helper_LowHealthAlert.y())
self.helper_LowHealthAlert.setSize(new_width, new_height)
self.update()
def mouseReleaseEvent(self, event):
"""End dragging or resizing event."""
self.dragging = False
self.resizing = False
if __name__ == '__main__':
app_gui = QApplication(sys.argv)
overlay_window = OverlayCanvas()
overlay_window.show()
sys.exit(app_gui.exec_())