From ce43667694e70366d07e6a18f6ee13d34dda3480 Mon Sep 17 00:00:00 2001 From: Flynn OConnell Date: Sun, 21 Dec 2025 20:28:21 -0500 Subject: [PATCH 01/13] add favicon, parrot icons --- docs/source/_static/favicon.ico | Bin 0 -> 15086 bytes docs/source/_static/parrot-icon.png | 3 + docs/source/_static/parrot-icon.svg | 2964 +++++++++++++++++++++++++++ 3 files changed, 2967 insertions(+) create mode 100644 docs/source/_static/favicon.ico create mode 100644 docs/source/_static/parrot-icon.png create mode 100644 docs/source/_static/parrot-icon.svg diff --git a/docs/source/_static/favicon.ico b/docs/source/_static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..f8371f46caf3d92cfdab410b26e4aa12a391d782 GIT binary patch literal 15086 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 L0 + + + + + + + + Adobe PDF library 6.66 + + + 2023-10-26T23:30:36+02:00 + 2023-10-26T23:30:36+02:00 + Adobe Illustrator CS6 (Windows) + 2023-10-26T23:30:36+02:00 + + + + 256 + 128 + JPEG + /9j/4AAQSkZJRgABAgEAlgCWAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAAlgAAAAEA +AQCWAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK +DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f +Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAgAEAAwER +AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA +AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB +UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE +1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ +qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy +obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp +0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo ++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXEgAkmgHU +4qxPzP8AmJpGkwlLOSO+vjsscbBkT3dl/UN8x8uoERtuXC1GuhAbGy8w1bzh5h1V2NzeOI26QREx +xj24r1+mua/IZy3kdvsdRk105dUqWORz7nuc1M+09PA1vL3D9dMBGckdY6r5g0lvVsbmWEDchGJQ +/wCshqp+kZsNF2jhyHhjKpdx2/YxlPPi3F09W8ieeE8wQvbXKrFqcC8nVdlkStOajtQ9Rm+4SBu7 +Xs7tEZ/SfrH2ssxdo7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY +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 + + + + + + xmp.did:AAD079D7E373EE11BDBBD9667552FBE7 + xmp.iid:AAD079D7E373EE11BDBBD9667552FBE7 + uuid:d522c974-cd9d-428a-a57e-1ccffb646c7e + + xmp.iid:A8D079D7E373EE11BDBBD9667552FBE7 + xmp.did:A8D079D7E373EE11BDBBD9667552FBE7 + uuid:d522c974-cd9d-428a-a57e-1ccffb646c7e + proof:pdf + + + + + saved + xmp.iid:A8D079D7E373EE11BDBBD9667552FBE7 + 2023-10-26T23:30:25+02:00 + Adobe Illustrator CS6 (Windows) + / + + + saved + xmp.iid:AAD079D7E373EE11BDBBD9667552FBE7 + 2023-10-26T23:30:36+02:00 + Adobe Illustrator CS6 (Windows) + / + + + + proof:pdf + + + image/svg+xml + + + + 782.998047 + 447.154785 + Pixels + + 1 + True + False + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 0 + 0 + 0 + + + Magenta + RGB + PROCESS + 240 + 3 + 127 + + + Red + RGB + PROCESS + 255 + 0 + 0 + + + Crimson + RGB + PROCESS + 137 + 12 + 8 + + + Peach + RGB + PROCESS + 237 + 179 + 41 + + + Custard + RGB + PROCESS + 254 + 222 + 88 + + + Yellow + RGB + PROCESS + 255 + 255 + 0 + + + Lime + RGB + PROCESS + 171 + 218 + 77 + + + Dried Sage + RGB + PROCESS + 160 + 192 + 124 + + + Green + RGB + PROCESS + 51 + 160 + 44 + + + Forest + RGB + PROCESS + 22 + 88 + 41 + + + Mediterranean + RGB + PROCESS + 0 + 145 + 147 + + + Bright Blue + RGB + PROCESS + 139 + 211 + 229 + + + Pure Cyan + RGB + PROCESS + 0 + 160 + 198 + + + Night Blue + RGB + PROCESS + 10 + 80 + 161 + + + Orange + RGB + PROCESS + 255 + 127 + 0 + + + Slate + RGB + PROCESS + 102 + 129 + 135 + + + Periwinkle + RGB + PROCESS + 145 + 155 + 201 + + + Plum + RGB + PROCESS + 129 + 23 + 136 + + + Lavender + RGB + PROCESS + 205 + 130 + 190 + + + Baby Pink + RGB + PROCESS + 251 + 192 + 223 + + + Bisque + RGB + PROCESS + 231 + 185 + 138 + + + Cafe Con Leche + RGB + PROCESS + 169 + 119 + 93 + + + Malt + RGB + PROCESS + 138 + 100 + 74 + + + Mocha + RGB + PROCESS + 90 + 61 + 27 + + + Pigeon + RGB + PROCESS + 179 + 179 + 179 + + + Battleship + RGB + PROCESS + 77 + 77 + 77 + + + Global Black + PROCESS + 100.000000 + RGB + 0 + 0 + 0 + + + Global Red + PROCESS + 100.000000 + RGB + 255 + 0 + 0 + + + Global Orange + PROCESS + 100.000000 + RGB + 255 + 126 + 0 + + + Global Yellow + PROCESS + 100.000000 + RGB + 255 + 255 + 0 + + + Global Lime + PROCESS + 100.000000 + RGB + 171 + 217 + 77 + + + Global Green + PROCESS + 100.000000 + RGB + 51 + 159 + 43 + + + Global Blue + PROCESS + 100.000000 + RGB + 139 + 210 + 228 + + + Global Night + PROCESS + 100.000000 + RGB + 9 + 79 + 161 + + + Global Periwinkle + PROCESS + 100.000000 + RGB + 144 + 154 + 200 + + + Global Plum + PROCESS + 100.000000 + RGB + 129 + 23 + 135 + + + Global Pink + PROCESS + 100.000000 + RGB + 250 + 191 + 222 + + + Global Malt + PROCESS + 100.000000 + RGB + 138 + 98 + 74 + + + New Color Swatch 2 + RGB + PROCESS + 0 + 80 + 151 + + + New Color Swatch 3 + RGB + PROCESS + 0 + 154 + 48 + + + New Color Swatch 5 + RGB + PROCESS + 255 + 222 + 0 + + + New Color Swatch 4 + RGB + PROCESS + 207 + 0 + 23 + + + PANTONE 361 U + SPOT + 100.000000 + RGB + 78 + 172 + 37 + + + New Color Swatch 6 + RGB + PROCESS + 55 + 69 + 84 + + + New Color Swatch 10 + RGB + PROCESS + 216 + 162 + 116 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 7872f5a80295c816cb1a15cd3e6d4083556c1d80 Mon Sep 17 00:00:00 2001 From: Flynn OConnell Date: Sun, 21 Dec 2025 20:33:59 -0500 Subject: [PATCH 02/13] add favicon to sphinx config --- docs/source/conf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/source/conf.py b/docs/source/conf.py index 8547e9ae7..174aa9da6 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -118,6 +118,7 @@ html_static_path = ["_static"] html_logo = "_static/logo.png" +html_favicon = "_static/favicon.ico" html_title = f"v{release}" autodoc_member_order = "groupwise" From b46744d13b22cff4a1efd9dde9ba8916c1cc4a2c Mon Sep 17 00:00:00 2001 From: Flynn OConnell Date: Sun, 21 Dec 2025 20:39:55 -0500 Subject: [PATCH 03/13] change title to fastplotlib | next gen plotting lib --- docs/source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 174aa9da6..f02461a27 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -119,7 +119,7 @@ html_static_path = ["_static"] html_logo = "_static/logo.png" html_favicon = "_static/favicon.ico" -html_title = f"v{release}" +html_title = "fastplotlib | Next-gen plotting library" autodoc_member_order = "groupwise" autoclass_content = "both" From c7c39212b78a34290256702d1bf8fceb5a04cab5 Mon Sep 17 00:00:00 2001 From: Flynn OConnell Date: Mon, 22 Dec 2025 09:46:25 -0500 Subject: [PATCH 04/13] Parrot on LFS, fix html title --- .gitattributes | 2 + docs/source/_static/favicon.ico | Bin 15086 -> 130 bytes docs/source/_static/parrot-icon.svg | 2967 +------------------------- docs/source/fastplotlib_logo.svg | 2976 +-------------------------- fastplotlib/assets/icon.png | 3 + 5 files changed, 11 insertions(+), 5937 deletions(-) create mode 100644 fastplotlib/assets/icon.png diff --git a/.gitattributes b/.gitattributes index c921772ae..8b8fb3e05 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,5 @@ *.png filter=lfs diff=lfs merge=lfs -text *.gif filter=lfs diff=lfs merge=lfs -text *.npy filter=lfs diff=lfs merge=lfs -text +*.ico filter=lfs diff=lfs merge=lfs -text +*.svg filter=lfs diff=lfs merge=lfs -text diff --git a/docs/source/_static/favicon.ico b/docs/source/_static/favicon.ico index f8371f46caf3d92cfdab410b26e4aa12a391d782..5c3553682e973eab17956f595c9d5ef08a88e2d4 100644 GIT binary patch literal 130 zcmWN?OA^8$3;@tQr{DsX&yWUs8wiOoqtX%V!qe;9yo=wnkC$$1o%1l}-q-CRbNk;u zWux&l^JFrYQ=?ZsTlTOYiLK-uDpvpmK~IUIb-sw?D(F&;7%~;CNj$m0XcJHj$zv1- MR literal 15086 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 L0 - - - - - - - - Adobe PDF library 6.66 - - - 2023-10-26T23:30:36+02:00 - 2023-10-26T23:30:36+02:00 - Adobe Illustrator CS6 (Windows) - 2023-10-26T23:30:36+02:00 - - - - 256 - 128 - JPEG - /9j/4AAQSkZJRgABAgEAlgCWAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAAlgAAAAEA -AQCWAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAgAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXEgAkmgHU -4qxPzP8AmJpGkwlLOSO+vjsscbBkT3dl/UN8x8uoERtuXC1GuhAbGy8w1bzh5h1V2NzeOI26QREx -xj24r1+mua/IZy3kdvsdRk105dUqWORz7nuc1M+09PA1vL3D9dMBGckdY6r5g0lvVsbmWEDchGJQ -/wCshqp+kZsNF2jhyHhjKpdx2/YxlPPi3F09W8ieeE8wQvbXKrFqcC8nVdlkStOajtQ9Rm+4SBu7 -Xs7tEZ/SfrH2ssxdo7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -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 - - - - - - xmp.did:AAD079D7E373EE11BDBBD9667552FBE7 - xmp.iid:AAD079D7E373EE11BDBBD9667552FBE7 - uuid:d522c974-cd9d-428a-a57e-1ccffb646c7e - - xmp.iid:A8D079D7E373EE11BDBBD9667552FBE7 - xmp.did:A8D079D7E373EE11BDBBD9667552FBE7 - uuid:d522c974-cd9d-428a-a57e-1ccffb646c7e - proof:pdf - - - - - saved - xmp.iid:A8D079D7E373EE11BDBBD9667552FBE7 - 2023-10-26T23:30:25+02:00 - Adobe Illustrator CS6 (Windows) - / - - - saved - xmp.iid:AAD079D7E373EE11BDBBD9667552FBE7 - 2023-10-26T23:30:36+02:00 - Adobe Illustrator CS6 (Windows) - / - - - - proof:pdf - - - image/svg+xml - - - - 782.998047 - 447.154785 - Pixels - - 1 - True - False - - - Cyan - Magenta - Yellow - Black - - - - - - Default Swatch Group - 0 - - - - White - RGB - PROCESS - 255 - 255 - 255 - - - Black - RGB - PROCESS - 0 - 0 - 0 - - - Magenta - RGB - PROCESS - 240 - 3 - 127 - - - Red - RGB - PROCESS - 255 - 0 - 0 - - - Crimson - RGB - PROCESS - 137 - 12 - 8 - - - Peach - RGB - PROCESS - 237 - 179 - 41 - - - Custard - RGB - PROCESS - 254 - 222 - 88 - - - Yellow - RGB - PROCESS - 255 - 255 - 0 - - - Lime - RGB - PROCESS - 171 - 218 - 77 - - - Dried Sage - RGB - PROCESS - 160 - 192 - 124 - - - Green - RGB - PROCESS - 51 - 160 - 44 - - - Forest - RGB - PROCESS - 22 - 88 - 41 - - - Mediterranean - RGB - PROCESS - 0 - 145 - 147 - - - Bright Blue - RGB - PROCESS - 139 - 211 - 229 - - - Pure Cyan - RGB - PROCESS - 0 - 160 - 198 - - - Night Blue - RGB - PROCESS - 10 - 80 - 161 - - - Orange - RGB - PROCESS - 255 - 127 - 0 - - - Slate - RGB - PROCESS - 102 - 129 - 135 - - - Periwinkle - RGB - PROCESS - 145 - 155 - 201 - - - Plum - RGB - PROCESS - 129 - 23 - 136 - - - Lavender - RGB - PROCESS - 205 - 130 - 190 - - - Baby Pink - RGB - PROCESS - 251 - 192 - 223 - - - Bisque - RGB - PROCESS - 231 - 185 - 138 - - - Cafe Con Leche - RGB - PROCESS - 169 - 119 - 93 - - - Malt - RGB - PROCESS - 138 - 100 - 74 - - - Mocha - RGB - PROCESS - 90 - 61 - 27 - - - Pigeon - RGB - PROCESS - 179 - 179 - 179 - - - Battleship - RGB - PROCESS - 77 - 77 - 77 - - - Global Black - PROCESS - 100.000000 - RGB - 0 - 0 - 0 - - - Global Red - PROCESS - 100.000000 - RGB - 255 - 0 - 0 - - - Global Orange - PROCESS - 100.000000 - RGB - 255 - 126 - 0 - - - Global Yellow - PROCESS - 100.000000 - RGB - 255 - 255 - 0 - - - Global Lime - PROCESS - 100.000000 - RGB - 171 - 217 - 77 - - - Global Green - PROCESS - 100.000000 - RGB - 51 - 159 - 43 - - - Global Blue - PROCESS - 100.000000 - RGB - 139 - 210 - 228 - - - Global Night - PROCESS - 100.000000 - RGB - 9 - 79 - 161 - - - Global Periwinkle - PROCESS - 100.000000 - RGB - 144 - 154 - 200 - - - Global Plum - PROCESS - 100.000000 - RGB - 129 - 23 - 135 - - - Global Pink - PROCESS - 100.000000 - RGB - 250 - 191 - 222 - - - Global Malt - PROCESS - 100.000000 - RGB - 138 - 98 - 74 - - - New Color Swatch 2 - RGB - PROCESS - 0 - 80 - 151 - - - New Color Swatch 3 - RGB - PROCESS - 0 - 154 - 48 - - - New Color Swatch 5 - RGB - PROCESS - 255 - 222 - 0 - - - New Color Swatch 4 - RGB - PROCESS - 207 - 0 - 23 - - - PANTONE 361 U - SPOT - 100.000000 - RGB - 78 - 172 - 37 - - - New Color Swatch 6 - RGB - PROCESS - 55 - 69 - 84 - - - New Color Swatch 10 - RGB - PROCESS - 216 - 162 - 116 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:d6c5ba1d7f8fbba58569e138f4e8ea2056e324b845c0d8f5da74d94c5a3697e0 +size 94879 diff --git a/docs/source/fastplotlib_logo.svg b/docs/source/fastplotlib_logo.svg index eb2a738a8..1ece81f14 100644 --- a/docs/source/fastplotlib_logo.svg +++ b/docs/source/fastplotlib_logo.svg @@ -1,2973 +1,3 @@ - - - - - - - - - Adobe PDF library 6.66 - - - 2023-10-26T23:30:36+02:00 - 2023-10-26T23:30:36+02:00 - Adobe Illustrator CS6 (Windows) - 2023-10-26T23:30:36+02:00 - - - - 256 - 128 - JPEG - /9j/4AAQSkZJRgABAgEAlgCWAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAAlgAAAAEA -AQCWAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAgAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXEgAkmgHU -4qxPzP8AmJpGkwlLOSO+vjsscbBkT3dl/UN8x8uoERtuXC1GuhAbGy8w1bzh5h1V2NzeOI26QREx -xj24r1+mua/IZy3kdvsdRk105dUqWORz7nuc1M+09PA1vL3D9dMBGckdY6r5g0lvVsbmWEDchGJQ -/wCshqp+kZsNF2jhyHhjKpdx2/YxlPPi3F09W8ieeE8wQvbXKrFqcC8nVdlkStOajtQ9Rm+4SBu7 -Xs7tEZ/SfrH2ssxdo7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -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 - - - - - - xmp.did:AAD079D7E373EE11BDBBD9667552FBE7 - xmp.iid:AAD079D7E373EE11BDBBD9667552FBE7 - uuid:d522c974-cd9d-428a-a57e-1ccffb646c7e - - xmp.iid:A8D079D7E373EE11BDBBD9667552FBE7 - xmp.did:A8D079D7E373EE11BDBBD9667552FBE7 - uuid:d522c974-cd9d-428a-a57e-1ccffb646c7e - proof:pdf - - - - - saved - xmp.iid:A8D079D7E373EE11BDBBD9667552FBE7 - 2023-10-26T23:30:25+02:00 - Adobe Illustrator CS6 (Windows) - / - - - saved - xmp.iid:AAD079D7E373EE11BDBBD9667552FBE7 - 2023-10-26T23:30:36+02:00 - Adobe Illustrator CS6 (Windows) - / - - - - proof:pdf - - - image/svg+xml - - - - 782.998047 - 447.154785 - Pixels - - 1 - True - False - - - Cyan - Magenta - Yellow - Black - - - - - - Default Swatch Group - 0 - - - - White - RGB - PROCESS - 255 - 255 - 255 - - - Black - RGB - PROCESS - 0 - 0 - 0 - - - Magenta - RGB - PROCESS - 240 - 3 - 127 - - - Red - RGB - PROCESS - 255 - 0 - 0 - - - Crimson - RGB - PROCESS - 137 - 12 - 8 - - - Peach - RGB - PROCESS - 237 - 179 - 41 - - - Custard - RGB - PROCESS - 254 - 222 - 88 - - - Yellow - RGB - PROCESS - 255 - 255 - 0 - - - Lime - RGB - PROCESS - 171 - 218 - 77 - - - Dried Sage - RGB - PROCESS - 160 - 192 - 124 - - - Green - RGB - PROCESS - 51 - 160 - 44 - - - Forest - RGB - PROCESS - 22 - 88 - 41 - - - Mediterranean - RGB - PROCESS - 0 - 145 - 147 - - - Bright Blue - RGB - PROCESS - 139 - 211 - 229 - - - Pure Cyan - RGB - PROCESS - 0 - 160 - 198 - - - Night Blue - RGB - PROCESS - 10 - 80 - 161 - - - Orange - RGB - PROCESS - 255 - 127 - 0 - - - Slate - RGB - PROCESS - 102 - 129 - 135 - - - Periwinkle - RGB - PROCESS - 145 - 155 - 201 - - - Plum - RGB - PROCESS - 129 - 23 - 136 - - - Lavender - RGB - PROCESS - 205 - 130 - 190 - - - Baby Pink - RGB - PROCESS - 251 - 192 - 223 - - - Bisque - RGB - PROCESS - 231 - 185 - 138 - - - Cafe Con Leche - RGB - PROCESS - 169 - 119 - 93 - - - Malt - RGB - PROCESS - 138 - 100 - 74 - - - Mocha - RGB - PROCESS - 90 - 61 - 27 - - - Pigeon - RGB - PROCESS - 179 - 179 - 179 - - - Battleship - RGB - PROCESS - 77 - 77 - 77 - - - Global Black - PROCESS - 100.000000 - RGB - 0 - 0 - 0 - - - Global Red - PROCESS - 100.000000 - RGB - 255 - 0 - 0 - - - Global Orange - PROCESS - 100.000000 - RGB - 255 - 126 - 0 - - - Global Yellow - PROCESS - 100.000000 - RGB - 255 - 255 - 0 - - - Global Lime - PROCESS - 100.000000 - RGB - 171 - 217 - 77 - - - Global Green - PROCESS - 100.000000 - RGB - 51 - 159 - 43 - - - Global Blue - PROCESS - 100.000000 - RGB - 139 - 210 - 228 - - - Global Night - PROCESS - 100.000000 - RGB - 9 - 79 - 161 - - - Global Periwinkle - PROCESS - 100.000000 - RGB - 144 - 154 - 200 - - - Global Plum - PROCESS - 100.000000 - RGB - 129 - 23 - 135 - - - Global Pink - PROCESS - 100.000000 - RGB - 250 - 191 - 222 - - - Global Malt - PROCESS - 100.000000 - RGB - 138 - 98 - 74 - - - New Color Swatch 2 - RGB - PROCESS - 0 - 80 - 151 - - - New Color Swatch 3 - RGB - PROCESS - 0 - 154 - 48 - - - New Color Swatch 5 - RGB - PROCESS - 255 - 222 - 0 - - - New Color Swatch 4 - RGB - PROCESS - 207 - 0 - 23 - - - PANTONE 361 U - SPOT - 100.000000 - RGB - 78 - 172 - 37 - - - New Color Swatch 6 - RGB - PROCESS - 55 - 69 - 84 - - - New Color Swatch 10 - RGB - PROCESS - 216 - 162 - 116 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:319c397a3b6b3d6a0e0f8615566e390e5098de774bc76dc7b49c7b2a9d05ec75 +size 102573 diff --git a/fastplotlib/assets/icon.png b/fastplotlib/assets/icon.png new file mode 100644 index 000000000..fe69c6e78 --- /dev/null +++ b/fastplotlib/assets/icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64a430cb16fd742f2f6b2137b2f8d8afcf5cac4ece5664fed5694f43f72f5ae9 +size 93740 From 1d027a60f21df3c67558ddcac0d656278af8b75c Mon Sep 17 00:00:00 2001 From: Flynn OConnell Date: Mon, 22 Dec 2025 10:44:33 -0500 Subject: [PATCH 05/13] clean doc title "fastplotlib" --- docs/source/index.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index c44f4e3a8..194248679 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,5 +1,5 @@ -Welcome to fastplotlib's documentation! -======================================= +fastplotlib +=========== .. toctree:: :caption: Getting started From 13699ac7a5effdfa034fff47b8f5381e1314d89a Mon Sep 17 00:00:00 2001 From: Flynn OConnell Date: Mon, 22 Dec 2025 10:45:10 -0500 Subject: [PATCH 06/13] fix html title with custom.js --- docs/source/_static/custom.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/source/_static/custom.js diff --git a/docs/source/_static/custom.js b/docs/source/_static/custom.js new file mode 100644 index 000000000..4d0812b50 --- /dev/null +++ b/docs/source/_static/custom.js @@ -0,0 +1 @@ +document.title = "fastplotlib | Next gen plotting library"; From 14a0ab7337f5fbb3b25152419a08e783a6e33066 Mon Sep 17 00:00:00 2001 From: Flynn OConnell Date: Mon, 22 Dec 2025 10:45:21 -0500 Subject: [PATCH 07/13] use light/dark logo --- docs/source/conf.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index f02461a27..59dfa53cb 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -9,13 +9,14 @@ # otherwise fpl tries to select glfw canvas os.environ["WGPU_FORCE_OFFSCREEN"] = "1" -import fastplotlib -from pygfx.utils.gallery_scraper import find_examples_for_gallery -from pathlib import Path import sys -from sphinx_gallery.sorting import ExplicitOrder +from pathlib import Path + import imageio.v3 as iio +from pygfx.utils.gallery_scraper import find_examples_for_gallery +from sphinx_gallery.sorting import ExplicitOrder +import fastplotlib ROOT_DIR = Path(__file__).parents[1].parents[0] # repo root EXAMPLES_DIR = Path.joinpath(ROOT_DIR, "examples") @@ -112,14 +113,19 @@ "name": "Github", "url": "https://github.com/fastplotlib/fastplotlib", "icon": "fa-brands fa-github", - } + }, ], + "logo": { + "image_light": "_static/logo-light.png", + "image_dark": "_static/logo-dark.png", + }, } html_static_path = ["_static"] +html_js_files = ["custom.js"] html_logo = "_static/logo.png" html_favicon = "_static/favicon.ico" -html_title = "fastplotlib | Next-gen plotting library" +html_title = "" autodoc_member_order = "groupwise" autoclass_content = "both" From 13fc9731e6e499779777d7f8bf3303981a6275b2 Mon Sep 17 00:00:00 2001 From: Flynn OConnell Date: Mon, 22 Dec 2025 10:46:11 -0500 Subject: [PATCH 08/13] add dark/light logos to lfs --- docs/source/_static/logo-dark.png | 3 +++ docs/source/_static/logo-dark.svg | 3 +++ docs/source/_static/logo-light.png | 3 +++ 3 files changed, 9 insertions(+) create mode 100644 docs/source/_static/logo-dark.png create mode 100644 docs/source/_static/logo-dark.svg create mode 100644 docs/source/_static/logo-light.png diff --git a/docs/source/_static/logo-dark.png b/docs/source/_static/logo-dark.png new file mode 100644 index 000000000..4c2eaec42 --- /dev/null +++ b/docs/source/_static/logo-dark.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e09c2e4118465cb453a85d079753df6fa9f09ce7075ec544ec889702d502ddf0 +size 27800 diff --git a/docs/source/_static/logo-dark.svg b/docs/source/_static/logo-dark.svg new file mode 100644 index 000000000..dbdeb0966 --- /dev/null +++ b/docs/source/_static/logo-dark.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2408766dc0a5fa78058b3d20be251e2b4a89467961d8868bc3f8e5c97a287dc +size 102573 diff --git a/docs/source/_static/logo-light.png b/docs/source/_static/logo-light.png new file mode 100644 index 000000000..1ec5ff88d --- /dev/null +++ b/docs/source/_static/logo-light.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56c64203c133ce1cc3f4098ea76ad5ba6b5cff1a5437ce528311dd6caec7cced +size 137447 From 11dd421cd9cc06fe2f28d837203284b8da74088e Mon Sep 17 00:00:00 2001 From: Flynn OConnell Date: Mon, 22 Dec 2025 10:49:26 -0500 Subject: [PATCH 09/13] update dark-logo to be the same size as original --- docs/source/_static/logo-dark.png | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/_static/logo-dark.png b/docs/source/_static/logo-dark.png index 4c2eaec42..65de6d3a2 100644 --- a/docs/source/_static/logo-dark.png +++ b/docs/source/_static/logo-dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e09c2e4118465cb453a85d079753df6fa9f09ce7075ec544ec889702d502ddf0 -size 27800 +oid sha256:ee353c37c9fecccf3ba83fa744fc69330dc992bd63426512a25f4c5a8ab1db7e +size 154582 From 79217fd01ab5cb1764f5b98e4276af5e482132ce Mon Sep 17 00:00:00 2001 From: Flynn OConnell Date: Mon, 22 Dec 2025 11:11:55 -0500 Subject: [PATCH 10/13] html title just "fastplotlib" to fit in tab --- docs/source/_static/custom.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/_static/custom.js b/docs/source/_static/custom.js index 4d0812b50..e3221559b 100644 --- a/docs/source/_static/custom.js +++ b/docs/source/_static/custom.js @@ -1 +1 @@ -document.title = "fastplotlib | Next gen plotting library"; +document.title = "fastplotlib"; From e329e8827818cc329ff4d1936de80cbd11752aef Mon Sep 17 00:00:00 2001 From: Flynn OConnell Date: Mon, 22 Dec 2025 12:20:09 -0500 Subject: [PATCH 11/13] icon working for glfw, not qt --- fastplotlib/layouts/_figure.py | 49 ++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/fastplotlib/layouts/_figure.py b/fastplotlib/layouts/_figure.py index 8fd5dc666..844627a76 100644 --- a/fastplotlib/layouts/_figure.py +++ b/fastplotlib/layouts/_figure.py @@ -674,6 +674,7 @@ def show( elif self.canvas.__class__.__name__ == "QRenderCanvas": self._output = self.canvas self._output.show() + self._set_window_icon() # set after show for Qt return self.canvas elif self.canvas.__class__.__name__ == "OffscreenRenderCanvas": @@ -692,6 +693,7 @@ def show( else: # assume GLFW self._output = self.canvas + self._set_window_icon() # return the canvas return self._output @@ -701,6 +703,53 @@ def close(self): if self._sidecar: self._sidecar.close() + def _set_window_icon(self): + """Set the window icon based on canvas type.""" + icon_path = Path(__file__).parent.parent / "assets" / "icon.png" + if not icon_path.exists(): + return + + canvas_name = self.canvas.__class__.__name__ + + if canvas_name == "QRenderCanvas": + self._set_icon_qt(icon_path) + elif canvas_name == "GlfwRenderCanvas": + self._set_icon_glfw(icon_path) + # jupyter, offscreen, etc. don't have window icons + + def _set_icon_glfw(self, icon_path: Path): + """Set window icon for GLFW backend.""" + try: + import glfw + from PIL import Image + except ImportError: + return + + if not hasattr(self.canvas, "_window"): + return + + img = Image.open(icon_path).convert("RGBA") + pixels = np.array(img) + glfw.set_window_icon(self.canvas._window, 1, [(img.width, img.height, pixels)]) + + def _set_icon_qt(self, icon_path: Path): + """Set window icon for Qt backend.""" + try: + from qtpy.QtGui import QIcon + from qtpy.QtWidgets import QApplication + except ImportError: + return + + icon = QIcon(str(icon_path)) + + app = QApplication.instance() + if app is not None: + app.setWindowIcon(icon) + + window = self.canvas.window() + if window is not None: + window.setWindowIcon(icon) + def _call_animate_functions(self, funcs: list[callable]): for fn in funcs: try: From 84fc723ddc2d30e30ed1310050531e11f35dc30b Mon Sep 17 00:00:00 2001 From: Flynn OConnell Date: Tue, 23 Dec 2025 13:27:58 -0500 Subject: [PATCH 12/13] move icon functions to _utils, implement in make_canvas_and_renderer --- fastplotlib/layouts/_figure.py | 49 ------------------------------- fastplotlib/layouts/_utils.py | 53 ++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 49 deletions(-) diff --git a/fastplotlib/layouts/_figure.py b/fastplotlib/layouts/_figure.py index 844627a76..8fd5dc666 100644 --- a/fastplotlib/layouts/_figure.py +++ b/fastplotlib/layouts/_figure.py @@ -674,7 +674,6 @@ def show( elif self.canvas.__class__.__name__ == "QRenderCanvas": self._output = self.canvas self._output.show() - self._set_window_icon() # set after show for Qt return self.canvas elif self.canvas.__class__.__name__ == "OffscreenRenderCanvas": @@ -693,7 +692,6 @@ def show( else: # assume GLFW self._output = self.canvas - self._set_window_icon() # return the canvas return self._output @@ -703,53 +701,6 @@ def close(self): if self._sidecar: self._sidecar.close() - def _set_window_icon(self): - """Set the window icon based on canvas type.""" - icon_path = Path(__file__).parent.parent / "assets" / "icon.png" - if not icon_path.exists(): - return - - canvas_name = self.canvas.__class__.__name__ - - if canvas_name == "QRenderCanvas": - self._set_icon_qt(icon_path) - elif canvas_name == "GlfwRenderCanvas": - self._set_icon_glfw(icon_path) - # jupyter, offscreen, etc. don't have window icons - - def _set_icon_glfw(self, icon_path: Path): - """Set window icon for GLFW backend.""" - try: - import glfw - from PIL import Image - except ImportError: - return - - if not hasattr(self.canvas, "_window"): - return - - img = Image.open(icon_path).convert("RGBA") - pixels = np.array(img) - glfw.set_window_icon(self.canvas._window, 1, [(img.width, img.height, pixels)]) - - def _set_icon_qt(self, icon_path: Path): - """Set window icon for Qt backend.""" - try: - from qtpy.QtGui import QIcon - from qtpy.QtWidgets import QApplication - except ImportError: - return - - icon = QIcon(str(icon_path)) - - app = QApplication.instance() - if app is not None: - app.setWindowIcon(icon) - - window = self.canvas.window() - if window is not None: - window.setWindowIcon(icon) - def _call_animate_functions(self, funcs: list[callable]): for fn in funcs: try: diff --git a/fastplotlib/layouts/_utils.py b/fastplotlib/layouts/_utils.py index 49120c71a..6dd9681c1 100644 --- a/fastplotlib/layouts/_utils.py +++ b/fastplotlib/layouts/_utils.py @@ -1,5 +1,6 @@ import importlib from itertools import product +from pathlib import Path import numpy as np @@ -8,6 +9,8 @@ from ..utils.gui import BaseRenderCanvas, RenderCanvas +ICON_PATH = Path(__file__).parent.parent / "assets" / "icon.png" + try: import imgui_bundle except ImportError: @@ -50,6 +53,8 @@ def make_canvas_and_renderer( f"renderer option must be a pygfx.Renderer instance such as pygfx.WgpuRenderer" ) + _set_window_icon(canvas) + return canvas, renderer @@ -123,3 +128,51 @@ def get_extents_from_grid( extents.append(extent) return extents + + +def _set_window_icon(canvas) -> None: + """Set the window icon based on canvas type.""" + if not ICON_PATH.exists(): + return + + canvas_name = canvas.__class__.__name__ + + if canvas_name == "QRenderCanvas": + _set_icon_qt(canvas) + elif canvas_name == "GlfwRenderCanvas": + _set_icon_glfw(canvas) + + +def _set_icon_glfw(canvas) -> None: + """Set window icon for GLFW backend.""" + try: + import glfw + from PIL import Image + except ImportError: + return + + if not hasattr(canvas, "_window"): + return + + img = Image.open(ICON_PATH).convert("RGBA") + pixels = np.array(img) + glfw.set_window_icon(canvas._window, 1, [(img.width, img.height, pixels)]) + + +def _set_icon_qt(canvas) -> None: + """Set window icon for Qt backend.""" + try: + from qtpy.QtGui import QIcon + from qtpy.QtWidgets import QApplication + except ImportError: + return + + icon = QIcon(str(ICON_PATH)) + + app = QApplication.instance() + if app is not None: + app.setWindowIcon(icon) + + window = canvas.window() + if window is not None: + window.setWindowIcon(icon) From 52bac864cfca2fc27c97687caa2a42085829a505 Mon Sep 17 00:00:00 2001 From: Flynn OConnell Date: Wed, 31 Dec 2025 14:29:09 -0800 Subject: [PATCH 13/13] add fpl assets, set icon for all top level widgets --- docs/source/_static/logo-dark.png | 4 ++-- docs/source/_static/logo-dark.svg | 4 ++-- docs/source/_static/logo-light.svg | 3 +++ docs/source/_static/parrot-icon.png | 4 ++-- docs/source/_static/parrot-icon.svg | 4 ++-- docs/source/fastplotlib_logo.svg | 4 ++-- fastplotlib/assets/fastplotlib_face_logo.png | 4 ++-- fastplotlib/assets/icon.png | 4 ++-- fastplotlib/layouts/_utils.py | 5 ++--- 9 files changed, 19 insertions(+), 17 deletions(-) create mode 100644 docs/source/_static/logo-light.svg diff --git a/docs/source/_static/logo-dark.png b/docs/source/_static/logo-dark.png index 65de6d3a2..e7feb594d 100644 --- a/docs/source/_static/logo-dark.png +++ b/docs/source/_static/logo-dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ee353c37c9fecccf3ba83fa744fc69330dc992bd63426512a25f4c5a8ab1db7e -size 154582 +oid sha256:fe0a8b7728808aad9ea8c94bcb33688b74c8c5dc98ac703a4cae7b0ae05bb2dc +size 382172 diff --git a/docs/source/_static/logo-dark.svg b/docs/source/_static/logo-dark.svg index dbdeb0966..3705cc545 100644 --- a/docs/source/_static/logo-dark.svg +++ b/docs/source/_static/logo-dark.svg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d2408766dc0a5fa78058b3d20be251e2b4a89467961d8868bc3f8e5c97a287dc -size 102573 +oid sha256:7a977346536077cbb743eaea921c8461d84ab829be8845aa241e66f13a5a79b6 +size 101969 diff --git a/docs/source/_static/logo-light.svg b/docs/source/_static/logo-light.svg new file mode 100644 index 000000000..77a662996 --- /dev/null +++ b/docs/source/_static/logo-light.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48c3dd368a46e11afcf3dafc8ce3ba24e3798233478ef203699676b3668e443c +size 604967 diff --git a/docs/source/_static/parrot-icon.png b/docs/source/_static/parrot-icon.png index fe69c6e78..a9ea6b494 100644 --- a/docs/source/_static/parrot-icon.png +++ b/docs/source/_static/parrot-icon.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:64a430cb16fd742f2f6b2137b2f8d8afcf5cac4ece5664fed5694f43f72f5ae9 -size 93740 +oid sha256:77bf253a81eae4849d73931d56a6a0fa30685d3b47e4831fb69f7ad99cbecb19 +size 74082 diff --git a/docs/source/_static/parrot-icon.svg b/docs/source/_static/parrot-icon.svg index 2f58b9284..5eb3cf918 100644 --- a/docs/source/_static/parrot-icon.svg +++ b/docs/source/_static/parrot-icon.svg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d6c5ba1d7f8fbba58569e138f4e8ea2056e324b845c0d8f5da74d94c5a3697e0 -size 94879 +oid sha256:bef636faa272b30d8c16b6336ad961c8cd722cefed249b7b7e6f87b62db78628 +size 99487 diff --git a/docs/source/fastplotlib_logo.svg b/docs/source/fastplotlib_logo.svg index 1ece81f14..77a662996 100644 --- a/docs/source/fastplotlib_logo.svg +++ b/docs/source/fastplotlib_logo.svg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:319c397a3b6b3d6a0e0f8615566e390e5098de774bc76dc7b49c7b2a9d05ec75 -size 102573 +oid sha256:48c3dd368a46e11afcf3dafc8ce3ba24e3798233478ef203699676b3668e443c +size 604967 diff --git a/fastplotlib/assets/fastplotlib_face_logo.png b/fastplotlib/assets/fastplotlib_face_logo.png index a5a8bd90e..a9ea6b494 100644 --- a/fastplotlib/assets/fastplotlib_face_logo.png +++ b/fastplotlib/assets/fastplotlib_face_logo.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:84976200545d143f559b6840a332f3121d58f8d7de8dad7cb8a6d027d854c153 -size 10239 +oid sha256:77bf253a81eae4849d73931d56a6a0fa30685d3b47e4831fb69f7ad99cbecb19 +size 74082 diff --git a/fastplotlib/assets/icon.png b/fastplotlib/assets/icon.png index fe69c6e78..a9ea6b494 100644 --- a/fastplotlib/assets/icon.png +++ b/fastplotlib/assets/icon.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:64a430cb16fd742f2f6b2137b2f8d8afcf5cac4ece5664fed5694f43f72f5ae9 -size 93740 +oid sha256:77bf253a81eae4849d73931d56a6a0fa30685d3b47e4831fb69f7ad99cbecb19 +size 74082 diff --git a/fastplotlib/layouts/_utils.py b/fastplotlib/layouts/_utils.py index 6dd9681c1..6b40b8803 100644 --- a/fastplotlib/layouts/_utils.py +++ b/fastplotlib/layouts/_utils.py @@ -173,6 +173,5 @@ def _set_icon_qt(canvas) -> None: if app is not None: app.setWindowIcon(icon) - window = canvas.window() - if window is not None: - window.setWindowIcon(icon) + for window in app.topLevelWidgets(): + window.setWindowIcon(icon)