Verbessertes Zeichnen mit mehreren Drawing-Areas

This commit is contained in:
2025-09-14 17:19:45 +02:00
parent 20882feeca
commit f3c9ced477
5 changed files with 72 additions and 40 deletions

View File

@@ -300,6 +300,7 @@ class Frontend(Gtk.Window):
def __init__(self, cfg, appdata, device, boatdata, profile):
super().__init__()
self.appdata = appdata
self.appdata.setFrontend(self)
self.owndev = device
self.boatdata = boatdata
self._config = cfg['_config']
@@ -364,14 +365,19 @@ class Frontend(Gtk.Window):
self.add(self.fixed)
# OBP GUI
# Geräterahmen mit Buttons
self.da_device = Gtk.DrawingArea()
self.fixed.put(self.da_device, 0, 0)
self.da_device.set_size_request(530, 555) # für fixed benötigt
self.da_device.add_events(Gdk.EventMask.BUTTON_PRESS_MASK|Gdk.EventMask.BUTTON_RELEASE_MASK)
self.da_device.connect("draw", self.da_device_draw)
self.da_device.connect('button-press-event', self.da_button_press)
self.da_device.connect('button-release-event', self.da_button_release)
# Displayfläche
self.da = Gtk.DrawingArea()
self.da.add_events(Gdk.EventMask.BUTTON_PRESS_MASK|Gdk.EventMask.BUTTON_RELEASE_MASK)
self.fixed.put(self.da, 0, 0)
self.da.set_size_request(530, 555) # für fixed benötigt
self.fixed.put(self.da, 64, 95)
self.da.set_size_request(400, 300) # für fixed benötigt
self.da.connect("draw", self.da_draw)
self.da.connect('button-press-event', self.da_button_press)
self.da.connect('button-release-event', self.da_button_release)
# Flash LED
self.flashled = LED(self.fixed) # Soft Flash-LED
@@ -399,7 +405,7 @@ class Frontend(Gtk.Window):
# Tastaturstatus an Seite durchreichen
self.curpage.keylock = self.keylock
# Neuzeichnen
self.queue_draw()
self.da.queue_draw()
return True
def on_draw(self, widget, ctx):
@@ -407,7 +413,7 @@ class Frontend(Gtk.Window):
ctx.set_source_rgba(0, 0, 0, 0)
ctx.paint()
def da_draw(self, widget, ctx):
def da_device_draw(self, widget, ctx):
viewport = Rsvg.Rectangle()
viewport.x = 0
viewport.y = 0
@@ -418,16 +424,15 @@ class Frontend(Gtk.Window):
viewport.width = 530
viewport.height = 555
self._svg.render_document(ctx, viewport)
def da_draw(self, widget, ctx):
ctx.set_source_rgb(1.0, 0, 0)
if not self._fullscreen:
ctx.translate(64, 95) # Koordinatenursprung auf virtuellen Displaybereich setzen
ctx.rectangle(0, 0, 400, 300)
ctx.clip()
else:
ctx.scale(1.6, 1.6)
ctx.set_source_rgb(0, 0, 0) # Schwarz auf Weiß
# Heartbeat umschalten
if self.curpage.header:
self.curpage.draw_header(ctx)