This commit is contained in:
2026-03-25 22:03:39 +01:00
parent a0073b4fb1
commit faf4ca10c9
5603 changed files with 1030866 additions and 79 deletions

View File

@@ -1,8 +1,12 @@
"""Generate the app icon: green rounded square with a modern music note."""
"""Generate the app icon: olive-green rounded square with a single elegant note."""
import struct
import zlib
import math
import os
BG_R, BG_G, BG_B = 124, 154, 60
def create_icon():
sizes = [16, 32, 48, 64, 128, 256]
images = []
@@ -14,17 +18,13 @@ def create_icon():
def _render(size):
"""Render a green rounded-square with a music note as RGBA pixels."""
"""Render an olive-green rounded-square with a single music note."""
pixels = bytearray(size * size * 4)
cx, cy = size / 2, size / 2
r = size * 0.42
corner = size * 0.22
for y in range(size):
for x in range(size):
i = (y * size + x) * 4
dx = x - cx
dy = y - cy
inside = _rounded_rect(x, y, size, corner)
@@ -32,29 +32,29 @@ def _render(size):
nr, ng, nb, na = _note_pixel(x, y, size)
if na > 0:
pixels[i] = nr
pixels[i+1] = ng
pixels[i+2] = nb
pixels[i+3] = na
pixels[i + 1] = ng
pixels[i + 2] = nb
pixels[i + 3] = na
else:
pixels[i] = 29
pixels[i+1] = 185
pixels[i+2] = 84
pixels[i+3] = 255
pixels[i] = BG_R
pixels[i + 1] = BG_G
pixels[i + 2] = BG_B
pixels[i + 3] = 255
elif inside > 0:
a = int(inside * 255)
nr, ng, nb, na = _note_pixel(x, y, size)
if na > 0:
pixels[i] = nr
pixels[i+1] = ng
pixels[i+2] = nb
pixels[i+3] = min(255, int(na * inside))
pixels[i + 1] = ng
pixels[i + 2] = nb
pixels[i + 3] = min(255, int(na * inside))
else:
pixels[i] = 29
pixels[i+1] = 185
pixels[i+2] = 84
pixels[i+3] = a
pixels[i] = BG_R
pixels[i + 1] = BG_G
pixels[i + 2] = BG_B
pixels[i + 3] = a
else:
pixels[i:i+4] = b'\x00\x00\x00\x00'
pixels[i:i + 4] = b'\x00\x00\x00\x00'
return bytes(pixels)
@@ -98,54 +98,61 @@ def _rounded_rect(x, y, size, corner):
def _note_pixel(x, y, size):
"""Draw a modern double-beamed music note (two note heads + beam)."""
"""Draw a single elegant eighth note (quaver)."""
s = size
white = (255, 255, 255, 240)
white = (255, 255, 255, 235)
head1_cx = s * 0.33
head1_cy = s * 0.68
head2_cx = s * 0.60
head2_cy = s * 0.75
# --- Note head: tilted filled ellipse ---
hcx = s * 0.44
hcy = s * 0.71
hrx = s * 0.14
hry = s * 0.09
tilt = -0.45
head_rx = s * 0.10
head_ry = s * 0.07
ca, sa = math.cos(tilt), math.sin(tilt)
dx, dy = x - hcx, y - hcy
u = (dx * ca + dy * sa) / hrx
v = (-dx * sa + dy * ca) / hry
d2 = u * u + v * v
dx1 = (x - head1_cx) / head_rx
dy1 = (y - head1_cy) / head_ry
if dx1 * dx1 + dy1 * dy1 <= 1.0:
if d2 <= 1.0:
return white
if d2 <= 1.25:
alpha = max(0, int(235 * (1.25 - d2) / 0.25))
if alpha > 10:
return (255, 255, 255, alpha)
# --- Stem: thin vertical line from head to top ---
stem_x = hcx + hrx * ca
stem_hw = max(0.6, s * 0.018)
stem_top = s * 0.19
stem_bot = hcy - hry * 0.15
if stem_top <= y <= stem_bot and abs(x - stem_x) <= stem_hw:
edge = stem_hw - abs(x - stem_x)
if edge < 1.0:
return (255, 255, 255, max(0, int(235 * edge)))
return white
dx2 = (x - head2_cx) / head_rx
dy2 = (y - head2_cy) / head_ry
if dx2 * dx2 + dy2 * dy2 <= 1.0:
return white
# --- Flag: elegant curved shape at top of stem ---
ft = stem_top
fh = s * 0.32
fb = ft + fh
fw = s * 0.19
stem_w = max(1, s * 0.04)
stem1_x = head1_cx + head_rx - stem_w / 2
stem2_x = head2_cx + head_rx - stem_w / 2
if ft <= y <= fb and x >= stem_x - stem_hw:
t = (y - ft) / fh
bulge = fw * math.sin(t * math.pi * 0.82) * ((1 - t) ** 0.65)
right_edge = stem_x + stem_hw + bulge
stem_top = s * 0.22
stem1_bot = head1_cy
stem2_bot = head2_cy
if (abs(x - stem1_x) <= stem_w and stem_top <= y <= stem1_bot):
return white
if (abs(x - stem2_x) <= stem_w and stem_top + s * 0.07 <= y <= stem2_bot):
return white
beam_h = max(1, s * 0.045)
for bi, beam_y_base in enumerate([stem_top, stem_top + beam_h * 2.5]):
left_x = stem1_x
right_x = stem2_x
left_y = beam_y_base
right_y = beam_y_base + s * 0.07
if left_x <= x <= right_x:
t = (x - left_x) / max(1, right_x - left_x)
beam_top = left_y + t * (right_y - left_y)
beam_bot = beam_top + beam_h
if beam_top <= y <= beam_bot:
return white
if x <= right_edge:
edge_dist = right_edge - x
if edge_dist < 1.2 and bulge > stem_hw:
alpha = max(0, int(235 * edge_dist / 1.2))
if alpha > 10:
return (255, 255, 255, alpha)
return (0, 0, 0, 0)
return white
return (0, 0, 0, 0)