-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathosd_widget.py
More file actions
39 lines (31 loc) · 1.34 KB
/
osd_widget.py
File metadata and controls
39 lines (31 loc) · 1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# osd_widget.py
import cairo
from PyQt5 import QtWidgets, QtCore, QtGui
from cairo_renderer import CairoRenderer
class OSDWidget(QtWidgets.QWidget):
def __init__(self, frequency_provider):
super().__init__()
self.frequency_provider = frequency_provider
self.setWindowTitle("Real-Time OSD")
self.setGeometry(100, 100, 500, 100)
self.setWindowFlags(
QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint
)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
self.setAttribute(QtCore.Qt.WA_NoSystemBackground)
def paintEvent(self, event):
width, height = self.width(), self.height()
# Fetch the current frequency from the frequency provider
buzzer_frequency = self.frequency_provider()
# Use CairoRenderer to create a Cairo surface with the current frequency
cairo_renderer = CairoRenderer(width, height)
surface = cairo_renderer.render(buzzer_frequency)
# Transfer the Cairo surface to a QImage for display
qimage = QtGui.QImage(
surface.get_data(), width, height, QtGui.QImage.Format_ARGB32
)
painter = QtGui.QPainter(self)
painter.drawImage(0, 0, qimage)
painter.end()
def update_osd(self):
self.update() # Trigger the paintEvent to refresh the display