soreau,
created on Saturday, 13 September 2025, 02:52:07 (1757731927),
received on Saturday, 13 September 2025, 02:52:17 (1757731937)
Author identity: Scott Moreau <oreaus@gmail.com>
a0d3f2cc911a2c77ba1a31ab894d18d2c798b93c
main.py
@@ -107,16 +107,14 @@ class PanoramaBG(Gtk.Application):
yaml_file = yaml_loader.load(config_file)
monitors = self.display.get_monitors()
for monitor in monitors:
background_window = BackgroundWindow(self, monitor)
monitor.background_window = background_window
if monitor.get_connector() in yaml_file["monitors"]:
background_window.put_sources(yaml_file["monitors"][monitor.get_connector()]["sources"])
background_window.time_per_image = yaml_file["monitors"][monitor.get_connector()]["time_per_image"]
background_window.change_image()
background_window.picture.set_content_fit(FITTING_MODES[yaml_file["monitors"][monitor.get_connector()]["fitting_mode"]])
background_window.put_sources(yaml_file["monitors"][monitor.get_connector()]["sources"])
background_window.picture1.set_content_fit(FITTING_MODES[yaml_file["monitors"][monitor.get_connector()]["fitting_mode"]])
background_window.picture2.set_content_fit(FITTING_MODES[yaml_file["monitors"][monitor.get_connector()]["fitting_mode"]])
background_window.present()
@@ -208,6 +206,7 @@ class BackgroundWindow(Gtk.Window):
self.sources = []
self.time_per_image = 0
self.current_timeout = None
self.pic1 = True
Gtk4LayerShell.init_for_window(self)
Gtk4LayerShell.set_namespace(self, "com.roundabout_host.panorama.background")
@@ -219,8 +218,17 @@ class BackgroundWindow(Gtk.Window):
Gtk4LayerShell.set_anchor(self, Gtk4LayerShell.Edge.BOTTOM, True)
Gtk4LayerShell.set_anchor(self, Gtk4LayerShell.Edge.RIGHT, True)
self.picture = Gtk.Picture()
self.set_child(self.picture)
self.picture1 = Gtk.Picture()
self.picture2 = Gtk.Picture()
self.stack = Gtk.Stack()
self.stack.set_transition_type(Gtk.StackTransitionType.CROSSFADE)
self.stack.add_child(self.picture1)
self.stack.add_child(self.picture2)
self.stack.set_visible_child(self.picture1)
self.set_child(self.stack)
def put_sources(self, sources):
self.all_sources = []
@@ -232,10 +240,20 @@ class BackgroundWindow(Gtk.Window):
else:
self.all_sources.append(path)
self.all_sources = self.all_sources
self.stack.set_transition_duration(1000)
now = GLib.DateTime.new_now_local()
self.change_image()
def change_image(self):
now = GLib.DateTime.new_now_local()
self.picture.set_filename(str(self.all_sources[now.to_unix() // self.time_per_image % len(self.all_sources)]))
# Ping pong between images is required for transition
if self.pic1:
self.picture1.set_filename(str(self.all_sources[now.to_unix() // self.time_per_image % len(self.all_sources)]))
self.stack.set_visible_child(self.picture1)
else:
self.picture2.set_filename(str(self.all_sources[now.to_unix() // self.time_per_image % len(self.all_sources)]))
self.stack.set_visible_child(self.picture2)
self.pic1 = not self.pic1
time_until_next = self.time_per_image - now.to_unix() % self.time_per_image
self.current_timeout = GLib.timeout_add_seconds(time_until_next, self.change_image)
return False