#!/usr/bin/env -S GI_TYPELIB_PATH=${PWD}/build/gtk:${GI_TYPELIB_PATH} LD_PRELOAD=${LD_PRELOAD}:${PWD}/build/gtk/libgtk-4.so python3 import gi gi.require_version('Gdk', '4.0') gi.require_version('Gtk', '4.0') from gi.repository import Gdk from gi.repository import Gtk from gi.repository import Graphene class DemoWidget(Gtk.Widget): __gtype_name__ = "DemoWidget" def __init__(self): super().__init__() def do_measure(self, orientation, for_size: int): # We need some space to draw return 100, 200, -1, -1 def do_snapshot(self, snapshot): # Draw four color squares color = Gdk.RGBA() rect = Graphene.Rect.alloc() width = self.get_width() / 2 height = self.get_height() / 2 Gdk.RGBA.parse(color, "red") rect.init(0, 0, width, height) snapshot.append_color(color, rect) Gdk.RGBA.parse(color, "green") rect.init(width, 0, width, height) snapshot.append_color(color, rect) Gdk.RGBA.parse(color, "yellow") rect.init(0, height, width, height) snapshot.append_color(color, rect) Gdk.RGBA.parse(color, "blue") rect.init(width, height, width, height) snapshot.append_color(color, rect) def on_activate(app): # Create a new window win = Gtk.ApplicationWindow(application=app) win.set_title("Squares") icon = DemoWidget() win.set_child(icon) win.present() # Create a new application app = Gtk.Application(application_id='org.gtk.exampleapp') app.connect('activate', on_activate) # Run the application app.run(None)