morgan pushed to branch tor-browser-140.1.0esr-15.0-1 at The Tor Project / Applications / Tor Browser
Commits:
-
7b5671e7
by Henry Wilkes at 2025-07-31T11:09:17+00:00
-
3ece2e83
by Henry Wilkes at 2025-07-31T11:09:17+00:00
7 changed files:
- browser/components/torpreferences/content/torPreferences.css
- toolkit/themes/shared/desktop-jar.inc.mn
- − toolkit/themes/shared/icons/tor-dark-loading.png
- − toolkit/themes/shared/icons/tor-dark-loading@2x.png
- − toolkit/themes/shared/icons/tor-light-loading.png
- − toolkit/themes/shared/icons/tor-light-loading@2x.png
- − tools/torbrowser/generate_tor_loading_png.py
Changes:
... | ... | @@ -19,19 +19,9 @@ button.spoof-button-disabled { |
19 | 19 | .tor-loading-icon {
|
20 | 20 | width: 16px;
|
21 | 21 | height: 16px;
|
22 | - content: image-set(
|
|
23 | - url("chrome://global/skin/icons/tor-light-loading.png"),
|
|
24 | - url("chrome://global/skin/icons/tor-light-loading@2x.png") 2x
|
|
25 | - );
|
|
26 | -}
|
|
27 | - |
|
28 | -@media (prefers-color-scheme: dark) {
|
|
29 | - .tor-loading-icon {
|
|
30 | - content: image-set(
|
|
31 | - url("chrome://global/skin/icons/tor-dark-loading.png"),
|
|
32 | - url("chrome://global/skin/icons/tor-dark-loading@2x.png") 2x
|
|
33 | - );
|
|
34 | - }
|
|
22 | + -moz-context-properties: fill;
|
|
23 | + fill: var(--tor-accent-color);
|
|
24 | + content: url("chrome://global/skin/icons/loading.svg");
|
|
35 | 25 | }
|
36 | 26 | |
37 | 27 | .tor-toggle {
|
... | ... | @@ -121,10 +121,6 @@ |
121 | 121 | skin/classic/global/icons/security-warning.svg (../../shared/icons/security-warning.svg)
|
122 | 122 | skin/classic/global/icons/settings.svg (../../shared/icons/settings.svg)
|
123 | 123 | skin/classic/global/icons/sort-arrow.svg (../../shared/icons/sort-arrow.svg)
|
124 | - skin/classic/global/icons/tor-light-loading.png (../../shared/icons/tor-light-loading.png)
|
|
125 | - skin/classic/global/icons/tor-light-loading@2x.png (../../shared/icons/tor-light-loading@2x.png)
|
|
126 | - skin/classic/global/icons/tor-dark-loading.png (../../shared/icons/tor-dark-loading.png)
|
|
127 | - skin/classic/global/icons/tor-dark-loading@2x.png (../../shared/icons/tor-dark-loading@2x.png)
|
|
128 | 124 | skin/classic/global/icons/trending.svg (../../shared/icons/trending.svg)
|
129 | 125 | skin/classic/global/icons/trophy.svg (../../shared/icons/trophy.svg)
|
130 | 126 | skin/classic/global/icons/thumbs-down-20.svg (../../shared/icons/thumbs-down-20.svg)
|
1 | -"""
|
|
2 | -Script to convert the loading.png and loading@2x.png blue spinners to purple
|
|
3 | -spinners for Tor Browser, for both the light and dark themes.
|
|
4 | -"""
|
|
5 | - |
|
6 | -import argparse
|
|
7 | -import colorsys
|
|
8 | -import os
|
|
9 | - |
|
10 | -from PIL import ExifTags, Image, ImageFilter
|
|
11 | - |
|
12 | -parser = argparse.ArgumentParser(description="Convert the loading APNG to be purple.")
|
|
13 | -parser.add_argument("loading_png", help="The loading png to convert")
|
|
14 | -parser.add_argument(
|
|
15 | - "--light", required=True, help="The name of the light-theme purple output image"
|
|
16 | -)
|
|
17 | -parser.add_argument(
|
|
18 | - "--dark", required=True, help="The name of the dark-theme purple output image"
|
|
19 | -)
|
|
20 | - |
|
21 | -parsed_args = parser.parse_args()
|
|
22 | - |
|
23 | -orig_im = Image.open(parsed_args.loading_png)
|
|
24 | - |
|
25 | - |
|
26 | -def filter_to_light_theme(r, g, b):
|
|
27 | - h, s, v = colorsys.rgb_to_hsv(r, g, b)
|
|
28 | - # Convert from HSV 0.58, 1.0, 255 (start of the circle)
|
|
29 | - # to --purple-60 #8000d7 HSV 0.766, 1.0, 215
|
|
30 | - h = 0.766
|
|
31 | - v = v * 215 / 255
|
|
32 | - return colorsys.hsv_to_rgb(h, s, v)
|
|
33 | - |
|
34 | - |
|
35 | -def filter_to_dark_theme(r, g, b):
|
|
36 | - h, s, v = colorsys.rgb_to_hsv(r, g, b)
|
|
37 | - # Convert from HSV 0.58, 1.0, 255 (start of the circle)
|
|
38 | - # to --purple-30 #c069ff HSV 0.766, 0.59, 255
|
|
39 | - h = 0.766
|
|
40 | - s = s * 0.59 / 1.0
|
|
41 | - return colorsys.hsv_to_rgb(h, s, v)
|
|
42 | - |
|
43 | - |
|
44 | -filt_light = ImageFilter.Color3DLUT.generate(65, filter_to_light_theme)
|
|
45 | -filt_dark = ImageFilter.Color3DLUT.generate(65, filter_to_dark_theme)
|
|
46 | - |
|
47 | -transformed_light = []
|
|
48 | -transformed_dark = []
|
|
49 | -duration = orig_im.info["duration"]
|
|
50 | - |
|
51 | -# Transform each APNG frame individually.
|
|
52 | -for frame in range(orig_im.n_frames):
|
|
53 | - orig_im.seek(frame)
|
|
54 | - transformed_light.append(orig_im.filter(filt_light))
|
|
55 | - transformed_dark.append(orig_im.filter(filt_dark))
|
|
56 | - |
|
57 | -exif = Image.Exif()
|
|
58 | -exif[ExifTags.Base.ImageDescription] = f"Generated by {os.path.basename(__file__)}"
|
|
59 | - |
|
60 | -transformed_light[0].save(
|
|
61 | - parsed_args.light,
|
|
62 | - save_all=True,
|
|
63 | - append_images=transformed_light[1:],
|
|
64 | - duration=duration,
|
|
65 | - exif=exif,
|
|
66 | -)
|
|
67 | - |
|
68 | -transformed_dark[0].save(
|
|
69 | - parsed_args.dark,
|
|
70 | - save_all=True,
|
|
71 | - append_images=transformed_dark[1:],
|
|
72 | - duration=duration,
|
|
73 | - exif=exif,
|
|
74 | -) |