From 505e97454b99b383a2a16cd84da989f325bb532c Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Wed, 4 Dec 2024 12:56:42 +0000 Subject: [PATCH 01/17] release post --- docs/blog/posts/release1.0.0.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/blog/posts/release1.0.0.md diff --git a/docs/blog/posts/release1.0.0.md b/docs/blog/posts/release1.0.0.md new file mode 100644 index 0000000000..e69de29bb2 From ada535fbede63dd6ae78ca1340d1d29a632c5d8a Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Wed, 4 Dec 2024 17:08:52 +0000 Subject: [PATCH 02/17] post --- docs/blog/posts/release1.0.0.md | 9 +++++++++ src/textual/_node_list.py | 10 +++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/docs/blog/posts/release1.0.0.md b/docs/blog/posts/release1.0.0.md index e69de29bb2..2005f6cb1b 100644 --- a/docs/blog/posts/release1.0.0.md +++ b/docs/blog/posts/release1.0.0.md @@ -0,0 +1,9 @@ +--- +draft: true +date: 2024- +categories: + - Release +title: "There can be only one (point zero)" +authors: + - willmcgugan +--- diff --git a/src/textual/_node_list.py b/src/textual/_node_list.py index 1ee2a3bddb..48bb2bea53 100644 --- a/src/textual/_node_list.py +++ b/src/textual/_node_list.py @@ -15,7 +15,7 @@ class DuplicateIds(Exception): - pass + """Raised when attempting to add a widget with an id that already exists.""" @rich.repr.auto(angular=True) @@ -138,6 +138,14 @@ def _insert(self, index: int, widget: Widget) -> None: self.updated() def _ensure_unique_id(self, widget_id: str) -> None: + """Ensure a new widget ID would be unique. + + Args: + widget_id: New widget ID. + + Raises: + DuplicateIds: If the given ID is not unique. + """ if widget_id in self._nodes_by_id: raise DuplicateIds( f"Tried to insert a widget with ID {widget_id!r}, but a widget {self._nodes_by_id[widget_id]!r} " From 2791266e4e5f4fae3ffe0cf778551c859c87e590 Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Thu, 5 Dec 2024 15:51:14 +0000 Subject: [PATCH 03/17] snapshot --- .../images/compositor/cuts1.excalidraw.svg | 21 +++++++++++++++++++ .../images/compositor/cuts2.excalidraw.svg | 21 +++++++++++++++++++ .../images/compositor/cuts3.excalidraw.svg | 21 +++++++++++++++++++ docs/blog/posts/release1.0.0.md | 10 ++++++++- 4 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 docs/blog/images/compositor/cuts1.excalidraw.svg create mode 100644 docs/blog/images/compositor/cuts2.excalidraw.svg create mode 100644 docs/blog/images/compositor/cuts3.excalidraw.svg diff --git a/docs/blog/images/compositor/cuts1.excalidraw.svg b/docs/blog/images/compositor/cuts1.excalidraw.svg new file mode 100644 index 0000000000..453b15d112 --- /dev/null +++ b/docs/blog/images/compositor/cuts1.excalidraw.svg @@ -0,0 +1,21 @@ + + + eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1ZbVPbRlx1MDAxMP7Or/C4X8Nx7y+Z6XRi51xyXGIhgZaUdjJcdTAwMTkhnW1cdTAwMTVZUqRzgGTy37tnjE/Y1oRMcKduObCw7nVv93lud48vW51O112Vtvu407WXcZSlSVx1MDAxNV10XHUwMDFm+fpPtqrTXCKHJjp9r4tJXHUwMDE1T3uOnCvrxzs746g6t67MotiiT2k9ibLaTZK0QHEx3kmdXHUwMDFk17/45+tobH8ui3HiKlx1MDAxNFx1MDAxNtm2SeqK6notm9mxzV1ccrP/XHTvnc6X6bMhXWVjXHUwMDE35cPMTlx1MDAwN0ybgoCGL1a+LvKprMJgypk2Yt4hrZ/Cas4m0DpcdTAwMDCJbWjxVd3d33nBaVx1MDAxNmenZy97u5fGXHUwMDE1ly8mYdFBmmXH7iqbXG5cdTAwMTVXRV1vj1wiXHUwMDE3j0KP2lXFuX2XJm50o7tG/XxsXYBcdTAwMWXCqKqYXGZHua29XG7IvLYoozh1V75cdTAwMGXjee21XHUwMDFlXHUwMDFld0LNpV+JMUSxXHUwMDEwRHNKXHQnjT37XHRcdTAwMTgzSFx1MDAxYUmFpkzChy1cYtYvMrBcdTAwMDZcYvZcdTAwMTOx/ieIdlx1MDAxNsXnQ5AvT0KfSCR6MFxifS5m25WYIUxcYuaKSUY1XHTbXHUwMDFm2XQ4cl5OjTTnnFx1MDAxMqalXCJaXHUwMDA1MWs7tYpmXHUwMDE0+6FBXHJ+9XI3mcLjfTBFXHUwMDA1wNr1I/JJljU1mSczTd7AKFx1MDAwMInNar6G7fn+z1x1MDAxYVx1MDAwMFxmK0zKJLpGXG5RjHHCXGJTUlx1MDAwNrVnaX6+uHxWxOdcdTAwMDFcXFuNtb5cdTAwMGbTYMc2UFx1MDAxM64oXHUwMDEz3tR3RnXfkPrDuLdXSZdcdTAwMWIzJIPDYSk2XHUwMDAz1Vx1MDAxY3HKseDKXHUwMDE4bFx1MDAwNFa3UE2VRFx1MDAxZS9cZlx1MDAxYkA8Jlxc/Fx1MDAxMKzP6ICenS3DXHUwMDFhtI20UFxuNI+NVJqKXHUwMDE1uJaIS1wisdbXuOaLuDZGcaNcdTAwMDQ1/2tcXIPJSSuwXHUwMDE5xphcdTAwMTmq1Z2BfWCO8OFcdTAwMDHvu/Spev382cT0XHUwMDE4O91cdTAwMDRgc1wikMKYY4ol9Vx1MDAwZnlcdTAwMWLYRFwiQlxy41x1MDAxYYzjy1x1MDAwZuF6MIhNbNaEay0pIVLJ//x5XHLDV0Jatp/Uhlx1MDAxManh9+6Afnfx5PTV4E2cbItfSX2Svz3+oLM1XHUwMDAwOonqkb3no1ogiDwgtuCwYUPZLUBcdTAwMTNNXHUwMDEwaEJiwTQ4d8xcdTAwMTclu59cdTAwMDBcdTAwMDQjRjlcdTAwMTBcdTAwMDczXCIwpWJcdTAwMTWiidZcYsJcdTAwMGZMjYAwhJuG/WaQ5tRQic16Qlx1MDAxMPrPQrqh5qhyvTRP0ny4OMTmSUtLXHUwMDE21a5fjMepXHUwMDAzMd5cdTAwMTRp7lx1MDAxNntM531SVcXFyEZLuoCZW9tKP11cYvp9XHTfOlx1MDAwMV7Tl/n3949W9t5uN70vy0ZcdTAwMGZcdTAwMTNuNf9+L/uJUIu1c/orw8BY+DvoPz5cdTAwMWT091x1MDAwZvDV3kn8fPdtdDWQw6zeXGL6e4dcdTAwMDbcJ5BeXHUwMDEwXHT0XHR+4ob+RFx1MDAxOC2l4lxmjPODgVpcdTAwMWL9QVx1MDAwNK9yqZThwGC+XCL/8EDAXFwo7ONFjWUjorxhP4wn0Fx1MDAxZVx1MDAxYVx1MDAxZdj/b2d/q+F9WTb5fXGftMayXFwpOI6UXGLR/jdvXHUwMDFlXlx1MDAxZOz3jv7YO3z54lxiy9P9XHUwMDBik1/ub1x1MDAwNPUhgkRYwVx1MDAwMYBcdTAwMDVVcMbevnmAU1x1MDAxMIxcdTAwMDMpK6RoXHUwMDEwIyihXHUwMDE3JLunq1x1MDAwNyThkIFcdTAwMDRcdTAwMTFSLIimdYinXHUwMDFi1DdIXG6hqJdUQzLZiKqvqVx1MDAwZlx1MDAwMYryh9h6gtlcdTAwMDfur4X7rZb3Zdnm98T9hlx1MDAwN1t0+/6CRshGXHUwMDAw/C3qv1x1MDAxOFx1MDAxZMX79O1vx9t/XHUwMDFk9k9Ke4I/XHUwMDFmPN1cYuorybzXp1x1MDAwNlJVXHUwMDA2j8Dta69cdTAwMGYpgTSKXHUwMDAxqVxig4hsPUG/QlJcdIaZkVx1MDAxMHhQLlZSXyBMIVx1MDAxN2NwXHUwMDAyQVxmaEKfXHUwMDE59YUhTFNqXHUwMDFlvP7mML/V8L4sm/yemC9a/91cdTAwMDBcYlx1MDAxMtLf2dzd65fxszdcdTAwMWbL40HvhFxcpXt0spf3zXAjqK9cdTAwMTlDmGHv74VcdTAwMDDHeftcdTAwMDKLaI4gXHUwMDBigGRcdTAwMGLAXHUwMDBiXHUwMDA3XHUwMDA0X4/XZ4j6XHUwMDBiLC1cdOOSXHUwMDEz0rieanBcdTAwMWbOKEhKhNRcblx1MDAwMkTevHqYuX1cdTAwMDXOXHUwMDAzM6rXcjf7QP61kL/d9L4sXHUwMDFivY39W7NcdTAwMTW6UVlcdTAwMWU7UP7ciFx1MDAwMII0OU4/21v76H5K7UVv5S2rL92tmaU9d+1cdTAwMTRcdTAwMTFft77+XHJcdD1cIqsifQ== + + + + + diff --git a/docs/blog/images/compositor/cuts2.excalidraw.svg b/docs/blog/images/compositor/cuts2.excalidraw.svg new file mode 100644 index 0000000000..55dc4feb13 --- /dev/null +++ b/docs/blog/images/compositor/cuts2.excalidraw.svg @@ -0,0 +1,21 @@ + + + eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1aa1PbyFx1MDAxMv3Or6C4X5fJdM+rJ1W3bi2EJCxcdTAwMWJvQlx1MDAxZSR7a4tcdTAwMTKSbOv6IUeScWAr/317XHUwMDFjQMK2slDArThcdTAwMWJRZeyZkdTqPqdfoz83Nje3qrNJuvV4cyv9XHUwMDE0R8MsKaLZ1k9h/DQtyixcdTAwMWbzXHUwMDE0zn+X+bSI5yv7VTUpXHUwMDFmP3o0iopBWk2GUZyK06ycRsOymiZZLuJ89Cir0lH5n/DZiUbpvyf5KKlcblHfZDtNsiovvtwrXHUwMDFkpqN0XFyVfPX/8u/NzT/nn1xy6Yo0rqJxb5jOT5hP1Vx1MDAwMlpjXHUwMDE3Rzv5eC6skVIqXHUwMDAwvJrPyid8typNeLLLXHUwMDEyp/VMXHUwMDE42rLl09Hz6dGz92/Oj2LZl9s7g3Fe37SbXHKHr6uz4VxcqLjIy3K7XHUwMDFmVXG/XlFWRT5Ij7Kk6l/qrjF+dW6Zs1x1MDAxZeqzinza64/TMqhcdTAwMDCuRvNJXHUwMDE0Z9VZXHUwMDE4k/Jq9ItcdTAwMWVcdTAwMWVv1iOf+JdCJYw2JDU5Y1xi6Wo2nK+sXHUwMDEyYKy35Fx1MDAxMVx1MDAxZGpYkGs3XHUwMDFmsjFYrn9BXHUwMDFh/mrJTqJ40GPxxkm95lx1MDAwNLt4clKvmV08LZBcdTAwMTSS0HtcdTAwMDTg7866qyX9NOv1q6BcdTAwMTErXHUwMDE0abKkPVx1MDAxYatQ6lqUdG5cdTAwMTZcdTAwMDDjXHUwMDFkWNmwalx1MDAxMGCyn8xcdTAwMDHyR22MgqG1XHUwMDFmTlx1MDAxOU+Hw6Yux8mFLi+BVENJXYx8rp8wrN9rQLC+w3SSRF+wXHUwMDAyTilccopFk75W7TBcdTAwMWJcdTAwMGZcdTAwMTZvP8zjQVxyr43GvW6HalZcdTAwMDO0wVx1MDAxYUBcdTAwMTnSUstcdTAwMWLjuvvmyctcdTAwMDSt2fv97NS8lb3emzj6tFx1MDAwZbg2UjNgpFx1MDAwNOuVVlx1MDAwZfR1XFyDXHUwMDEyTHBiRGuQXps74brbjX3sV+DagiBHTpLSJFx1MDAxNbNoJa5cdTAwMWR4gyDJM05cYtxcIq6RXHTB7LCavndcXPPpqyFtTSuiJZBi9dGNXHUwMDExrV79/tur44P+ce9cdTAwMTdNv8bJy9nz97NcdTAwMDdAdFx1MDAxMpX99J5dNUNaK+NcdTAwMTQ7bGRsX8c0Wlx1MDAxMoxmo5Vid63R2zuBOjJcdHW7y6CWguVcdTAwMDD0TFx1MDAxZiNcdTAwMTFccpplUFx1MDAwM5FAUFx1MDAxMr3RXGK6XHT8S1CzhDrMPFx1MDAwNKbx/4vphpqjotrJxkk27i2eko6TlplhVFa7+WiUVSzGyzxcdTAwMWJXiyvm1/25KPJZP42WdMFXbp2bhMvV+VE46m+bNb7mP66+//HTytXb7aZcdTAwMGbHstHrXHUwMDBibjT/35b+aPTi6CX9PSdcdTAwMDJcdTAwMDBa3TxRe2dfXHUwMDE2oydD8zzNXne1tJOz88nZWtA/RDQmXHI5XHUwMDE1Qlx1MDAxYSyS31x0zfmR1JylcS53t0StjftGkFfWWufYv1ip66e/Rn2pjZPg2TVLK5fimZLGkSH4Qf31oX6r4cOxbPL7XCK+pMXRS+JrZ9FZ31xigX9H/FdcdTAwMWar3k482teHKtuPaLei/v/erVx1MDAwNfFZ74JTRC9ZtcrC9VxuXHJ5XHUwMDEyXHUwMDExwTnlOX2UqFx1MDAxZYT5VvCN2es7Z1BaSzV5XHUwMDFizPfCXHUwMDFh45CXXHUwMDE58kY2JLmo0DRcdTAwMTFcdTAwMTeSgPXz/aD+t079VsuHY9nm90R9aMSWXHUwMDA16pPk+7C3uTn1+4OoKlx1MDAwNmXvw3QmP9LJuyfq11l/LahPXHUwMDA2OeZz5Ge3XHUwMDFionqda8+570BcdTAwMTivrTPMe2D7PFxi9Z3gXHUwMDFiqFC+Wo+ozUrqXHUwMDFiIbn+XHUwMDAwxdVcdOd/zdLjgvpGe0+cqtVW+0H9b536rZZcdTAwMGbHss3vi/rt/SuN2irwrobX31G/92Zgt19F2XvwXHUwMDA3p8mzXHUwMDE3u/uHnVx1MDAwZmtBfda4YFVcdTAwMTAnVFxurGm0Xi+pj1x1MDAwNkJbiV2hMfAwYV9cdCTjXHUwMDFjWVDaalx1MDAwMFfTt0F+JXiBNZZcdTAwMWMniLrhuS8zfqdcdTAwMWM59yPhX1x1MDAxZuq3XHUwMDFiPlx1MDAxY8smvyX3v74v08hcdTAwMWNcdTAwMTfbfaHCXHUwMDA1MPbmXHUwMDFk7P7xMP3FpHTgR/RsNHL+507neFx1MDAxZDrYYWfGWzTMXHUwMDFksM42NkXO5q7QXHUwMDBiZZTWXFxKy9A41lx1MDAwYoLdj1x1MDAwM1xilvbKaVLshsg3m9B1XHUwMDBim+NcdTAwMDRJx1x1MDAxOVwiIPui5ibRRfAntMDVXHUwMDFhPUjw/5Y62F/FNdOpXHLXKNnErGd78z6239OdKMZx/vT8fG8w3ZVcdTAwMThlb9dcdTAwMDHXXHUwMDA2nDDoXHUwMDEwKXSpaVx01cHfXHUwMDE4Iz2XsrLZPbpPVFx1MDAxYlx1MDAxMKRCXHUwMDFincMnMnlW9LCRhGLqSU5wOONorLhcdTAwMDQ1UsC6b2xcdTAwMTL/I0HtWzfRIeQlXFyr6ZuD+sOLNJFcdTAwMDdkO0fdJJ3tRCe9/tNqXHUwMDFkQM15sCBcZnp3jlx1MDAxZLcxXHUwMDBisGbIc6UmtfLg6GFyNba9XHUwMDAw9tFcdTAwMWWd0WiNW1GoMai5elacRkvDKbvTSz1cdTAwMWEu81x1MDAxZFx1MDAwN+CHqdPWXHUwMDA21V6176EzqJG8lDdPQZSbdHd2T4rT7tuyL5POcXEwOF9cdTAwMDdUk1xyWzpcdTAwMWPWyTCs/DKoUTOcODdB5Ztb7Pe654CcXWgmXHIzi4vQ5q5nM1x1MDAwM2FcdTAwMGZcckwuXGaZiILl/kPYl/Lk/uG4Jmhtq2lcdTAwMWL2ZM0t2mrT3ThK3qfjXHUwMDBldd3hx1x1MDAxOVRH+unzdYA1XHUwMDEzOHTVPFx1MDAxN9fz1sbCuyFWXHTtXHUwMDE16eDO2VWqu+G69aUno0ONZbXkxNhxmdWSg3Dc8E5cdTAwMDaYkF/OrK1V3lui7/7dkK+/86Sca8M1cjyUUt3iXHKRXHUwMDE3XHUwMDAzPPxAh/v7crS381vPvtv7hGZcdTAwMWRwzVWiXGKu0liGTFx1MDAwMMx1XFyDXHUwMDEyYdOMXHUwMDAxXHUwMDBmVnvr71x1MDAwNOvWd56cXHUwMDExXHUwMDFl0VqQyoZcdTAwMWSrVbA2goBBz6FDh1x1MDAxNpdeTq69lVx1MDAwZXnF95NcXG9cXPRatqLJ5HXFl7xcdTAwMTKNXHUwMDFmLUteZ+fptctsnWYhXHUwMDAzXqX5cGxtXFzIXHUwMDFm8JjOn/Pzxue/XHUwMDAwKDubXHIifQ== + + + + + diff --git a/docs/blog/images/compositor/cuts3.excalidraw.svg b/docs/blog/images/compositor/cuts3.excalidraw.svg new file mode 100644 index 0000000000..af592290c1 --- /dev/null +++ b/docs/blog/images/compositor/cuts3.excalidraw.svg @@ -0,0 +1,21 @@ + + + eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1ZW1PbRlx1MDAxNH7nV3jc13ize/aemU5cdTAwMDdCQtKkiVx1MDAwM6SQdDKMbMm2QJZUScZ2M/nvPSuMJXxJoDFt3GFcdTAwMTmMtdejPd93bnzeaTSaxTRccppPXHUwMDFhzWDS9aLQz7xx85Hrv1xmsjxMYlx1MDAxY4LyOU9GWbecOSiKNH/y+PHQyy6CXCKNvG5ALsN85EV5MfLDhHST4eOwXGKG+S/u8403XGZ+TpOhX2SkOqRcdTAwMTX4YZFkV2dcdTAwMDVRMFxm4lwix93/wOdG43P5WZMuXHUwMDBiuoVcdTAwMTf3o6BcXFBcdTAwMGVVXHUwMDAyaqFcdTAwMTZ73yRxKazUSlxisJTOJ4T5Plx1MDAxZVdcdTAwMDQ+jvZQ5KBcdTAwMWFxXc2DuNOe9M90cdrd7zNv1Dk7fndUndpcdTAwMGKj6KiYRqVU3SzJ89bAK7qDakZeZMlFcFx1MDAxMvrF4Pryav3ztXmCXHUwMDE3Ua3KklF/XHUwMDEwXHUwMDA3ubtcdTAwMDM2701Sr1x1MDAxYlx1MDAxNlPXV3uFq4t40qh6JvjUXHUwMDAySjiVXHUwMDFjOFx1MDAxNcYwYeejbj1QTZgxslx1MDAxY9XKUr0g2NMkQnWgYD+xwP1UonW87kVcdTAwMWbli/1qTlx1MDAwN3rQ6VRzxrPXZYZcdTAwMTJqwFpgXGa/a1VcdTAwMWQzXGLC/qBwoijCjTDKXGJcdTAwMGJScaCiXHUwMDEyJSj1wqxcdTAwMTVaXHUwMDE5KqpcdTAwMTEnQPrSLyHyqdJGhuB66ZbEoyiqX2bszy7zXHUwMDFhSlx1MDAxNZj4rOdL9YZu/rNcdTAwMWFcYqtcdTAwMTNGqe9dgYVpzlx1MDAwNePM4G8lV1x1MDAxNMZcdTAwMTeLx0dJ96LC107trLvhmoFg64CtmJKWgYRbXHUwMDAz+3h0MG1cdTAwMWI4378825uOo8nr89/az7ZcdTAwMDHYTFFcIsFcdTAwMTiDNLZWc3NcdTAwMDPYTGpCXHUwMDE159qA0ozbmi34J8Du9bq2a1dcdTAwMDBbMWK00dRwYSi3yqxcdTAwMDS2ZlZcdTAwMDKjxpZA0YvAlmClRfr973GNy1dCXHUwMDFhpFxch2i0UFLg7bLbQ7p/+vJ890+TXHUwMDE0om3Phj5LMzk5vFx1MDAwN0j7Xj5cYjZrrJklXHUwMDEyX1hcbq4tY7p2LeVcdTAwMDZcZlxi6oVaLaxAwFj+XaD2pG96vWVQo8NAXHUwMDEzg+6RM0lcdTAwMDGNiVxcXHUwMDA2NTpcclx1MDAwMoxTRK5cdTAwMDD0KjXgX1trSdFSa6XofaBcdTAwMWH+XVTX7tnLir0w9sO4v7gkiP01I5GXXHUwMDE3T5PhMCxQjHZcdTAwMTLGxeKMct/dLEvGg8Bbulx1MDAwYtx57VjqtqtiJNeqb41cbmDlw/z7p0crZ7fW6961Za1XXHUwMDFi7tT/3tVcdTAwMDDwmk9fMFx1MDAwMIxLriWGXHJcdTAwMTXCvmVcdTAwMDBe77amraeDPDzcff+ixZ6dXGZcdTAwMGWjk60wXHUwMDAwzp9Qy7WQLlx1MDAxOGOqdi1XXHUwMDA2gFx1MDAxMclcdTAwMTSXXHUwMDE4sqHX499cdTAwMTmurTNcdTAwMDCSXHUwMDE4y5VSWltcdTAwMDGKiupcdTAwMDJu8J+ilJShmIYquuTUXFxcdTAwMTSikGyy8rxcdTAwMGb8/9H5v1bzri3rfEPsXHUwMDA3a1x1MDAxNnuv2a+1kU6Y22dqr4CL6YEx48DrXHUwMDBmJ8/zND1cdTAwMGXfbFx1MDAwNfk5XHUwMDAwQUOoNYasXHUwMDE2gC46f0pcdTAwMDBNIVx1MDAxYWZmoVx1MDAxZeJvkvqKKCRcdTAwMDfGIFpcdTAwMDJVylTkrVHfXHUwMDEyJaVcdTAwMDacJo2VtFx1MDAxNoXMqM9cdTAwMDRXmtpcdTAwMDfqb1x1MDAxMfXXat61ZZ1vivpcdTAwMWNcdTAwMTZ7545foJnBw2yFom9x//3px1a3OIna7Jh1Tj9kQ3jxNttcbu5Lap3jt2VUhdlk7aWvyC+JXHUwMDAyXHUwMDA1roRi0DTUXHUwMDEwvEn2a6K05C6PVWhihFxcyX5JKChkXHUwMDExRzhg3lpLrGfs19o5XGItXHUwMDFlXHUwMDAy/+1h/1rNu7as802x/yuVLOCYhvBaTeRb5Fx1MDAxZl+0Pth4v3X2dvDxSOxOzuXe+ON2kF9cdTAwMWLCKeb9oKlcdTAwMDaplrlcdTAwMGZcdTAwMDZ1I4ThuFx1MDAxOVtcdTAwMTBsM9TneFx1MDAwNkZaRjEulGBI31Xc58S4XHUwMDEyozJcdTAwMWFDRFFLXGZqST+j6iHo3ybur1e9a8tKvyP5v17MprDWXHUwMDA0MK5cdTAwMDHTXHUwMDExzm9f+pvsZc9cdTAwMGbal2z0+ld/koSy/3t+ONqGarZcdTAwMDRBMPGilCotjNU3TVx1MDAwMGhGXHUwMDAwLVx1MDAwM+rGXHUwMDE41MD9mFx1MDAwMFx0RFx1MDAxOaHR1GBcblx1MDAwMoLSXHUwMDE1Jlx1MDAwMDTBjIxxy9BcdTAwMWZQTEaW3T+KJzFUvFx1MDAxZlx1MDAxM/AjVbO/XHUwMDBlbFH7J9dcIrCl0a66e4eSVitqXHUwMDA3Z52heFx1MDAxN1282IMo90R61NtcdTAwMDZgI3tcdIbwXHUwMDE4NqBr01xcwEJFS2LkITHkQP2AXHUwMDE0XHUwMDE4aXxcdTAwMTe01/6fRkuChyjFKEeSKbqipFxyklx1MDAxOOaq6lJcdTAwMGLMsY2QS9DWXFy5cuT9RLb/XHS0d2Zeoeml6VGBW85Fw1dcdTAwMGL9o/Cv4MY2zcswXHUwMDE47628edeaOzP5XHUwMDFkXCKD8j2/7Hz5XHUwMDFi3mXZrCJ9 + + + + + diff --git a/docs/blog/posts/release1.0.0.md b/docs/blog/posts/release1.0.0.md index 2005f6cb1b..b5d1df6f15 100644 --- a/docs/blog/posts/release1.0.0.md +++ b/docs/blog/posts/release1.0.0.md @@ -1,9 +1,17 @@ --- draft: true -date: 2024- +date: 2024-12-05 categories: - Release title: "There can be only one (point zero)" authors: - willmcgugan --- + +Version 1.0 announcements often come with a happy hour and merch. +Well we haven't got any merch. + + +
+--8<-- "docs/blog/images/compositor/cuts1.excalidraw.svg" +
From d506af3a62c428fcf03cab2c4c3a388f218a7b4b Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Fri, 6 Dec 2024 09:10:21 +0000 Subject: [PATCH 04/17] words and images --- .../images/compositor/cuts0.excalidraw.svg | 21 ++++ .../images/compositor/cuts1.excalidraw.svg | 6 +- .../images/compositor/cuts2.excalidraw.svg | 6 +- .../images/compositor/cuts3.excalidraw.svg | 6 +- .../images/compositor/cuts4.excalidraw.svg | 21 ++++ .../images/compositor/widgets.excalidraw.svg | 21 ++++ docs/blog/posts/release1.0.0.md | 110 ++++++++++++++++++ docs/custom_theme/main.html | 2 + docs/stylesheets/custom.css | 1 + 9 files changed, 185 insertions(+), 9 deletions(-) create mode 100644 docs/blog/images/compositor/cuts0.excalidraw.svg create mode 100644 docs/blog/images/compositor/cuts4.excalidraw.svg create mode 100644 docs/blog/images/compositor/widgets.excalidraw.svg diff --git a/docs/blog/images/compositor/cuts0.excalidraw.svg b/docs/blog/images/compositor/cuts0.excalidraw.svg new file mode 100644 index 0000000000..bd458a4bf3 --- /dev/null +++ b/docs/blog/images/compositor/cuts0.excalidraw.svg @@ -0,0 +1,21 @@ + + + eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nM2U22rbQFx1MDAxMIbv/Vx1MDAxNEa9bZQ9XHUwMDFmXHUwMDAypZA0hLTBXHI4pTilXHUwMDE0WVpZQrKkSms7aci7d6Q4XsWtQ1posS5cdTAwMTZ2Znfmn9lPczdcdTAwMThcdTAwMGU9e1tcdTAwMTnvaOiZmzDI06hcdTAwMGVW3uvWvjR1k5ZcdTAwMDW4SLdvykVcdTAwMWR2J1x1MDAxM2ur5ujwcFx1MDAxZdSZsVVcdTAwMWWExl+mzVwiyFx1MDAxYruI0tJcdTAwMGbL+WFqzbx5266jYG7eVOU8srXvklx1MDAxY5gotWX9kMvkZm5cbttA9C+wXHUwMDFmXHUwMDBl77q1p642oVxyilluulx1MDAwYp3LXHTUets4KotOq4KPY6Tp5kDavINs1kTgjUGxcZ7W5H2Y1MnFdzxNwtPl9XjUyNE0XHUwMDFiuaRxmudje5t3oppcdTAwMTJqcb7G1mVmPqeRTVx1MDAxZbvWs++6VZeLWVKYpi1cdTAwMWVvrGVcdTAwMTWEqb1tbVxibaxcdTAwMGZcdTAwMWQ4XHUwMDFhOstccuxcdTAwMGVcdTAwMDT1OeKcUKGwYEhcdTAwMTC+8bdcdTAwMTEolz5WmnGmpaBcdTAwMTRJviXtpMzhJUDaK6wlXHUwMDBliVx1MDAxMzdccsJsXHUwMDA2XG6LyJ1cdHik4tidWa1cdTAwMGJcdTAwMTaI+lxiY8QkXHUwMDE1lCjsXHUwMDFhkJh0lti2J8pXjDGCqVx1MDAxMlx1MDAxMqu+XHUwMDEw072IpFxuMyWE3Dja7NV51KHx1T1DXHJQnbc3ikWe93tZROtePlwi5CCia8u9K689f9qDz2VYVFHwQFx0lpQyLFxiVko6jvK0yLbT52WYObBcdTAwMDa9XFx/xjMnZFx1MDAxN9BcdTAwMWEhXHQ4I/xioC+zM/w+mVxcXHUwMDEwXHUwMDFkf7sqP02v8/LjeN+BJj5RQkO/XHUwMDExXHUwMDEzfUza+0Qz4ExcdTAwMTNcIjXhwPRumkmsXHJjz9M8JTGZTn+lmXLkKy4lZtBvIVXvn3I4XHUwMDBin1x0LFx1MDAxMFxmmVx1MDAwZWe2jTOmXHUwMDE4PEyjveSZw9/2X3iGXHUwMDE3l7uAplx1MDAxMlx0xEHNy4E+WY1XJrnKJseJvsTV5KxcdTAwMTlcdTAwMWTsN9BcdTAwMThrXHUwMDFmXHUwMDAxXGJcbmhVhCqknlx1MDAxMk1hgFMmqMZCI457429cdTAwMWJpgyhA9TzScVx1MDAxY+pQ/yOkXHUwMDA1jG8msaD7SDTBfzGhYe2CekFVjS2E3EiD0tJonP4wT8J4y9Ssjn/b9/bzXHUwMDA2a/0tiaar835w/1x1MDAxM/xcdTAwMThbnyJ9 + + + + + diff --git a/docs/blog/images/compositor/cuts1.excalidraw.svg b/docs/blog/images/compositor/cuts1.excalidraw.svg index 453b15d112..7e79fb4040 100644 --- a/docs/blog/images/compositor/cuts1.excalidraw.svg +++ b/docs/blog/images/compositor/cuts1.excalidraw.svg @@ -1,6 +1,6 @@ - + - eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1ZbVPbRlx1MDAxMP7Or/C4X8Nx7y+Z6XRi51xyXGIhgZaUdjJcdTAwMTkhnW1cdTAwMTVZUqRzgGTy37tnjE/Y1oRMcKduObCw7nVv93lud48vW51O112Vtvu407WXcZSlSVx1MDAxNV10XHUwMDFm+fpPtqrTXCKHJjp9r4tJXHUwMDE1T3uOnCvrxzs746g6t67MotiiT2k9ibLaTZK0QHEx3kmdXHUwMDFk17/45+tobH8ui3HiKlx1MDAxNFx1MDAxNtm2SeqK6notm9mxzV1ccrP/XHTvnc6X6bMhXWVjXHUwMDE35cPMTlx1MDAwN0ybgoCGL1a+LvKprMJgypk2Yt4hrZ/Cas4m0DpcdTAwMDCJbWjxVd3d33nBaVx1MDAxNmenZy97u5fGXHUwMDE1ly8mYdFBmmXH7iqbXG5cdTAwMTVXRV1vj1wiXHUwMDE3j0KP2lXFuX2XJm50o7tG/XxsXYBcdTAwMWXCqKqYXGZHua29XG7IvLYoozh1V75cdTAwMGXjee21XHUwMDFlXHUwMDFld0LNpV+JMUSxXHUwMDEwRHNKXHQnjT37XHRcdTAwMTgzSFx1MDAxYUmFpkzChy1cYtYvMrBcdTAwMDZcYvZcdTAwMTOx/ieIdlx1MDAxNsXnQ5AvT0KfSCR6MFxifS5m25WYIUxcYuaKSUY1XHTbXHUwMDFm2XQ4cl5OjTTnnFx1MDAxMqalXCJaXHUwMDA1MWs7tYpmXHUwMDE0+6FBXHJ+9XI3mcLjfTBFXHUwMDA1wNr1I/JJljU1mSczTd7AKFx1MDAwMInNar6G7fn+z1x1MDAxYVx1MDAwMFxmK0zKJLpGXG5RjHHCXGJTUlx1MDAwNrVnaX6+uHxWxOdcdTAwMDFcXFuNtb5cdTAwMGbTYMc2UFx1MDAxM64oXHUwMDEz3tR3RnXfkPrDuLdXSZdcdTAwMWIzJIPDYSk2XHUwMDAz1Vx1MDAxY3HKseDKXHUwMDE4bFx1MDAwNFa3UE2VRFx1MDAxZS9cZlx1MDAxYkA8Jlxc/Fx1MDAxMKzP6ICenS3DXHUwMDFhtI20UFxuNI+NVJqKXHUwMDE1uJaIS1wisdbXuOaLuDZGcaNcdTAwMDQ1/2tcXIPJSSuwXHUwMDE5xphcdTAwMTmq1Z2BfWCO8OFcdTAwMDHvu/Spev382cT0XHUwMDE4O91cdTAwMDRgc1wikMKYY4ol9Vx1MDAwZnlcdTAwMWLYRFwiQlxy41x1MDAxYYzjy1x1MDAwZuF6MIhNbNaEay0pIVLJ//x5XHLDV0Jatp/Uhlx1MDAxManh9+6Afnfx5PTV4E2cbItfSX2Svz3+oLM1XHUwMDAwOonqkb3no1ogiDwgtuCwYUPZLUBcdTAwMTNNXHUwMDEwaEJiwTQ4d8xcdTAwMTclu59cdTAwMDBcdTAwMDQjRjlcdTAwMTBcdTAwMDczXCIwpWJcdTAwMTWiidZcYsJcdTAwMGZMjYAwhJuG/WaQ5tRQic16Qlx1MDAxMPrPQrqh5qhyvTRP0ny4OMTmSUtLXHUwMDE21a5fjMepXHUwMDAzMd5cdTAwMTRp7lx1MDAxNntM531SVcXFyEZLuoCZW9tKP11cYvp9XHTfOlx1MDAwMV7Tl/n3949W9t5uN70vy0ZcdTAwMGZcdTAwMTNuNf9+L/uJUIu1c/orw8BY+DvoPz5cdTAwMWT091x1MDAwZvDV3kn8fPdtdDWQw6zeXGL6e4dcdTAwMDbcJ5BeXHUwMDEwXHT0XHR+4ob+RFx1MDAxOC2l4lxmjPODgVpcdTAwMWL9QVx1MDAwNK9yqZThwGC+XCL/8EDAXFwo7ONFjWUjorxhP4wn0Fx1MDAxZVx1MDAxYVx1MDAxZdj/b2d/q+F9WTb5fXGftMayXFwpOI6UXGLR/jdvXHUwMDFlXlx1MDAxZOz3jv7YO3z54lxiy9P9XHUwMDBik1/ub1x1MDAwNPUhgkRYwVx1MDAwMYBcdTAwMDVVcMbevnmAU1x1MDAxMIxcdTAwMDMpK6RoXHUwMDEwIyihXHUwMDE3JLunq1x1MDAwNyThkIFcdTAwMDRcdTAwMTFSLIimdYinXHUwMDFi1DdIXG6hqJdUQzLZiKqvqVx1MDAwZlx1MDAwMYryh9h6gtlcdTAwMDfur4X7rZb3Zdnm98T9hlx1MDAwN1t0+/6CRshGXHUwMDAw/C3qv1x1MDAxOFx1MDAxZMX79O1vx9t/XHUwMDFk9k9Ke4I/XHUwMDFmPN1cYuorybzXp1x1MDAwNlJVXHUwMDA2j8Dta69cdTAwMGYpgTSKXHUwMDAxqVxig4hsPUG/QlJcdIaZkVx1MDAxMHhQLlZSXyBMIVx1MDAxN2NwXHUwMDAyQVxmaEKfXHUwMDE59YUhTFNqXHUwMDFlvP7mML/V8L4sm/yemC9a/91cdTAwMDBcYlx1MDAxMtLf2dzd65fxszdcdTAwMWbL40HvhFxcpXt0spf3zXAjqK9cdTAwMTlDmGHv74VcdTAwMDDHeftcdTAwMDKLaI4gXHUwMDBigGRcdTAwMGLAXHUwMDBiXHUwMDA3XHUwMDA0X4/XZ4j6XHUwMDBiLC1cdOOSXHUwMDEz0rieanBcdTAwMWbOKEhKhNRcblx1MDAwMkTevHqYuX1cdTAwMDXOXHUwMDAzM6rXcjf7QP61kL/d9L4sXHUwMDFivY39W7NcdTAwMTW6UVlcdTAwMWU7UP7ciFx1MDAwMII0OU4/21v76H5K7UVv5S2rL92tmaU9d+1cdTAwMTRcdTAwMTFft77+XHJcdD1cIqsifQ== + eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1bbVPbuFx1MDAxNv7eX8Fwv1x1MDAxNlU6ej2dubPDS1teXG5toaXL3tnpXHUwMDE4x0m8OHFInEJ2p/99j1xmxE5cdTAwMWOHUNLddC5mSoMkW7J0nuc850j569na2no26kXrL9fWo+swSOJGP7haf+7Lv0b9QZx2qVxu8r9cdTAwMDfpsFx1MDAxZuYt21nWXHUwMDFivHzxolx1MDAxM/QvoqyXXHUwMDA0YcS+xoNhkFxmsmEjTlmYdl7EWdRcdTAwMTn84n9cdTAwMWZcdTAwMDWd6L+9tNPI+qzoZCNqxFnav+krSqJO1M1cdTAwMDb09P/R32trf+W/S6PrR2FcdTAwMTZ0W0mU35BXXHUwMDE1XHUwMDAzRJwuPEq7+VhcdTAwMTFcdTAwMTBcdTAwMTRqXTSIXHUwMDA3O9RbXHUwMDE2Nai2SSOOilx1MDAxYV+0vverSlx1MDAxNSRhcna+u7V3jVl6/WZYdNqMk+QkXHUwMDFiJfmgXHUwMDA2Kb1LUTfI+ulF9DluZO27WSuV193VT4etdjdcdTAwMWH4l1x1MDAxN+PStFx1MDAxN4RxNvJlnI9Lb2bg5VpRcu17ksBcdTAwMWOiXHUwMDE2zlx1MDAxOFx1MDAwM1x1MDAwZbRcdTAwMWRX+1x1MDAwN0jFXHUwMDE5apRcdTAwMDKt4WC4m1x1MDAxYdh2mtA60MD+Qy1EXGLF0M6D8KJF4+s2ijaBbrhms2hzdfu6hkvGheDKSiPBieL121Hcamd+nI45pVx1MDAxNFxi6YxcdTAwMTXO6mIgUb5cdTAwMWVOXHUwMDAy97dcdTAwMTbT4Hvv7TVyw/i9WIQ+mdSev6M7TJLyTHZcdTAwMWK3M3lnQIVcdMnbkm/F6/n2r0qmV/Qw7DWCXHUwMDFiXHUwMDFiXHUwMDExVkoljOBSazmuT+LuxXT3SVx1MDAxYV5cdTAwMTRm9azU18OsWYOsM2daQKuF5XJhc95GMfjS2drvm6yL2Fx1MDAxMs13rZ5edXNWTFxiobWyiFx1MDAxYzWfNGewjvlSXHUwMDAyttFSOtS19lxmTYyUmm/P59CE8/OqPUvNmdPWXG5lOVx1MDAxYUuommHQhikjXGJR7sag1bRBI1qFVlx1MDAwM66eQXN0RvN/xKBcdTAwMDVcdTAwMTe8zqKFXHUwMDA1WmblxMJcdTAwMTZ9iMf83aHazuJcdTAwMWR79PrVXHUwMDEwt6Q8W22LVkIz64RcdTAwMDNAw5V2wkxatLDMKCO9JVx1MDAxOWvnXHUwMDEwdMSlkGK+QTebIYb4g1xm2lx1MDAxOVx1MDAxMMJY828x9Pie4u6xYTT7PMGvm59Oslf7Ubuxh1x1MDAwN4q3x/MwYa5Bv59erY9rvj2f99xPR1x1MDAxZi+zPdg1rfTqU/ssSr9cdTAwMGV2rpbw3Ojyml9cdTAwMWMkl+9cdTAwMWJvt1xc/OZog++efF7subefauFNpiQtudplwZtur0F2ratcdTAwMTLaolx1MDAwM6lLXv4+ZH++2jx723xcdTAwMWY2NvRHMTjtfjj54pJcdTAwMWFkh/10MNhoXHUwMDA3Wdh+ML5cdTAwMWLBoFx1MDAxZD1cdTAwMDDg+n6PpZlcdTAwMDFcdTAwMDChOEqLJf99XHUwMDAzb2BWXHUwMDEyrlx1MDAxMIVSzppaeIvI/3yf/uJMca1cdTAwMDUqXHUwMDAxkiBcZnZcdTAwMDa8hUZcdTAwMDZcdTAwMWOpXHUwMDA1yWKh0LhpfCuqINfwY1x1MDAxNFx1MDAxODzCYXlypJd7iFx1MDAwMitNc9DPtuJuI+62pm+Juo2amiRcdTAwMThk22mnXHUwMDEzZzSM92nczaZb5M/d9NBsR0FlLujJtXU9/7hJQis+rVx1MDAxNdaV/zH+/Pvzma036pfeX9VFL1x1MDAxZfis/P9DwVx1MDAwZiVcdTAwMGYyXHUwMDA1fkP+hX7E4l69c9bcPjjko/3T8PXeh2DUNK1ksFx1MDAwMtg3i/h25Fx1MDAwMpSjqSfwXHUwMDE0nDvGvlx1MDAxNTRV0mlHMcSc4OtcdTAwMTHgl0xzJbWiXHUwMDBlwGlSd1x1MDAwNceUwO9cdTAwMTjB24Ex2tI/VXHuipaNglx1MDAwYlHo7ZVcdTAwMDG/RlVW0U/gv7vqV95f1TVfXHUwMDE29rmaLlx1MDAxZDt+XCIjXG55eClcdTAwMGJxb87l7eHB1vFv++9231x1MDAxY3NzdnCF3euDXHUwMDE1XHUwMDAw/72OXztgKGnqtVx1MDAwNiskL1xi8Vx1MDAwZfzOXHUwMDEy9LWSQNGWmlx1MDAxYddysC+YVZqEXHUwMDE4clx1MDAwZdxcdTAwMThXYqBcdOyD8S2s1lx1MDAxNDGXZNst9oWnbCAvu4KeX6NwqpjaJ/DfXfVLn9dWXHUwMDE2fUngL1x1MDAwN7zT4Fx1MDAxN5KiS1q3xcH/pn1cdTAwMWNcdTAwMWXAh08nXHUwMDFif7zbPu1Fp/zPw51cdTAwMTVcdTAwMDD/vZ7fXHUwMDFhxSTF85yEjkOUhWu/XHUwMDAxv2SSS6/GyHxccpdyamDLQb9lQjqSftRcdFx1MDAwMihd4/iJoNBpITgpXHUwMDExU8m70s3SJydW0fE7fz1hv9K6duH9VV3yJUFcdTAwMWZhuvBcdTAwMGX55OOMpNhxccnfXHUwMDBiX72/7J00t07FKN6H4X53XHUwMDFiWytcdTAwMDD8e72+k8C0sUhkJ4xzejrcl8xIn/P0wZZB/FGS3/r8uKUlJicgjZ3p9i3jRvnUozXWKlWao1u3b7m1nNTJXHUwMDBmyVA/1u074E9uv9q6fun9VV30XHUwMDA3Yj+LrrPZ8X695ke/daekWnxjqm03r/de7+idX6Oj07ew21afLjf/zTS+u1fsK0OcS0JecVDIJ1x1MDAwM32adK21JD62nPCk6zelXHUwMDFlXHUwMDAzelx1MDAxYYFE9NslwIWwokBtkcKveHehKECkseklSPuJilx1MDAwN2XnR6/b28nx7ntcdDvhxbvkS/L2/Pp4XHRZ9P+jrP/c51x1MDAxZVxueaG/jOSrXWnORol488cwPVvsuXesUEvFYEC7kmd/XHUwMDAwXHUwMDE1N9Nudlx1MDAxMv+Ze1x1MDAwMz5R+jroxMloXHUwMDAyjDnz+E3rYVbK/fnSzSRudXNhXHUwMDEyNSfJKYvDIFx1MDAxOVdnaa+oXHKpl4CETL9q02k/bsXdIPk4s0evfnbHTpSVIHVcdTAwMWVcZqJcXFx1MDAxYlG5m8uiN5M8g0ZlKTEyfVpFKlx1MDAwYpyExcIsOlx1MDAxZlUryaKSM+eT+SRZeTlcdTAwMTbxd1tgXHUwMDAy/I65Jr9G0lx1MDAxNqdGVdrl5C7k/PtYXHUwMDE0kDPynFaTvvCbmTMzJjRMq1BaqfxBg3JS9C5o8rs91pbU36oop1x1MDAxYrhC2Zy/UzmVXHUwMDA2dntEa29cdTAwMDHnnVx1MDAwMzxcdTAwMWP6UXJmjEapkXOabikslFx1MDAxYbWCXi5SmZfRXG6VUVKSX61uXHUwMDAz/2OabVx1MDAxYbXL3aeptzt/VS3ugbqtlnFUKVx1MDAwNJlcdTAwMTZuPFx1MDAxN1x1MDAwN1xii+dr5jvc1aRcdTAwMWOKhlx1MDAwNelcdTAwMWaCXHUwMDA1RctTpy+cZUhY9nqZqFnMydM8hnOE31xi8mdcdTAwMTE5N9xcdTAwMDHYopuCc4RjaIHWQ3ArXGJcclUpp1x1MDAwMZX1XHUwMDE5pSfSmUc6iktrjWdcdTAwMTOHpX2jMecgI1xmUlx1MDAwNGWJkZQyYOZTTt2I5lx1MDAxZkUqjWhDMJ+GJelOc4X+8JqqjElcdTAwMTD8KcRy1MxwMlbpKoP6qdiu3uL9VbX1ZbGdVrX6iuzUaiVw8dPA86OAlSQ7o1x1MDAxOfpTKN6ZSlx1MDAwNUXHo1xcYTJtXHUwMDE1aGJ9KcnEflx1MDAxMNlcdTAwMTnGQShcblx1MDAxOZSk1ZczuY4zrp225PhcdTAwMDVcYo5cdTAwMTV9JYw01MqWdn6euG7cuuA6sFx1MDAxY1xiSYp4Q0ooXHUwMDBlXHUwMDE4XHUwMDE0xELkI5zT6G5cdTAwMGVm2yqxLJntaGnJTzmtXGaSXHR4pjXVUSlcdTAwMWGVVKRcdFxyeLljdWVUP1x1MDAxM93VmnxeWTH2pUk7V3tcdTAwMDZHXHSafkL54ufv5qcmVpLsXHUwMDEwSLyRXHL5XHUwMDFkdrL9yZxcdTAwMWNVXHUwMDFhmlx1MDAwMnRKXHUwMDExXFwnQrilkp1i6PxhJ1pYlKIkpUtsXHUwMDA3PidLhIaC3Lsr6bc7tnOK7vRH3p/Ybi7bSVC0kv77XHUwMDAxnNQ6n6mjXHUwMDA0XHUwMDAwaSwtuaGASlVffrl0R/RKXHUwMDFhUzpcdTAwMTKbhlx1MDAxNtDNXCI7MlOKPrQmxeNccrGqN38urquz+Ly2YuvLXCK78i5V5bQxwZ+kglt8XHUwMDAzYn7CdFx1MDAxNdnOcGBOOlxyfrvFuSm2s/5LYIIsjHyqXHUwMDAyYepPXHUwMDFiPSp3XHUwMDA2moFcIt/CzawvXHUwMDEwXGKJjDtygU5L47jGykEj8CdRXHK4p1xidlx1MDAwZc9t5Hkz7ZNcdTAwMTaagkXJVTWGJZ6TRIE8t1x1MDAwNf9tjXtk3U+bN5tpcv6qXHUwMDFhW1x1MDAxZNM8u334etDrnWS06uNFXCLri1x1MDAxYrdcdTAwMWJcdTAwMTTFXHUwMDFirn+No6utmV+u8ZffO8ln2bNElJvit2ff/lx1MDAwNmN8If8ifQ== - + Cuts diff --git a/docs/blog/images/compositor/cuts2.excalidraw.svg b/docs/blog/images/compositor/cuts2.excalidraw.svg index 55dc4feb13..c79145c7dd 100644 --- a/docs/blog/images/compositor/cuts2.excalidraw.svg +++ b/docs/blog/images/compositor/cuts2.excalidraw.svg @@ -1,6 +1,6 @@ - + - eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1aa1PbyFx1MDAxMv3Or6C4X5fJdM+rJ1W3bi2EJCxcdTAwMWJvQlx1MDAxZSR7a4tcdTAwMTKSbOv6IUeScWAr/317XHUwMDFjQMK2slDArThcdTAwMWJRZeyZkdTqPqdfoz83Nje3qrNJuvV4cyv9XHUwMDE0R8MsKaLZ1k9h/DQtyixcdTAwMWbzXHUwMDE0zn+X+bSI5yv7VTUpXHUwMDFmP3o0iopBWk2GUZyK06ycRsOymiZZLuJ89Cir0lH5n/DZiUbpvyf5KKlcblHfZDtNsiovvtwrXHUwMDFkpqN0XFyVfPX/8u/NzT/nn1xy6Yo0rqJxb5jOT5hP1Vx1MDAwMlpjXHUwMDE3Rzv5eC6skVIqXHUwMDAwvJrPyid8typNeLLLXHUwMDEyp/VMXHUwMDE42rLl09Hz6dGz92/Oj2LZl9s7g3Fe37SbXHKHr6uz4VxcqLjIy3K7XHUwMDFmVXG/XlFWRT5Ij7Kk6l/qrjF+dW6Zs1x1MDAxZeqzinza64/TMqhcdTAwMDCuRvNJXHUwMDE0Z9VZXHUwMDE4k/Jq9ItcdTAwMWVcdTAwMWVv1iOf+JdCJYw2JDU5Y1xi6Wo2nK+sXHUwMDEyYKy35Fx1MDAxMVx1MDAxZGpYkGs3XHUwMDFmsjFYrn9BXHUwMDFh/mrJTqJ40GPxxkm95lx1MDAwNLt4clKvmV08LZBcdTAwMTSS0HtcdTAwMDTg7866qyX9NOv1q6BcdTAwMTErXHUwMDE0abKkPVx1MDAxYatQ6lqUdG5cdTAwMTZcdTAwMDDjXHUwMDFkWNmwalx1MDAxMGCyn8xcdTAwMDHyR22MgqG1XHUwMDFmTlx1MDAxOU+Hw6Yux8mFLi+BVENJXYx8rp8wrN9rQLC+w3SSRF+wXHUwMDAyTilccopFk75W7TBcdTAwMWJcdTAwMGZcdTAwMTZvP8zjQVxyr43GvW6HalZcdTAwMDO0wVx1MDAxYUBcdTAwMTnSUstcdTAwMWLjuvvmyctcdTAwMDSt2fv97NS8lb3emzj6tFx1MDAwZbg2UjNgpFx1MDAwNOuVVlx1MDAwZfR1XFyDXHUwMDEyTHBiRGuQXps74brbjX3sV+DagiBHTpLSJFx1MDAxNbNoJa5cdTAwMWR4gyDJM05cYtxcIq6RXHTB7LCavndcXPPpqyFtTSuiJZBi9dGNXHUwMDExrV79/tur44P+ce9cdTAwMTdNv8bJy9nz97NcdTAwMDdAdFx1MDAxMpX99J5dNUNaK+NcdTAwMTQ7bGRsX8c0Wlx1MDAxMoxmo5Vid63R2zuBOjJcdHW7y6CWguVcdTAwMDD0TFx1MDAxZiNcdTAwMTFccpplUFx1MDAwM5FAUFx1MDAxMr3RXGK6XHT8S1CzhDrMPFx1MDAwNKbx/4vphpqjotrJxkk27i2eko6TlplhVFa7+WiUVSzGyzxcdTAwMWJXiyvm1/25KPJZP42WdMFXbp2bhMvV+VE46m+bNb7mP66+//HTytXb7aZcdTAwMGbHstHrXHUwMDBibjT/35b+aPTi6CX9PSdcdTAwMDJcdTAwMDBa3TxRe2dfXHUwMDE2oydD8zzNXne1tJOz88nZWtA/RDQmXHI5XHUwMDE1Qlx1MDAxYSyS31x0zfmR1JylcS53t0StjftGkFfWWufYv1ip66e/Rn2pjZPg2TVLK5fimZLGkSH4Qf31oX6r4cOxbPL7XCK+pMXRS+JrZ9FZ31xigX9H/FdcdTAwMWar3k482teHKtuPaLei/v/erVx1MDAwNfFZ74JTRC9ZtcrC9VxuXHJ5XHUwMDEyXHUwMDExwTnlOX2UqFx1MDAxZYT5VvCN2es7Z1BaSzV5XHUwMDFizPfCXHUwMDFh45CXXHUwMDE58kY2JLmo0DRcdTAwMTFcdTAwMTeSgPXz/aD+t079VsuHY9nm90R9aMSWXHUwMDA16pPk+7C3uTn1+4OoKlx1MDAwNmXvw3QmP9LJuyfq11l/LahPXHUwMDA2OeZz5Ge3XHUwMDFionqda8+570BcdTAwMTivrTPMe2D7PFxi9Z3gXHUwMDFiqFC+Wo+ozUrqXHUwMDFiIbn+XHUwMDAwxdVcdOd/zdLjgvpGe0+cqtVW+0H9b536rZZcdTAwMGbHss3vi/rt/SuN2irwrobX31G/92Zgt19F2XvwXHUwMDA3p8mzXHUwMDE3u/uHnVx1MDAwZmtBfda4YFVcdTAwMTAnVFxurGm0Xi+pj1x1MDAwNkJbiV2hMfAwYV9cdCTjXHUwMDFjWVDaalx1MDAwMFfTt0F+JXiBNZZcdTAwMWMniLrhuS8zfqdcdTAwMWM59yPhX1x1MDAxZuq3XHUwMDFiPlx1MDAxY8smvyX3v74v08hcdTAwMWNcdTAwMTfbfaHCXHUwMDA1MPbmXHUwMDFk7P7xMP3FpHTgR/RsNHL+507neFx1MDAxZDrYYWfGWzTMXHUwMDFksM42NkXO5q7QXHUwMDBiZZTWXFxKy9A41lx1MDAwYoLdj1x1MDAwM1xilvbKaVLshsg3m9B1XHUwMDBim+NcdTAwMDRJx1x1MDAxOVwiIPui5ibRRfAntMDVXHUwMDFhPUjw/5Y62F/FNdOpXHLXKNnErGd78z6239OdKMZx/vT8fG8w3ZVcdTAwMThlb9dcdTAwMDHXXHUwMDA2nDDoXHUwMDEwKXSpaVx01cHfXHUwMDE4Iz2XsrLZPbpPVFx1MDAxYlx1MDAxMKRCXHUwMDFincMnMnlW9LCRhGLqSU5wOONorLhcdTAwMDQ1UsC6b2xcdTAwMTL/I0HtWzfRIeQlXFyr6ZuD+sOLNJFcdTAwMDdkO0fdJJ3tRCe9/tNqXHUwMDFkQM15sCBcZnp3jlx1MDAxZLcxXHUwMDBisGbIc6UmtfLg6GFyNba9XHUwMDAw9tFcdTAwMWWd0WiNW1GoMai5elacRkvDKbvTSz1cdTAwMWEu81x1MDAxZFx1MDAwN+CHqdPWXHUwMDA21V6176EzqJG8lDdPQZSbdHd2T4rT7tuyL5POcXEwOF9cdTAwMDdUk1xyWzpcdTAwMWPWyTCs/DKoUTOcODdB5Ztb7Pe654CcXWgmXHIzi4vQ5q5nM1x1MDAwM2FcdTAwMGZcckwuXGaZiILl/kPYl/Lk/uG4Jmhtq2lcdTAwMWL2ZM0t2mrT3ThK3qfjXHUwMDBldd3hx1x1MDAxOVRH+unzdYA1XHUwMDEzOHTVPFx1MDAxN9fz1sbCuyFWXHTtXHUwMDE16eDO2VWqu+G69aUno0ONZbXkxNhxmdWSg3Dc8E5cdTAwMDaYkF/OrK1V3lui7/7dkK+/86Sca8M1cjyUUt3iXHKRXHUwMDE3XHUwMDAzPPxAh/v7crS381vPvtv7hGZcdTAwMWRwzVWiXGKu0liGTFx1MDAwMMx1XFyDXHUwMDEyYdOMXHUwMDAxXHUwMDBmVnvr71x1MDAwNOvWd56cXHUwMDExXHUwMDFl0VqQyoZcdTAwMWSrVbA2goBBz6FDh1x1MDAxNpdeTq69lVx1MDAwZXnF95NcXG9cXPRatqLJ5HXFl7xcdTAwMTKNXHUwMDFmLUteZ+fptctsnWYhXHUwMDAzXqX5cGxtXFzIXHUwMDFm8JjOn/Pzxue/XHUwMDAwKDubXHIifQ== + eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nOWYa2/bNlx1MDAxNIa/51dcdTAwMDTe11Xl/VJgXHUwMDE4mtRps6Ju0SRLu2EoZImyNcuSJ8m5XHUwMDE1/e976SSW7NiZs15mrFx0YMQkXHUwMDE1UofPeflcdTAwMWV+3Nnd7dSXXHUwMDEz13my23FcdTAwMTdRmKVxXHUwMDE5nnd+9O1nrqzSXCJHXHUwMDE3m32vimlcdTAwMTnNRlx1MDAwZet6Uj15/HhcdTAwMWOWI1dPsjBywVlaTcOsqqdxWlx1MDAwNFExfpzWblxc/ew/e+HY/TQpxnFdXHUwMDA2zSSPXFyc1kV5PZfL3NjldYX//ju+7+5+nH22Vle6qFx1MDAwZfNB5mZcdTAwMGbMuppcdTAwMDUqxZZbe0U+Wyw1hGlLtFx1MDAxNPNcdTAwMTFp9Vxm89UuRneCNbumxzd1VHUwfjE9ff7u+Oo0XCJD8mhvlFx1MDAxN820SZplR/VlNltWVeBtmr6qLouRO03jenhcdTAwMWK3Vvu6p8piOlx1MDAxOOau8q9P563FJIzS+tK3XHUwMDExMm+9jsGT3ablXHUwMDAy3zjjgVx1MDAxNNJcdTAwMTBhtJSGmXmvf54rXHUwMDFlUKmsMpYxzVx1MDAwNF1a136RYSOwrlx1MDAxZlhinVx1MDAxMM3K+mE0XHUwMDFhYHl53Izps4T1+82Y85u3RaRcdTAwMDNimLWMUvytlZ5cdTAwMGZcdTAwMTm6dDCsfURUwI0wylxiy6TijDS7UrnZhlAqraaKSDXv8Vx1MDAwYphcdTAwMWPGMzj+aLahXHUwMDA0Vof+kXyaZe1Y5vFNLG8hajDiNy2fmjf047st/JpcdTAwMTmmkzi8poRqzlx1MDAwNWdUK6Ka0GZpPlqePiuiUVx1MDAwM9ZOa66HXHUwMDExjVxi0rVIUyZcdTAwMTghSm+OdHL87E3MlOz+dnkmT8hgcFx1MDAxY4VcdTAwMTfbjbSkLJCGU0EtYq+pWESa8oBLQYzVSlx1MDAxMSvkWqRcdTAwMWTBWHo/0klcdTAwMTLZyK5AWvJA+YTC9lx1MDAxYsJta/NcdTAwMWKkdUBcYvJKIP18crWXco00Qy4gMZQw24e0gCR8I6RcdTAwMTWTa4mWXHUwMDA0XHUwMDEyXHKkN1x1MDAwNnr4IXO/SGde2rF5Plx1MDAxZWv7tNf7sN1AI9hcdTAwMDFlklMjNTRQXG61QLSgMrBcdTAwMTQ5iv2gylxuLtZcIk2hkFx1MDAxMbtcdTAwMWbpUMYmSVapNFx1MDAwZizXwnCiuLFtKNtIK1xiONGaMk1k+7y4XHUwMDExadBcZjG0RmxcdTAwMWbR31CkTWvPl4n2soEgkY2Jtl3RXHUwMDBiI5ZcdTAwMTdcdTAwMDdXV93RdJ+wMD3ZbqIlXHUwMDA1KJZA/pSU1lx1MDAxYbNcdTAwMDS0XG5cYuM4qlx1MDAxOFx1MDAwM8+t3i/Ks6RcdTAwMDHkXHUwMDE55odwyXxyreDZXHUwMDA0nGtDXGZcdTAwMGVcdTAwMDKrzVx1MDAxZIGmzHjKkX3fN84tQ7GEsyRGUWNcdTAwMDXbXHUwMDE45/evXFxMXlx1MDAxYdU7TWJ3vlx1MDAxN/ZcdTAwMDfDg3q7cVZaQ4FhKuBeXHK3VC/hLHHQgyGiXHUwMDA01YZ/XHUwMDFkmjV8POXYdlx1MDAwZVx1MDAwMVx1MDAxMbp1XCK2aSZcdTAwMTReRGjBXHUwMDE0Tlx1MDAxMsuXedZaglx1MDAxYS6+b3W29zhoXHR/bSRcdTAwMTebXHUwMDFiXHUwMDBlrifJ3n6/PEtOqiGJe1x1MDAxZsqXo6vt5tkoXHUwMDE0ZMLCQzOugMyyPPNAQPlcdTAwMTSn2lqNw+qrXHUwMDEwLVx1MDAxObyEQL7ATcAkk1bF1/ZcdTAwMWJQZTBccvtcdTAwMDPfwalaJppygsJcdTAwMTJcdTAwMDL1fSNt2HrDXHUwMDAx0Vx1MDAxMKh0Nq9cdKf7UVx1MDAxOL9zec8k+u1f57Q+XHUwMDE1XHUwMDA3L7abaDBcdTAwMDJLIYjwzlVZtlRcdTAwMTMqVGuUglx1MDAxNCWtj8Z6XHUwMDA3/Vn3XHUwMDFjUlx1MDAwNMxIJVxiXGawRsTXOFx1MDAwZW+JNEGa4eC866CV4lx1MDAxNvWk2cKa8Ftec1x1MDAwMNl1RCuprZRcdTAwMGa4t3s1Ym/fm7eHh2Tc3Xs9UL92L5jcbqCVXHUwMDE2gVCGXHUwMDBiwvGuqnWU315yXHUwMDE4ITXUU2gu1T1cdTAwMTL9WbdcdTAwMWNcdTAwMWGVJzw6qlx1MDAxNZxcdTAwMTNEkVVAy8BQ4G6lhlx1MDAxMaLm7i1cdTAwMDe1imiGXHUwMDEx/3tcdTAwMTNdu4t6Jczry0FuiIIobc5y/Odw+Co6fVZcdTAwMWW92fuFy1p2909e/5cs23/UZqFcdTAwMDNcdTAwMDRcdTAwMWFcdTAwMTlcdTAwMGLnjFJhXHUwMDExZSZYXHUwMDAwXHUwMDE3wv19gsU5z/RalKnzv//SbYjAyy5XKFx1MDAwNVx1MDAwNdcrQb7jlpWhklvzXHUwMDA1uF3oeNA1nIWTJ1x1MDAwZlx1MDAwMLRZVZHXR+mV34+WOfCtXHUwMDA34TjNLlx1MDAxN7ZzRi7itz8sJlVnoflpllx1MDAwZTzEncwli3TXaVx1MDAxNGbz7rqYNL1cdTAwMTGmXHTT3JV3w1KU6SDNw+x49ZR4Q/fidk9o0NqVflg53+vbzXVcdTAwMWXic1x1MDAxNrtOOJlcdTAwMWPViNxcXFwisFVpfPP6zfSds9SXnKtcdTAwMTTQ/3R2bnLbp5Gb6c2nnU9/XHUwMDAzb4am9CJ9 - + Chops diff --git a/docs/blog/images/compositor/cuts3.excalidraw.svg b/docs/blog/images/compositor/cuts3.excalidraw.svg index af592290c1..67a75bad0e 100644 --- a/docs/blog/images/compositor/cuts3.excalidraw.svg +++ b/docs/blog/images/compositor/cuts3.excalidraw.svg @@ -1,6 +1,6 @@ - + - eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1ZW1PbRlx1MDAxNH7nV3jc13ize/aemU5cdTAwMDdCQtKkiVx1MDAwM6SQdDKMbMm2QJZUScZ2M/nvPSuMJXxJoDFt3GFcdTAwMTmMtdejPd93bnzeaTSaxTRccppPXHUwMDFhzWDS9aLQz7xx85Hrv1xmsjxMYlx1MDAxY4LyOU9GWbecOSiKNH/y+PHQyy6CXCKNvG5ALsN85EV5MfLDhHST4eOwXGKG+S/u8403XGZ+TpOhX2SkOqRcdTAwMTX4YZFkV2dcdTAwMDVRMFxm4lwix93/wOdG43P5WZMuXHUwMDBiuoVcdTAwMTf3o6BcXFBcdTAwMGVVXHUwMDAyaqFcdTAwMTZ73yRxKazUSlxisJTOJ4T5Plx1MDAxZVdcdTAwMDQ+jvZQ5KBcdTAwMWFxXc2DuNOe9M90cdrd7zNv1Dk7fndUndpcdTAwMGKj6KiYRqVU3SzJ89bAK7qDakZeZMlFcFx1MDAxMvrF4Pryav3ztXmCXHUwMDE3Ua3KklF/XHUwMDEwXHUwMDA3ubtcdTAwMDM2701Sr1x1MDAxYlx1MDAxNlPXV3uFq4t40qh6JvjUXHUwMDAySjiVXHUwMDFjOFx1MDAxNcYwYeejbj1QTZgxslx1MDAxY9XKUr0g2NMkQnWgYD+xwP1UonW87kVcdTAwMWbli/1qTlx1MDAwN3rQ6VRzxrPXZYZcdTAwMTJqwFpgXGa/a1VcdTAwMWQzXGLC/qBwoijCjTDKXGJcdTAwMGJScaCiXHUwMDEyJSj1wqxcdTAwMTVaXHUwMDE5KqpcdTAwMTEnQPrSLyHyqdJGhuB66ZbEoyiqX2bszy7zXHUwMDFhSlx1MDAxNZj4rOdL9YZu/rNcdTAwMWFcYqtcdTAwMTNGqe9dgYVpzlx1MDAwNePM4G8lV1x1MDAxNMZcdTAwMTeLx0dJ96LC107trLvhmoFg64CtmJKWgYRbXHUwMDAz+3h0MG1cdTAwMWI4378825uOo8nr89/az7ZcdTAwMDHYTFFcIsFcdTAwMTiDNLZWc3NcdTAwMDPYTGpCXHUwMDE159qA0ozbmi34J8Du9bq2a1dcdTAwMDBbMWK00dRwYSi3yqxcdTAwMDS2ZlZcdTAwMDKjxpZA0YvAlmClRfr973GNy1dCXHUwMDFhpFxch2i0UFLg7bLbQ7p/+vJ890+TXHUwMDE0om3Phj5LMzk5vFx1MDAwN0j7Xj5cYjZrrJklXHUwMDEyX1hcbq4tY7p2LeVcdTAwMDZcZlxi6oVaLaxAwFj+XaD2pG96vWVQo8NAXHUwMDEzg+6RM0lcdTAwMDGNiVxcXHUwMDA2NTpcclx1MDAwMoxTRK5cdTAwMDD0KjXgX1trSdFSa6XofaBcdTAwMWH+XVTX7tnLir0w9sO4v7gkiP01I5GXXHUwMDE3T5PhMCxQjHZcdTAwMTLGxeKMct/dLEvGg8Bbulx1MDAwYtx57VjqtqtiJNeqb41cbmDlw/z7p0crZ7fW6961Za1XXHUwMDFi7tT/3tVcdTAwMDDwmk9fMFx1MDAwMIxLriWGXHJcdTAwMTXCvmVcdTAwMDBe77amraeDPDzcff+ixZ6dXGZcdTAwMGWjk60wXHUwMDAwzp9Qy7WQLlx1MDAxOGOqdi1XXHUwMDA2gFx1MDAxMclcdTAwMTSXXHUwMDE4sqHX499cdTAwMTmurTNcdTAwMDCSXHUwMDE4y5VSWltcdTAwMDGKiupcdTAwMDJu8J+ilJShmIYquuTUXFxcdTAwMTSikGyy8rxcdTAwMGb8/9H5v1bzri3rfEPsXHUwMDA3a1x1MDAxNnuv2a+1kU6Y22dqr4CL6YEx48DrXHUwMDBmJ8/zND1cdTAwMGXfbFx1MDAwNfk5XHUwMDAwQUOoNYasXHUwMDE2gC46f0pcdTAwMDBNIVx1MDAxYWZmoVx1MDAxZeJvkvqKKCRcdTAwMDfGIFpcdTAwMDJVylTkrVHfXHUwMDEyJaVcdTAwMDacJo2VtFx1MDAxNoXMqM9cdTAwMDRXmtpcdTAwMDfqb1x1MDAxMfXXat61ZZ1vivpcdTAwMWNcdTAwMTZ7545foJnBw2yFom9x//3px1a3OIna7Jh1Tj9kQ3jxNttcbu5Lap3jt2VUhdlk7aWvyC+JXHUwMDAyXHUwMDA1roRi0DTUXHUwMDEwvEn2a6K05C6PVWhihFxcyX5JKChkXHUwMDExRzhg3lpLrGfs19o5XGItXHUwMDFlXHUwMDAy/+1h/1rNu7as802x/yuVLOCYhvBaTeRb5Fx1MDAxZl+0Pth4v3X2dvDxSOxOzuXe+ON2kF9cdTAwMWLCKeb9oKlcdTAwMDaplrlcdTAwMGZcdTAwMDZ1I4ThuFx1MDAxOVtcdTAwMTBsM9TneFx1MDAwNkZaRjEulGBI31Xc58S4XHUwMDEyozJcdTAwMWFDRFFLXGZqST+j6iHo3ybur1e9a8tKvyP5v17MprDWXHUwMDA0MK5cdTAwMDHTXHUwMDExzm9f+pvsZc9cdTAwMGbal2z0+ld/koSy/3t+ONqGarZcdTAwMDRBMPGilCotjNU3TVx1MDAwMGhGXHUwMDAwLVx1MDAwM+rGXHUwMDE41MD9mFx1MDAwMFx0RFx1MDAxOaHR1GBcblx1MDAwMoLSXHUwMDE1Jlx1MDAwMDTBjIxxy9BcdTAwMWZQTEaW3T+KJzFUvFx1MDAxZlx1MDAxM/AjVbO/XHUwMDBlbFH7J9dcIrCl0a66e4eSVitqXHUwMDA3Z52heFx1MDAxN1282IMo90R61NtcdTAwMDZgI3tcdIbwXHUwMDE4NqBr01xcwEJFS2LkITHkQP2AXHUwMDE0XHUwMDE4aXxcdTAwMTe01/6fRkuChyjFKEeSKbqipFxyklx1MDAxOOaq6lJcdTAwMGLMsY2QS9DWXFy5cuT9RLb/XHS0d2Zeoeml6VGBW85Fw1dcdTAwMGL9o/Cv4MY2zcswXHUwMDE47628edeaOzP5XHUwMDFkXCKD8j2/7Hz5XHUwMDFi3mXZrCJ9 + eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1cXGtz2khcdTAwMTb9nl/h8n5ccj19+91TtbVcdTAwMTXbYczkMUlcdTAwMWMnTramUjJcYqPwNMixk6n89z2NXHUwMDFkJFx1MDAxMMJgQ1x1MDAxNk9cclRho5alVvc9557b97b/erSzs5t+XHUwMDFkxLu/7uzGV/WokzSG0eXu43D8SzxcdTAwMWMl/Vx1MDAxZZrE+PuofzGsj89spelg9Osvv3SjYTtOXHUwMDA3nahcdTAwMWWzL8noXCLqjNKLRtJn9X73lySNu6P/hM+XUTf+96DfbaRDlt2kXHUwMDEyN5K0P7y+V9yJu3EvXHUwMDFk4er/xfednb/Gn7neXHLjelx1MDAxYfXOOvH4XHUwMDBmxk1ZXHUwMDA3jVGzR1/2e+POWi5cZrdKTNqT0Vx1MDAwMe6WxlxyNDbR4zhrXHSHdlx1MDAxYt5fnjbeP6ntn3Srr2qXXHKlv1x1MDAxZGQ3bSadzlH6tTPu1KiPZ8naRumw347fJ4209WPUcsfL/mrYvzhr9eJReHiaXHUwMDFj7Vx1MDAwZqJ6kn5ccsc4n1x1MDAxY71cdTAwMWWBX3eyI1f4VtGOXHUwMDExV4RH1cSdXHUwMDEx2WiML0CaXHRSiivppCBnZ3u23+9gXCLQs3+Jpo+Vyvp2XHUwMDFh1dtn6GCvkZ1zKpri9DQ75/Lmeclxxp3wXlx1MDAxMOF3a+zklFacnLXSMCaGSaecccpcdTAwMGJtpOBZT0fxeEqUXHUwMDE23JFwZtJcdTAwMTDuP6g1xrbxZzZcdTAwMGZDWFUt/EXvotPJXHUwMDBmZq9xM5g/bCizXCJ5c+R79oDh/Kez1pe3wJxp8Fem8TZcdTAwMWRdtPpv3lx1MDAxY5I6VtXj3sfJQEyZazRcdTAwMWP2L3cnLd9vfsv6fzFoRNdGSFZKJYXw2stsXjtJrz37cJ1+vZ3Z7aPck6xcdTAwMDZcdTAwMTdMjyjDi5COYCm58b9ccjD+pHL+9Ey8PTlMzj99/M1cdTAwMWaLXHUwMDBmzz9uN2BIcualXHUwMDE0XHUwMDEyoLBgXGI5XHJcdTAwMTijmVx1MDAwMmiEXHUwMDE2XHUwMDAwlPNUXG6XmEuStFx1MDAxOC7NZt3X/Vx1MDAxY7hoyYzV2mH2XHUwMDFkl964OXCxjHMvhFLaXHRcdTAwMWJ+zMKFtFx1MDAxNTAgodVcdTAwMTbipdo4OulcdTAwMGY+tujo69sv5+3PVddcdTAwMWb9ti68SM7pJ+HFXHUwMDE4X1x1MDAwNlx1MDAxN3KklTbWq6Xx0jn8POomn/aTs9rvXHUwMDE34urDiXxRK8NLfdhcdTAwMWaNKq0orbdWRk0jXHUwMDFhteI1+1x1MDAxOcu0gC06r1x1MDAxYzmp3Vx1MDAxNGzIOGYtOUVSSyvJluKGvKW6WIybSDdcXLM5z81IYNcqJ7mRzlx1MDAxYjVcdTAwMWY3XHUwMDA2XHUwMDFlXGLYJmG5VlSAXHInst7+/2CzyFx1MDAxMXBBOXPapGE7onLD5orrKWK5zbDjVrv6u+hH34bttj/8/KR/dWBGXHUwMDBmwrBJXHUwMDFhhseFgFwi4aXwVlx1MDAxNVxm2znoSFx1MDAxOD7ehtxmLFtcdTAwMTODN1x1MDAwMJ9wqYUkp+dYtmNSWlx1MDAwN4kkcStX8Fx1MDAwN5Z7z32ug9vjXHL4XHUwMDAxP0r4s3Zy/Pn923ftemOvqqO1eVx1MDAwM6hJ7n5cdTAwMGVobLk30Fx1MDAxZTNcdTAwMDPmWVx1MDAxZTT0vGmOa206ODNP7fGzoz96+29ePFxi0Fxib1x1MDAxOPSR8ko4skLYXHUwMDE5zFimtCdcdTAwMWPnoFx1MDAxMr9cdTAwMTnEWMk0QchcdTAwMDHAVivLzVxcxEAowE8gXGI0XHUwMDE2gYcsOFx1MDAwM2GgeIXbypij0W12Kud76ctLx183zz+6bq31cm0xh3JcYlxmf1xuaryTZahcdTAwMTFcdTAwMDZaweeDn9tA036epFxyxFx1MDAxYldu7+jL8e/fXr/dt1fbXHUwMDFkcihcdTAwMGLm9lxijiUoXHUwMDFhcYc1M3BBzIFIXHUwMDA03lx1MDAwNbZovNuMi9FcdTAwMDLCXGJdkZBGmH2ei7/z4lx0jlx1MDAwNZBcdTAwMDEuQGWSTFx1MDAwMTBcdTAwMDCbRXxk+Vx1MDAxNlx1MDAwMmbvlWup11x1MDAxZn47ODmo7lxy313uXHUwMDBmnlx1MDAxZV6uzc2Az9xPcjM5Qp1cdTAwMDFcZrBcdTAwMDInXHUwMDBma1lcdTAwMWEw56ed/cq3Wvz5ZPhsXGJ5xvfb1eGD8DLQOcxcdTAwMWGjINbB4cLQNGzIMKWCn5FSOlx1MDAwNOylqLnXypZWTDhccmRcdTAwMDKYlqQqXHUwMDExZlp7zFxuwlx1MDAxZppaNLhcdTAwMDGNVFx1MDAxZbAyW1x1MDAxOak/edlsvuw2o+rzKq9cdTAwMGbkc1x1MDAxZD85XHUwMDFirFxyNMpcdTAwMGL1c7xcZilZ6mak4NBcYpKWdzMno+qb4703sTx+Xa/pi6+v9p7V0+12M8JcdTAwMGJcdTAwMDZcdTAwMDWKUXfGec6FnMJcdTAwMGK8jOdBLoHYneZcdTAwMGK8zL2WtixuI4QxxKXh3PB5eNHoJ9DktVVcYnxcXHFpyyP+NMZtJV5O3nDVbtqjZ9XTs96AXHUwMDEyf1lcdTAwMWK9W9/Klsyr1HviJY2v0rn+xZRcdTAwMDGFNOJ+jo/lkVJLasPTJl0mzVx1MDAxN713nz7tX/whzv/YXHUwMDAy/+JvxVx1MDAwYlewQ+NcdTAwMTVcdTAwMDI3XHUwMDBmYUTTskxcdTAwMDb/XHUwMDAyMtdcdTAwMWFcZmasz2VWXG6yLFx1MDAwZe87yjLHXHUwMDE0xKFcInhcdTAwMTgxXHUwMDE3LFx1MDAwNW9cdTAwMTJyLPBItFx1MDAwNlx0NtWwXHUwMDEyXGaoeVlcdTAwMWao3udBP+k3TuX7yodPJ5XlYPB40XXvXHUwMDEx9Cy87j3c3MLrbnRpw+DD2Vx1MDAxNeggm/t+Lz1Kvo1jLD51tFx1MDAxYXWTztcp0Ix5XHUwMDAyXHUwMDFkPExcdTAwMWGNuLc7dfxJJzlcdTAwMGKcsduJm9Nkkib1qDNpTvvZaO7WcZ8o6cXDovX1h8lZ0os6b0vuiWeMXHUwMDBmf1x1MDAxOD+xnPmfRqM4tIbjbiHvXVx1MDAwZvRcXI1QmvzyVsNrks3c4q3LN1x1MDAwYlx1MDAxMbA+4ltRKCzBe8SgXHUwMDBlNIjNg+1cdTAwMGK0h0E3JMOCidRcdTAwMDJyopT2mtzVOb/j8o1cImZcdTAwMTBccjv0ZqzO5lCft1xmYlx1MDAwNarNhUSXUYWEMVx1MDAxOehcdTAwMGJroCU2oVx1MDAxM8TtOuE26K5cdTAwMTIu5oY5XHUwMDFhpntJr5H0zqY7dlMqUVvC747BXr9cYr2scEZw6EZAbCH0XHUwMDA3oWRCOYxYNFxi6pApS1xiplxmJt1K7XTh4eNeI+vU9HNEo3S/3+0mKUbgVT/ppbNnjFx1MDAxZulJQGUrjlxu04Ar59tm4TtcYlec9kfZbzuZcY+/TH7/8/HcsyvlhjduLthcXHbBR/mfq1OPLc23SOmVlnaFvPtiJ7nF1IMgXHUwMDA0slx1MDAwYlxcXHUwMDFiXHUwMDA0vjTTuVx1MDAxNow6XHUwMDBieTmIISG0l1x1MDAxYmJcdTAwMWVumCVvjVx1MDAwMeNcdTAwMGLu5Jx1MO+Z81JLXHUwMDEyPJSkmDm5d6UkXHUwMDAylFxcMcU/zDM5+1x1MDAwN/NwJqw0XCKsjFxiN1x1MDAwZW/m8Fx1MDAwZWbAO+4xXHUwMDE1XHUwMDEyU65cbo8+xTtlXVqcSpkhQ++D14Pqt55bymqVJp1cIs1AgVx1MDAwZVZqvHWKfJFcclx1MDAxZlx1MDAxMueVW3x4VVxuxr4uylx1MDAxM6o8xawtSVx1MDAxM6LdpTlvsYDfYs4jXHUwMDFmKlx1MDAxMpTGuCOUnFn8lzzkXHUwMDA2gI5cdTAwMDCSIMo2wnmamIdSUnB7Tlx1MDAwMId+XHUwMDBl54WVTlx1MDAwNzhIgFx1MDAwMj/zRUk3pGcst95ztZFcXNnfhfNAMEKEXHUwMDFjiyTtiVxmz5VRTFxixjFcdTAwMTCeXGZpXHUwMDE0ZeD5TfHhl2K9xUv7U0SsvfbeK4/bwlx061wi5zm4Xm5IaDLh7Vx1MDAxZTTjVcpccn7cXFy09Vx1MDAxNTmvbGVN5eLHWcrzXG6S01x1MDAxMS1cdTAwMWZhvjh9V3fxxaj1KUk+V3k82I+02lx1MDAwMOWtf2lNXHUwMDEyLE4oLrlXRoisXHUwMDA0IPx5RXtcdTAwMTaKL5WxinuQX3nq5l4ra4bJ4OtcdL2AXHUwMDBlUfPynXNcdTAwMTbXeFx1MDAxMKjriCjvvrZ2j2Ljx4uue4+izIXXvceS+MLrbjSfayQ4epXUVDb3d1lbe5eMktN85upnLK5cdTAwMTVuutHVNZdcdTAwMWKNYkmhMd7QXG56bzFcYrZY71x0wSTCXHUwMDFlXHUwMDA09Vx1MDAxZVx1MDAxYVfPXHUwMDE0XHUwMDE0VmTYkaGD55HgpTzTrFPxIZpilksnpdDgWGvn7MggXHUwMDA1L8ilXHUwMDE1goPyjJSF8ijLXHUwMDExpJt8jfxcdTAwMTYpvrvCd0nFt9j5TokrpTG+TnunXHUwMDExRUHNXHUwMDE1xJVnYe9ccsaSYzosnuBuem/x/qRpXHUwMDExXG7L87hfiDgwXFy5stZJpzQzYX+UJFwi4bQ0XHUwMDBmO8itlFt8eFx1MDAxNW19RcVXynqel9aEKqkw43JcdTAwMDXSW+yht5j0lGU6bO/iQWxBc01zntBMc1x1MDAwN1mljFx1MDAxMiRcdTAwMTfsQrtcdTAwMTfnecZcdTAwMDNcdTAwMTDD0i5cdTAwMDIvk7vNhPOsYyGtXHUwMDExpL/lSs4p1XFh3Te/qeNcdTAwMWbKm5ydUVx1MDAxZYW6a+1cdTAwMTRcYlx1MDAwNoNls/rrXFxA6aDtlVx1MDAxNVx1MDAxOE1cdTAwMGKQ3JHzXHUwMDE2bzGb6lx1MDAxM0dA7YWwIe4jo82cNFx1MDAwN1x0xoOVOtio1WDFYq9cdTAwMWVcdTAwMTbplZp8eM1cdTAwMWH72ihPli7sXHSjhSbrlq9PXFxcdTAwMWM8bDHlYXRtqFx1MDAxYuHhTbn6w2vKI+ZcdTAwMDUhzIVcZoQnLi+Cv9e6nlx1MDAwMetcbmd02L/ipJhDeFx1MDAwZVJcdTAwMDBhtlPEdUBGMeJFgKxcdTAwMDOCtzKVsS2MXHUwMDA3RVx1MDAxNTZFWScxliZcdTAwMTRqZ1x1MDAwYrl5dlFcdTAwMGW04yyUv3eY/7tx3uLiw1x1MDAxOZ0ngvWR91x1MDAwNnOsqSjzwl5cZlx1MDAxZVx1MDAxNlx1MDAxOTWZkPotZlhcdTAwMWVcdTAwMTLjlVp8eFx1MDAxNWx9XYSX3/Y1Q3iGbChBNssnb1x1MDAxN69qbDHhecuE1y4kirjXdobwJDHuudYqbMjBuZuJa1x1MDAxMUaxUJ/o+bjk2qs5237CNlFg0IXFd6EgOHO7Ua85T3BcdTAwMDOdgLh2K1NcdTAwMTlbxHlcdTAwMWEqz6vwX1x1MDAxOUT4N1x1MDAxMkXK88zD4UPiwcdcdEl3VXmLd/VMK09MLJE2wuElpJiTvpU4SfLrfWFBXGY+aMYrt/jr1llbX1x1MDAxN+fBp5Rxnlxy61x1MDAxOGaFPSiLiyS3mPKUYlx1MDAxNHZ0gNikhFx1MDAxYp0pWOFwrl5ybZQ3SmteXlwifC/OY6BcXO28XCJHYehpXHUwMDFl53HBnFx1MDAwZVx1MDAxMER4g1CguHGLh/9VIN1m9lx1MDAwN/9dsrdcdTAwMTBcdTAwMTCgM+5k2HbkNM8yV7m4Nmgt76xyQFx1MDAxY4TX3Vx1MDAxOG/xjvlpXHUwMDE2VpysXHUwMDE1MEOQXHUwMDFhmNjPXHUwMDE1eVx1MDAwNJ62UCNcdTAwMTJv+8DTt+VcdTAwMTZ/3Txr7GWc9+jmXHUwMDE2u9FgcJTC6CZcdTAwMTNcdTAwMDLjT1x1MDAxYTdJnOw5d78k8eXe3O0u4Vx1MDAxNfJL41x1MDAxMVxyjFx1MDAxNY+R8P3R9/9cdTAwMDGvMlx1MDAwMC0ifQ== - + HiddenVisible diff --git a/docs/blog/images/compositor/cuts4.excalidraw.svg b/docs/blog/images/compositor/cuts4.excalidraw.svg new file mode 100644 index 0000000000..a97c4bfd4b --- /dev/null +++ b/docs/blog/images/compositor/cuts4.excalidraw.svg @@ -0,0 +1,21 @@ + + + eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nM2W32/bNlx1MDAxMMff81dcdTAwMTju66KQx1/HXHUwMDAww7A22ZC0SJBcdTAwMDVoVlxmQyFLlC1YljSJTupcdTAwMTb533eSXVNz4lwifVhhP1x1MDAxMNZcdTAwMWTJ+97dxyd/OVx1MDAxYY3GflW78elo7D4lcZGnTfww/qmz37umzauSXFzQP7fVskn6nTPv6/b05GRcdTAwMTE3c+frXCJOXFx0n7fLuGj9Ms2rKKlcdTAwMTYnuXeL9pduvYpcdTAwMTfu57papL6JQpBjl+a+ataxXFzhXHUwMDE2rvQt3f5cdTAwMTc9j0Zf+nWgrnGJj8tp4fpcdTAwMDO9K1xiRG13rVdV2YvVWlolOeB2Q96eUTjvUvJmJNlcdTAwMDVPZ1x1MDAxYV+u4n+8Zyw7f88/v8W7XHUwMDFic+mWIWqWXHUwMDE3xa1fXHUwMDE1vaq2omSCr/VNNXd3eepnX8s2sO871VTL6ax0bZc931qrOk5yv+psjG2t61x1MDAxMpyOguVcdTAwMTM9XHUwMDFkg4qY5spKLaRUzKDa+rtcdTAwMWKE0ZFRginDpLRD71rZm6qgTpCyV5BZJ2XQNomT+ZRcdTAwMDSWadgzgVxmJpOw52GTL0dcdTAwMTYxXHUwMDA0a4Fz+m602W6ZuXw6811NdCRQokZpQWlcdTAwMDFMXHUwMDA2Ka5vXHRHNMpqNehYJ6C+SHs6/lx1MDAwZY1oiKuL7ki5LIphNct0U82vXHUwMDE0XHUwMDA1jsTG8lx1MDAxODLs9p9cdTAwMGb4XHUwMDBiXHUwMDExlnVcdTAwMWGvOeFGXGLJtdSgVMiqyMv5bviiSuZcdTAwMDGto0Gs70OaXHUwMDBizfYxTdVFziwz8GKooTzO/Mez1F/lS/1bXHUwMDE1N7/by1x1MDAwZodccjXXXHUwMDEwobDaKkKbKa31XHUwMDBl01x1MDAxOCFXUoJBZsHsRdoxwVx1MDAwNf820lmW2MQ+g7TmXHUwMDExXHUwMDFhNFxmhURGYvBZpFxyt1xuOENLgZCbJ0hcdTAwMWKaQFx1MDAxNlx1MDAxNYdDQ1pcdTAwMDBqMFx1MDAwMD9cdTAwMDZpXHUwMDA2alx1MDAxZtKgUYCVSr+Y6OT6V+Pe/FHfTpqSXfx5/27lXHUwMDE25rCJVtxEUqBcdTAwMDIlacThYPatgTZcdTAwMTFBRG2h2WdoiOq9SHNreFx1MDAwMt9GOlYpZtlTpFx1MDAxNUQ0fVxyXG5mqPGSXHJUXHUwMDA0pE1EL1x0LiynvpCioZRcctJcdTAwMWOFJpkoXHUwMDBmXHJpXHUwMDFhXHUwMDFiWlvkP1x1MDAwNmk1XGK0g7RcdTAwMTJgNKOX3YuRfv2xuJmdfzj2+dnd2+vrbHFjpvKwkVx1MDAxNlx1MDAwMlwiYKhcdTAwMDSNaCaM3Z3RNlx1MDAxMkqhRamAXHRQ4v+Z0t0vXHUwMDA3uKT528nQTD2DtIpo1rFOXHJjnFx1MDAwM4gnSGvT/TVcdTAwMWHO+INBWmpcdTAwMDNCfjfStPaXjuO6vvV05VZcdTAwMWGllqe3+Wf3n2vG97l7eP1s5bvP+Gijv0PR9Xk+XHUwMDFlPf5cdTAwMGJcdTAwMDPzXGZcdTAwMDEifQ== + + + + + diff --git a/docs/blog/images/compositor/widgets.excalidraw.svg b/docs/blog/images/compositor/widgets.excalidraw.svg new file mode 100644 index 0000000000..56acc3f229 --- /dev/null +++ b/docs/blog/images/compositor/widgets.excalidraw.svg @@ -0,0 +1,21 @@ + + + eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO2a7VPbOFx1MDAxM8C/969guK+NqreVVp25ueGlXHUwMDFj9HrtXHUwMDAxPcrxzM0zxnZcdTAwMTK3jlx1MDAxZGJcdTAwMDfKdfjfb+WW2MRxoEApzz1nZlx1MDAxMlwiydJa+u1qd+VPT1ZWVsvzcbz6fGU1/lx1MDAxOFx1MDAwNmlcdTAwMTJNgrPVp778NJ5cdTAwMTRJnlGVrH5cdTAwMTf5dFx1MDAxMlYth2U5Lp4/ezZcbiZcdTAwMWbicpxcdTAwMDZhzE6TYlx1MDAxYaRFOY2SnIX56FlSxqPiJ//5Olx1MDAxOMU/jvNRVE5YPUgvjpIyn3xcdTAwMWUrTuNRnJVcdTAwMDX1/lx1MDAxZvq9svKp+mxIN4nDMshcdTAwMDZpXFzdUFXVXHUwMDAyXG4l5ktf51klrDAgtHVuVp9cdTAwMTSbNFpcdTAwMTlHVNknieO6xlx1MDAxN63uXHUwMDFkbexcdTAwMWS+77+HXHUwMDEw9vjO6TDfXHUwMDE52EE9aD9J0/3yPK2EKnJ6lrquKCf5h/hdXHUwMDEylcPLWWuUd901yaeDYVx1MDAxNlx1MDAxN/7h68fIx0GYlOe+jPNZ6edcdTAwMTl4vlKXfKxaIFNcdTAwMTZcdTAwMWQ3XHUwMDEyZlx1MDAxNf5WKTgzWminjUWOws6JtJGntFx1MDAwMiTSXHUwMDBmwllcdTAwMTHKWqjjIPwwIMmyqG5cdTAwMTNAhP1+3ebsy4OCXHUwMDAwhtS/dZZrqVx1MDAwNc5aXGbjZDAsqYlcdTAwMTKOSVRSaGmcUlrpWpK4WlxuqbgxgFgvlFx1MDAxZn68XHUwMDEzVUz8Wc//hGja8Xdk0zRtTmJcdTAwMTZ9mcQrXHUwMDE1x77iRVx1MDAwM6+6q+k4XG4+cyAsyUTTpFx1MDAxY+h6XHUwMDA20yT7MN9dmodcdTAwMWZqdKrSi6e3IFZcdTAwMDN0XHUwMDExS4umpaJlszdm9udy9GugXHUwMDA3PVx1MDAxM7zaMFn5R1x1MDAwMoeH2WNn1jBu6SmBXHUwMDFlVGmcXHUwMDA3VzIhQUtLqmuc0bqTXFzZd7HWy8k9ln15fNwmV1pgVkqg/rVytP7QRldcdTAwMTjNpOWoXHUwMDE1cEBotrlEV3BcdTAwMDWgsWGEXHUwMDFlnF1cdTAwMDNKSe5cdTAwMWWEXaNsXHUwMDE3u1x1MDAwZZDUXHUwMDFi4ebovphcdTAwMGVe9lx1MDAwZl+GRbS7XHUwMDFiXHUwMDFlZ7sv5YtXwSNH11x1MDAxYeaU1Fx1MDAxY8E4XHUwMDA0oa6ia4CBctY4XHUwMDAwsrpWdZJcdTAwMWJzRVx1MDAxYtdycvv90IWuTa6ynDmNUjo0XHUwMDAwILVaQK51zHBqYLgwXHUwMDA2jW1cdTAwMTldJ1FcdTAwMDPVfk9uhZRccp7uyC3dvlx1MDAxMFmJnciCVMpYIW7uIezsn1xmf5FcdTAwMDflXHUwMDFh+T3H42K/RGvf3yuyUVBcZuNcdTAwMGVm+Vx1MDAwMmbtdciiZcpJJVBcdTAwMDDZWuXmkEXHyFx1MDAxMFx1MDAwYoKVW5S84UW0/ITY/y1ltpxcdTAwMDRZMVx1MDAwZSa0+Fx1MDAwYnxcdTAwMDVwzFx01Eahplx1MDAwZrfA4GpGcmry2YQyqDm0XVx1MDAwNVx1MDAwZdwgNfmuvlx1MDAwMtA8fY29bUxpMCnXkyxKssH8LXFcdTAwMTZ11KRBUW7ko1FSklx1MDAxOL/lSVbOt6j6XZtM8rNhXHUwMDFjtFx1MDAxZZp67qxcdTAwMWL77mrf21/1fys1StWP2f9/Pl3YWlpk1knJjXCOUNPNu1x1MDAwNbOGfECyoOjtXHUwMDEyrfF13XVcdTAwMDLjr55kXHUwMDAwlkvqU1x1MDAxYmeV1VD396T5/bVcdTAwMDZDde9xwkqFRlt1800uM4dnXHUwMDExP+it97fK3c13pTvcLtZcdTAwMWW9xVx1MDAwMEFWUVx1MDAwMKCm6KDWQn+78t5cdTAwMWKCQlpcdTAwMTnaxdycWPdpLywjZ1x1MDAxMK12tM85V895vc0xI6VcdTAwMTCGKsFaQ+C1tjlHqGFTzO9gL4jQhqfwr724vDpX2F+99uJ+pYKX8cdyYcqAdyq45UJbXG6Wb67f/TdrSv46mYYuXs/0od1cdTAwMGXD3saD6fftvFhjXHUwMDE1U4hG0UZcdTAwMDZOuHroSsGNZVxcSSudIf+I62+n4U4yTjuFkJasXGY5z7X2zjRcXLZCLmFQasBcdTAwMDdcYrlmuH1qYPll2Uf89+lg71x1MDAxZGD82yh6Y3f++z47tKtNfmdcdTAwMThcdTAwMDZel1ZnNVx1MDAxN5fsLjFcdTAwMThWc3srg9HPs3I/+avKJfArpVvBKEnPryBT6Vx1MDAwN1x0uJ94Slau7oe+ci1NXHUwMDA2WbVVxv2rmlQmYZDOqst8XFzXhjRYQF1N2lOfT5JBklx1MDAwNenbZVx1MDAwM/tf27WBb1x1MDAwMHBcdTAwMWNcdTAwMTRx1ZbKcanmL89cdTAwMTiKXHUwMDA2aPNcdTAwMWK80uQrX0mXXWdcdTAwMDCKnu1cdTAwMDXB5uG5XHUwMDFh83T79OTo0JwlXHUwMDFkXHUwMDA2IJzkRdFcdTAwMWJcdTAwMDZlOHxcdTAwMDSxLNdMeNfJOMVcdTAwMWRFlPUzn3/2dVx1MDAxOHniYNFwTrGB645cZnh13WGnl2SPgIZcIklos1ZcdTAwMGJ2emU4Q8H9VqpcdTAwMTSFK7K101x1MDAwYqmtJbNcdTAwMDX/2oV7SPSQ89e5R2qtJEd786j5j3izyIK9ZGd7v3y9XHUwMDE1XHUwMDFkbZ64Nz8/8kRcdTAwMGZcdTAwMDfmfFxi6uNcdTAwMTiHKOWcclx1MDAxMLFEI2iNjkstvp1uXGJcdTAwMWZcdTAwMDRp6bRB4Fx1MDAxNDUt2CORXHUwMDAxuUhcdTAwMWNJiy03XHUwMDE0LrV0Q5FcdTAwMTdsm/nLh/eCvT/RXGI97lxib5ymybhYiK612IWuIJfGaOe+4kzoVOjTt6+231x1MDAxN0Hwavctbk+zXzb3bsPuPFwi35BdXHUwMDAxjLxmLpU0RG5zM6s6QMHI5UYnXGZIa8WSlM9ccuD9oVx1MDAxZoBcdTAwMDTZXHUwMDA2VyimuZRAU05fXHUwMDFhUbfJXHUwMDE1XHUwMDE0xFx1MDAxYuOT74KkVWTBW+RybVxyUiCg/lx1MDAxZtBFJbvQXHUwMDA1riV3tL/dmNyTg37xQtiDcvwm2XN7XHUwMDFiXHUwMDA3R4nafOTkaklBXHUwMDFmWTF00rtcdTAwMWNmXHUwMDBlXFzO/GFcdTAwMDfSqiCFXHUwMDAxvPtM82bgXHUwMDFlc1x1MDAwZd9cblxcSSFcdTAwMTRcdTAwMTdcdTAwMDJcdTAwMWJe1T9cdTAwMTnc7iS7XHUwMDAwXHUwMDBlXHUwMDFhKY7/mjNNtVVubUTb03LLqlx1MDAxM3niol35yMm1nk3ylFx0XHUwMDA1QE3YtNBcdTAwMTXccDK7RlPUre6GrpDHXHUwMDE0vn8rdFx1MDAxMf1BgMJ/jsntzFx1MDAwNGG3q0BcdTAwMGWu1I0kw3XQvoxen1xyy9Ha0eb6u/3fM51cdTAwMWWdq79cdTAwMWW3k6uUYqhcdTAwMTGMIGNF0VcrXHUwMDAyXHUwMDA0XHUwMDA2mvxcYuvTwUYse4fkjpkgXHUwMDFhXHSFc4pcdTAwMDSh4ZRewO2CTJDggnxcdTAwMWNcdTAwMTT/U25tLdVtcjVlPFx1MDAxOflcdTAwMTTKwyZq2qPeR5bmc1x1MDAwMLxALVx1MDAxYu75vFZKXHUwMDAx6sq7Ttep5fKA/FGev1jJWfWilFx1MDAxMj6os1ffj1FgXHUwMDE5SiU07SZGUX33W1x1MDAwNnfVSpSM1N7513R8mCBcdTAwMTfkZUAyS15cdTAwMTQ56KS35Jy1dJRcdTAwMDIuXHUwMDA1PlL+jjp6+3zq3Fx1MDAwMUyd8Ll8bXHnXHUwMDA2h1x1MDAwMJVWh9OKXHUwMDA3XHUwMDA23saB497k8sZrO35igrGHn1EpoFx1MDAwMk0xnEH9pf5iJtOVg58uiZZnJVx1MDAxYlx1MDAxMvXIbyGPWlxuP1x1MDAxYy2TNW2RqldcdFx1MDAxNYEoyKdcdTAwMDBlsCXTPVx1MDAxZjnNm4Z7PXXqdWJd1c5cdTAwMTNdd/ek+e3TddVcdTAwMDCrwXi8X1x1MDAxMnCz1SDCk+iLZa+fcvU0ic/WXHUwMDE3vufjL59cYqzm05uk2D/rp4snXHUwMDE3f1x1MDAwM0JltmMifQ== + + + + + Single lineterminal diff --git a/docs/blog/posts/release1.0.0.md b/docs/blog/posts/release1.0.0.md index b5d1df6f15..ec9e7970f8 100644 --- a/docs/blog/posts/release1.0.0.md +++ b/docs/blog/posts/release1.0.0.md @@ -12,6 +12,116 @@ Version 1.0 announcements often come with a happy hour and merch. Well we haven't got any merch. +## The Compositor + + +The job of the compositor is to combine widgets in to a single view. + +We do this because the terminal itself has no notion of overlapping windows in the way a desktop does. +If an app wants to display overlapping components it must combine them into a single update. + +Here's a video I generated over a year ago, demonstrating the output of the compositor: + +
+ +
+ +### The algorithm + +You could be forgiven in thinking that the terminal is regular grid of characters and we can treat it like a 2D array. +If that were the case, we could use [painter's algorithm](https://en.wikipedia.org/wiki/Painter's_algorithm) to handle the overlapping widgets. +In other words, sort them back to front and render them as though they were bitmaps. + +Unfortunately the terminal is *not* a true grid. +Some characters such as CJK (Chinese, Japanese, and Korean) and many emoji are double the width of latin alphabet characters — which complicates things (to put it mildly). + +Textual's way of handling this is inherited from [Rich](https://github.com/Textualize/rich). +Anything you print in Rich, first generates a list of [Segments](https://github.com/Textualize/rich/blob/master/rich/segment.py) which consist of a string and associated style. +These Segments are only converted into text with [ansi escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) at the very last moment. + +Textual works with same Segment object. +Widgets all produce a list of segments, which are further processed by the compositor. + +!!! tip "Switch the Primitive" + + I hope I've earned the opertunity to dispense unsolicited pearls of wisdom. + If a problem is intractable, it can often be simplified by changing what you consider to be the fundamental atomic data and operations you are working with. + I call this "switching the primitive". + +### Thinking in Segments + +In the following illustration we have an app with three widgets; the "screen" (in blue) plus two floating widgets (in red and green). +There will be many more widgets in a typical app, but this is enough to show how it works. + + +
+--8<-- "docs/blog/images/compositor/widgets.excalidraw.svg" +
+ +The lines are lists of Segments produced by the widget renderer. +The compositor will combine those lists in to a single list where nothing overlaps. + +To illustrate how this process works, let's consider the highlighted line about a quarter of the way down. + + +### Compositing a line + +Imagine you could view the terminal and widgets side on, so that you see a cross section of the terminal and the floating widgets. +It would appear something like the following: + +
+--8<-- "docs/blog/images/compositor/cuts0.excalidraw.svg" +
+ +Those lines are produced when the widget is rendered and consist of a list of segments. + +We want to combine these lists into a single list that covers the width of the terminal. +That way we can update everything in a single write. + + +### Step 1. Finding the cuts. + +First thing the compositor does is to find every offset where a list of segments begins or ends. +
--8<-- "docs/blog/images/compositor/cuts1.excalidraw.svg"
+ +### Step 2. Applying the cuts. + +The next step is to divide every list of segments at the cut offsets. +This will produce smaller lists of segments, which in the compositor code we refer to as *chops*. + +
+--8<-- "docs/blog/images/compositor/cuts2.excalidraw.svg" +
+ + +### Step 3. Discard chops. + +Only the top-most chops will actually be visible to the viewer, so we can discard any chop that isn't at the top. + +
+--8<-- "docs/blog/images/compositor/cuts3.excalidraw.svg" +
+ +### Step 4. Combine. + +Now all that's left is to combine the top-most chops in to a single list of Segments. + +It is this list of segments that becomes a line in the terminal. + +
+--8<-- "docs/blog/images/compositor/cuts4.excalidraw.svg" +
+ +### What I omitted + +There is more going on than this explanation may suggest. +Widgets may contain other widgets which are clipped to their *parent's* boundaries, and widgets that contain other widgets may also scroll — the compositor must take all of this in to account. + +Additionally, the compositor can do partial updates. +In other words, if you click a button and it changes color the compositor can update just that button. + +The compositor does all of this fast enough to enable smooth scrolling, even with a metric tonne of widgets on screen. +Surprising fast, given it is essentially number crunching, which isn't considered Python's forté. diff --git a/docs/custom_theme/main.html b/docs/custom_theme/main.html index 3219e100dd..edad06b6a1 100644 --- a/docs/custom_theme/main.html +++ b/docs/custom_theme/main.html @@ -28,6 +28,8 @@ src: url("https://unpkg.com/@excalidraw/excalidraw@0.12.0/dist/excalidraw-assets/Cascadia.woff2"); } + +