81 lines
3.2 KiB
Python
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_())
|