diff --git a/android/README.md b/android/README.md index 189d1a1..1e7a5f5 100644 --- a/android/README.md +++ b/android/README.md @@ -3,7 +3,6 @@ This is the native Android app for Ascently, built with Kotlin and Jetpack Compose. ## Project Structure - This is a standard Android Gradle project. The main code lives in `app/src/main/java/com/atridad/ascently/`. - `data/`: Handles all the app's data. diff --git a/android/app/src/main/ic_launcher-playstore.png b/android/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..714b2b6 Binary files /dev/null and b/android/app/src/main/ic_launcher-playstore.png differ diff --git a/android/app/src/main/res/drawable/ic_launcher_background.xml b/android/app/src/main/res/drawable/ic_launcher_background.xml index 8da4ecd..ca3826a 100644 --- a/android/app/src/main/res/drawable/ic_launcher_background.xml +++ b/android/app/src/main/res/drawable/ic_launcher_background.xml @@ -1,11 +1,74 @@ - - - - - \ No newline at end of file + xmlns:android="http://schemas.android.com/apk/res/android"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..036d09b --- /dev/null +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..036d09b --- /dev/null +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-anydpi/ic_launcher.xml b/android/app/src/main/res/mipmap-anydpi/ic_launcher.xml deleted file mode 100644 index 6f3b755..0000000 --- a/android/app/src/main/res/mipmap-anydpi/ic_launcher.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml b/android/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml deleted file mode 100644 index 6f3b755..0000000 --- a/android/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp index aba03b3..ba4181e 100644 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..1c7b566 Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp index a73d913..58ccfe0 100644 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp index 1a12bfd..e848385 100644 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..82ded66 Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp index 3a35b27..1e8ce94 100644 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp index e0948ae..6b99d49 100644 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..d260bb9 Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp index f596768..a863f3a 100644 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp index 6578191..e767229 100644 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..660ad30 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp index 638bb59..391ff3b 100644 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp index b082694..cb864e4 100644 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..d979695 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp index b0c4782..d626274 100644 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/android/app/src/main/res/values/ic_launcher_background.xml b/android/app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000..beab31f --- /dev/null +++ b/android/app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #000000 + \ No newline at end of file diff --git a/branding/.gitignore b/branding/.gitignore deleted file mode 100644 index 59360ce..0000000 --- a/branding/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -*.tmp -.DS_Store -*.log diff --git a/branding/Android/Icon-Android-Default-1024x1024@1x.png b/branding/Android/Icon-Android-Default-1024x1024@1x.png new file mode 100644 index 0000000..29ee1b2 Binary files /dev/null and b/branding/Android/Icon-Android-Default-1024x1024@1x.png differ diff --git a/branding/Balls.icon/Assets/AscentlyBlueBall.png b/branding/Balls.icon/Assets/AscentlyBlueBall.png new file mode 100644 index 0000000..cecb942 Binary files /dev/null and b/branding/Balls.icon/Assets/AscentlyBlueBall.png differ diff --git a/branding/Balls.icon/Assets/AscentlyGreenBall.png b/branding/Balls.icon/Assets/AscentlyGreenBall.png new file mode 100644 index 0000000..64e8a09 Binary files /dev/null and b/branding/Balls.icon/Assets/AscentlyGreenBall.png differ diff --git a/branding/Balls.icon/Assets/AscentlyRedBall.png b/branding/Balls.icon/Assets/AscentlyRedBall.png new file mode 100644 index 0000000..83a444e Binary files /dev/null and b/branding/Balls.icon/Assets/AscentlyRedBall.png differ diff --git a/branding/Balls.icon/Assets/AscentlyYellowBall.png b/branding/Balls.icon/Assets/AscentlyYellowBall.png new file mode 100644 index 0000000..9682362 Binary files /dev/null and b/branding/Balls.icon/Assets/AscentlyYellowBall.png differ diff --git a/branding/Balls.icon/icon.json b/branding/Balls.icon/icon.json new file mode 100644 index 0000000..17433ed --- /dev/null +++ b/branding/Balls.icon/icon.json @@ -0,0 +1,67 @@ +{ + "fill" : "automatic", + "groups" : [ + { + "layers" : [ + { + "image-name" : "AscentlyRedBall.png", + "name" : "AscentlyRedBall", + "position" : { + "scale" : 0.4, + "translation-in-points" : [ + 90.60312499999992, + 127.86484375000009 + ] + } + }, + { + "image-name" : "AscentlyYellowBall.png", + "name" : "AscentlyYellowBall", + "position" : { + "scale" : 0.3, + "translation-in-points" : [ + 90.50312500000001, + -177.66484375 + ] + } + }, + { + "image-name" : "AscentlyBlueBall.png", + "name" : "AscentlyBlueBall", + "position" : { + "scale" : 0.3, + "translation-in-points" : [ + -138.20312500000006, + 177.3648437500001 + ] + } + }, + { + "image-name" : "AscentlyGreenBall.png", + "name" : "AscentlyGreenBall", + "position" : { + "scale" : 0.2, + "translation-in-points" : [ + -138.30312499999997, + -43.08515625000001 + ] + } + } + ], + "shadow" : { + "kind" : "neutral", + "opacity" : 0.5 + }, + "translucency" : { + "enabled" : true, + "value" : 0.5 + } + } + ], + "supported-platforms" : { + "circles" : [ + "watchOS" + ], + "squares" : "shared" + } +} \ No newline at end of file diff --git a/branding/Icon.icon/Assets/AscetlyTriangle1.png b/branding/Icon.icon/Assets/AscetlyTriangle1.png new file mode 100644 index 0000000..bde2a56 Binary files /dev/null and b/branding/Icon.icon/Assets/AscetlyTriangle1.png differ diff --git a/branding/Icon.icon/Assets/AscetlyTriangle2.png b/branding/Icon.icon/Assets/AscetlyTriangle2.png new file mode 100644 index 0000000..544a1e9 Binary files /dev/null and b/branding/Icon.icon/Assets/AscetlyTriangle2.png differ diff --git a/branding/Icon.icon/icon.json b/branding/Icon.icon/icon.json new file mode 100644 index 0000000..2d90f1c --- /dev/null +++ b/branding/Icon.icon/icon.json @@ -0,0 +1,45 @@ +{ + "fill" : "automatic", + "groups" : [ + { + "layers" : [ + { + "image-name" : "AscetlyTriangle2.png", + "name" : "AscetlyTriangle2", + "position" : { + "scale" : 0.75, + "translation-in-points" : [ + 108, + -53.8125 + ] + } + }, + { + "image-name" : "AscetlyTriangle1.png", + "name" : "AscetlyTriangle1", + "position" : { + "scale" : 0.5, + "translation-in-points" : [ + -215, + 39.9375 + ] + } + } + ], + "shadow" : { + "kind" : "neutral", + "opacity" : 0.5 + }, + "translucency" : { + "enabled" : true, + "value" : 0.5 + } + } + ], + "supported-platforms" : { + "circles" : [ + "watchOS" + ], + "squares" : "shared" + } +} \ No newline at end of file diff --git a/branding/Photomator Files/AscentlyBlueBall.pxd b/branding/Photomator Files/AscentlyBlueBall.pxd new file mode 100644 index 0000000..24612fb Binary files /dev/null and b/branding/Photomator Files/AscentlyBlueBall.pxd differ diff --git a/branding/Photomator Files/AscentlyGreenBall.pxd b/branding/Photomator Files/AscentlyGreenBall.pxd new file mode 100644 index 0000000..8103c26 Binary files /dev/null and b/branding/Photomator Files/AscentlyGreenBall.pxd differ diff --git a/branding/Photomator Files/AscentlyRedBall.pxd b/branding/Photomator Files/AscentlyRedBall.pxd new file mode 100644 index 0000000..e56dfb7 Binary files /dev/null and b/branding/Photomator Files/AscentlyRedBall.pxd differ diff --git a/branding/Photomator Files/AscentlyYellowBall.pxd b/branding/Photomator Files/AscentlyYellowBall.pxd new file mode 100644 index 0000000..b16db8f Binary files /dev/null and b/branding/Photomator Files/AscentlyYellowBall.pxd differ diff --git a/branding/Photomator Files/Ascently_Phone_1.pxd b/branding/Photomator Files/Ascently_Phone_1.pxd new file mode 100644 index 0000000..6657135 Binary files /dev/null and b/branding/Photomator Files/Ascently_Phone_1.pxd differ diff --git a/branding/Photomator Files/Ascently_Phone_2.pxd b/branding/Photomator Files/Ascently_Phone_2.pxd new file mode 100644 index 0000000..59af62a Binary files /dev/null and b/branding/Photomator Files/Ascently_Phone_2.pxd differ diff --git a/branding/Photomator Files/Ascently_Phone_3.pxd b/branding/Photomator Files/Ascently_Phone_3.pxd new file mode 100644 index 0000000..8afaeee Binary files /dev/null and b/branding/Photomator Files/Ascently_Phone_3.pxd differ diff --git a/branding/Photomator Files/AscetlyTriangle1.pxd b/branding/Photomator Files/AscetlyTriangle1.pxd new file mode 100644 index 0000000..b54f868 Binary files /dev/null and b/branding/Photomator Files/AscetlyTriangle1.pxd differ diff --git a/branding/Photomator Files/AscetlyTriangle2.pxd b/branding/Photomator Files/AscetlyTriangle2.pxd new file mode 100644 index 0000000..3b0d27d Binary files /dev/null and b/branding/Photomator Files/AscetlyTriangle2.pxd differ diff --git a/branding/Photomator Files/PeaksAndroid.pxd b/branding/Photomator Files/PeaksAndroid.pxd new file mode 100644 index 0000000..2b4f19d Binary files /dev/null and b/branding/Photomator Files/PeaksAndroid.pxd differ diff --git a/branding/generate.py b/branding/generate.py deleted file mode 100755 index c4a2082..0000000 --- a/branding/generate.py +++ /dev/null @@ -1,394 +0,0 @@ -#!/usr/bin/env python3 - -import xml.etree.ElementTree as ET -from pathlib import Path -from typing import Callable, TypedDict -from PIL import Image, ImageDraw - - -class Polygon(TypedDict): - coords: list[tuple[float, float]] - fill: str - - -SCRIPT_DIR = Path(__file__).parent -PROJECT_ROOT = SCRIPT_DIR.parent -SOURCE_DIR = SCRIPT_DIR / "source" -LOGOS_DIR = SCRIPT_DIR / "logos" - - -def parse_svg_polygons(svg_path: Path) -> list[Polygon]: - tree = ET.parse(svg_path) - root = tree.getroot() - - ns = {"svg": "http://www.w3.org/2000/svg"} - polygons = root.findall(".//svg:polygon", ns) - if not polygons: - polygons = root.findall(".//polygon") - - result: list[Polygon] = [] - for poly in polygons: - points_str = poly.get("points", "").strip() - fill = poly.get("fill", "#000000") - - coords: list[tuple[float, float]] = [] - for pair in points_str.split(): - x, y = pair.split(",") - coords.append((float(x), float(y))) - - result.append({"coords": coords, "fill": fill}) - - return result - - -def get_bbox(polygons: list[Polygon]) -> dict[str, float]: - all_coords: list[tuple[float, float]] = [] - for poly in polygons: - all_coords.extend(poly["coords"]) - - xs = [c[0] for c in all_coords] - ys = [c[1] for c in all_coords] - - return { - "min_x": min(xs), - "max_x": max(xs), - "min_y": min(ys), - "max_y": max(ys), - "width": max(xs) - min(xs), - "height": max(ys) - min(ys), - } - - -def scale_and_center( - polygons: list[Polygon], viewbox_size: float, target_width: float -) -> list[Polygon]: - bbox = get_bbox(polygons) - - scale = target_width / bbox["width"] - center = viewbox_size / 2 - - scaled_polys: list[Polygon] = [] - for poly in polygons: - scaled_coords = [(x * scale, y * scale) for x, y in poly["coords"]] - scaled_polys.append({"coords": scaled_coords, "fill": poly["fill"]}) - - scaled_bbox = get_bbox(scaled_polys) - current_center_x = (scaled_bbox["min_x"] + scaled_bbox["max_x"]) / 2 - current_center_y = (scaled_bbox["min_y"] + scaled_bbox["max_y"]) / 2 - - offset_x = center - current_center_x - offset_y = center - current_center_y - - final_polys: list[Polygon] = [] - for poly in scaled_polys: - final_coords = [(x + offset_x, y + offset_y) for x, y in poly["coords"]] - final_polys.append({"coords": final_coords, "fill": poly["fill"]}) - - return final_polys - - -def format_svg_points(coords: list[tuple[float, float]]) -> str: - return " ".join(f"{x:.3f},{y:.3f}" for x, y in coords) - - -def format_android_path(coords: list[tuple[float, float]]) -> str: - points = " ".join(f"{x:.3f},{y:.3f}" for x, y in coords) - pairs = points.split() - return f"M{pairs[0]} L{pairs[1]} L{pairs[2]} Z" - - -def generate_svg(polygons: list[Polygon], width: int, height: int) -> str: - lines = [ - f'' - ] - for poly in polygons: - points = format_svg_points(poly["coords"]) - lines.append(f' ') - lines.append("") - return "\n".join(lines) - - -def generate_android_vector( - polygons: list[Polygon], width: int, height: int, viewbox: int -) -> str: - lines = [ - '', - '', - ] - for poly in polygons: - path = format_android_path(poly["coords"]) - lines.append( - f' ' - ) - lines.append("") - return "\n".join(lines) - - -def rasterize_svg( - svg_path: Path, - output_path: Path, - size: int, - bg_color: tuple[int, int, int, int] | None = None, - circular: bool = False, -) -> None: - from xml.dom import minidom - - doc = minidom.parse(str(svg_path)) - - img = Image.new( - "RGBA", (size, size), (255, 255, 255, 0) if bg_color is None else bg_color - ) - draw = ImageDraw.Draw(img) - - svg_elem = doc.getElementsByTagName("svg")[0] - viewbox = svg_elem.getAttribute("viewBox").split() - if viewbox: - vb_width = float(viewbox[2]) - vb_height = float(viewbox[3]) - scale_x = size / vb_width - scale_y = size / vb_height - else: - scale_x = scale_y = 1 - - def parse_transform( - transform_str: str, - ) -> Callable[[float, float], tuple[float, float]]: - import re - - if not transform_str: - return lambda x, y: (x, y) - - transforms: list[tuple[str, list[float]]] = [] - for match in re.finditer(r"(\w+)\(([^)]+)\)", transform_str): - func, args_str = match.groups() - args = [float(x) for x in args_str.replace(",", " ").split()] - transforms.append((func, args)) - - def apply_transforms(x: float, y: float) -> tuple[float, float]: - for func, args in transforms: - if func == "translate": - x += args[0] - y += args[1] if len(args) > 1 else args[0] - elif func == "scale": - x *= args[0] - y *= args[1] if len(args) > 1 else args[0] - return x, y - - return apply_transforms - - for g in doc.getElementsByTagName("g"): - transform = parse_transform(g.getAttribute("transform")) - - for poly in g.getElementsByTagName("polygon"): - points_str = poly.getAttribute("points").strip() - fill = poly.getAttribute("fill") - if not fill: - fill = "#000000" - - coords: list[tuple[float, float]] = [] - for pair in points_str.split(): - x, y = pair.split(",") - x, y = float(x), float(y) - x, y = transform(x, y) - coords.append((x * scale_x, y * scale_y)) - - draw.polygon(coords, fill=fill) - - for poly in doc.getElementsByTagName("polygon"): - if poly.parentNode and getattr(poly.parentNode, "tagName", None) == "g": - continue - - points_str = poly.getAttribute("points").strip() - fill = poly.getAttribute("fill") - if not fill: - fill = "#000000" - - coords = [] - for pair in points_str.split(): - x, y = pair.split(",") - coords.append((float(x) * scale_x, float(y) * scale_y)) - - draw.polygon(coords, fill=fill) - - if circular: - mask = Image.new("L", (size, size), 0) - mask_draw = ImageDraw.Draw(mask) - mask_draw.ellipse((0, 0, size, size), fill=255) - img.putalpha(mask) - - img.save(output_path) - - -def main() -> None: - print("Generating branding assets...") - - logo_svg = SOURCE_DIR / "logo.svg" - icon_light = SOURCE_DIR / "icon-light.svg" - icon_dark = SOURCE_DIR / "icon-dark.svg" - icon_tinted = SOURCE_DIR / "icon-tinted.svg" - - polygons = parse_svg_polygons(logo_svg) - - print(" iOS...") - ios_assets = PROJECT_ROOT / "ios/Ascently/Assets.xcassets/AppIcon.appiconset" - - for src, dst in [ - (icon_light, ios_assets / "app_icon_light_template.svg"), - (icon_dark, ios_assets / "app_icon_dark_template.svg"), - (icon_tinted, ios_assets / "app_icon_tinted_template.svg"), - ]: - with open(src) as f: - content = f.read() - with open(dst, "w") as f: - f.write(content) - - img_light = Image.new("RGB", (1024, 1024), (255, 255, 255)) - draw_light = ImageDraw.Draw(img_light) - scaled = scale_and_center(polygons, 1024, int(1024 * 0.7)) - for poly in scaled: - coords = [(x, y) for x, y in poly["coords"]] - draw_light.polygon(coords, fill=poly["fill"]) - img_light.save(ios_assets / "app_icon_1024.png") - - img_dark = Image.new("RGB", (1024, 1024), (26, 26, 26)) - draw_dark = ImageDraw.Draw(img_dark) - for poly in scaled: - coords = [(x, y) for x, y in poly["coords"]] - draw_dark.polygon(coords, fill=poly["fill"]) - img_dark.save(ios_assets / "app_icon_1024_dark.png") - - img_tinted = Image.new("RGB", (1024, 1024), (0, 0, 0)) - draw_tinted = ImageDraw.Draw(img_tinted) - for i, poly in enumerate(scaled): - coords = [(x, y) for x, y in poly["coords"]] - draw_tinted.polygon(coords, fill=(0, 0, 0)) - img_tinted.save(ios_assets / "app_icon_1024_tinted.png") - - print(" Android...") - - polys_108 = scale_and_center(polygons, 108, 60) - android_xml = generate_android_vector(polys_108, 108, 108, 108) - ( - PROJECT_ROOT / "android/app/src/main/res/drawable/ic_launcher_foreground.xml" - ).write_text(android_xml) - - polys_24 = scale_and_center(polygons, 24, 20) - mountains_xml = generate_android_vector(polys_24, 24, 24, 24) - (PROJECT_ROOT / "android/app/src/main/res/drawable/ic_mountains.xml").write_text( - mountains_xml - ) - - for density, size in [ - ("mdpi", 48), - ("hdpi", 72), - ("xhdpi", 96), - ("xxhdpi", 144), - ("xxxhdpi", 192), - ]: - mipmap_dir = PROJECT_ROOT / f"android/app/src/main/res/mipmap-{density}" - - img = Image.new("RGBA", (size, size), (255, 255, 255, 255)) - draw = ImageDraw.Draw(img) - - scaled = scale_and_center(polygons, size, int(size * 0.6)) - for poly in scaled: - coords = [(x, y) for x, y in poly["coords"]] - draw.polygon(coords, fill=poly["fill"]) - - img.save(mipmap_dir / "ic_launcher.webp") - - img_round = Image.new("RGBA", (size, size), (255, 255, 255, 255)) - draw_round = ImageDraw.Draw(img_round) - - for poly in scaled: - coords = [(x, y) for x, y in poly["coords"]] - draw_round.polygon(coords, fill=poly["fill"]) - - mask = Image.new("L", (size, size), 0) - mask_draw = ImageDraw.Draw(mask) - mask_draw.ellipse((0, 0, size, size), fill=255) - img_round.putalpha(mask) - - img_round.save(mipmap_dir / "ic_launcher_round.webp") - - print(" Docs...") - - polys_32 = scale_and_center(polygons, 32, 26) - logo_svg_32 = generate_svg(polys_32, 32, 32) - (PROJECT_ROOT / "docs/src/assets/logo.svg").write_text(logo_svg_32) - (PROJECT_ROOT / "docs/src/assets/logo-dark.svg").write_text(logo_svg_32) - - polys_256 = scale_and_center(polygons, 256, 208) - logo_svg_256 = generate_svg(polys_256, 256, 256) - (PROJECT_ROOT / "docs/src/assets/logo-highres.svg").write_text(logo_svg_256) - - logo_32_path = PROJECT_ROOT / "docs/src/assets/logo.svg" - rasterize_svg(logo_32_path, PROJECT_ROOT / "docs/public/favicon.png", 32) - - sizes = [16, 32, 48] - imgs = [] - for size in sizes: - img = Image.new("RGBA", (size, size), (255, 255, 255, 0)) - draw = ImageDraw.Draw(img) - - scaled = scale_and_center(polygons, size, int(size * 0.8)) - for poly in scaled: - coords = [(x, y) for x, y in poly["coords"]] - draw.polygon(coords, fill=poly["fill"]) - - imgs.append(img) - - imgs[0].save( - PROJECT_ROOT / "docs/public/favicon.ico", - format="ICO", - sizes=[(s, s) for s in sizes], - append_images=imgs[1:], - ) - - print(" Logos...") - - LOGOS_DIR.mkdir(exist_ok=True) - - sizes = [64, 128, 256, 512, 1024, 2048] - for size in sizes: - img = Image.new("RGBA", (size, size), (255, 255, 255, 0)) - draw = ImageDraw.Draw(img) - - scaled = scale_and_center(polygons, size, int(size * 0.8)) - for poly in scaled: - coords = [(x, y) for x, y in poly["coords"]] - draw.polygon(coords, fill=poly["fill"]) - - img.save(LOGOS_DIR / f"logo-{size}.png") - - for size in sizes: - img = Image.new("RGBA", (size, size), (255, 255, 255, 255)) - draw = ImageDraw.Draw(img) - - scaled = scale_and_center(polygons, size, int(size * 0.8)) - for poly in scaled: - coords = [(x, y) for x, y in poly["coords"]] - draw.polygon(coords, fill=poly["fill"]) - - img.save(LOGOS_DIR / f"logo-{size}-white.png") - - for size in sizes: - img = Image.new("RGBA", (size, size), (26, 26, 26, 255)) - draw = ImageDraw.Draw(img) - - scaled = scale_and_center(polygons, size, int(size * 0.8)) - for poly in scaled: - coords = [(x, y) for x, y in poly["coords"]] - draw.polygon(coords, fill=poly["fill"]) - - img.save(LOGOS_DIR / f"logo-{size}-dark.png") - - print("Done.") - - -if __name__ == "__main__": - main() diff --git a/branding/generate.sh b/branding/generate.sh deleted file mode 100755 index 367a571..0000000 --- a/branding/generate.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash - -set -e - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - -if ! command -v python3 &> /dev/null; then - echo "Error: Python 3 required" - exit 1 -fi - -python3 "$SCRIPT_DIR/generate.py" diff --git a/branding/iOS/Icon-iOS-ClearDark-1024x1024@1x.png b/branding/iOS/Icon-iOS-ClearDark-1024x1024@1x.png new file mode 100644 index 0000000..3482913 Binary files /dev/null and b/branding/iOS/Icon-iOS-ClearDark-1024x1024@1x.png differ diff --git a/branding/iOS/Icon-iOS-ClearLight-1024x1024@1x.png b/branding/iOS/Icon-iOS-ClearLight-1024x1024@1x.png new file mode 100644 index 0000000..87be1e6 Binary files /dev/null and b/branding/iOS/Icon-iOS-ClearLight-1024x1024@1x.png differ diff --git a/branding/iOS/Icon-iOS-Dark-1024x1024@1x.png b/branding/iOS/Icon-iOS-Dark-1024x1024@1x.png new file mode 100644 index 0000000..2f658b1 Binary files /dev/null and b/branding/iOS/Icon-iOS-Dark-1024x1024@1x.png differ diff --git a/branding/iOS/Icon-iOS-Default-1024x1024@1x.png b/branding/iOS/Icon-iOS-Default-1024x1024@1x.png new file mode 100644 index 0000000..f2b5a1b Binary files /dev/null and b/branding/iOS/Icon-iOS-Default-1024x1024@1x.png differ diff --git a/branding/iOS/Icon-iOS-TintedDark-1024x1024@1x.png b/branding/iOS/Icon-iOS-TintedDark-1024x1024@1x.png new file mode 100644 index 0000000..b0a75db Binary files /dev/null and b/branding/iOS/Icon-iOS-TintedDark-1024x1024@1x.png differ diff --git a/branding/iOS/Icon-iOS-TintedLight-1024x1024@1x.png b/branding/iOS/Icon-iOS-TintedLight-1024x1024@1x.png new file mode 100644 index 0000000..840be33 Binary files /dev/null and b/branding/iOS/Icon-iOS-TintedLight-1024x1024@1x.png differ diff --git a/branding/logos/logo-1024-dark.png b/branding/logos/logo-1024-dark.png deleted file mode 100644 index aa1368e..0000000 Binary files a/branding/logos/logo-1024-dark.png and /dev/null differ diff --git a/branding/logos/logo-1024-white.png b/branding/logos/logo-1024-white.png deleted file mode 100644 index 3ab7274..0000000 Binary files a/branding/logos/logo-1024-white.png and /dev/null differ diff --git a/branding/logos/logo-1024.png b/branding/logos/logo-1024.png deleted file mode 100644 index 7a55e08..0000000 Binary files a/branding/logos/logo-1024.png and /dev/null differ diff --git a/branding/logos/logo-128-dark.png b/branding/logos/logo-128-dark.png deleted file mode 100644 index 314624b..0000000 Binary files a/branding/logos/logo-128-dark.png and /dev/null differ diff --git a/branding/logos/logo-128-white.png b/branding/logos/logo-128-white.png deleted file mode 100644 index 7040037..0000000 Binary files a/branding/logos/logo-128-white.png and /dev/null differ diff --git a/branding/logos/logo-128.png b/branding/logos/logo-128.png deleted file mode 100644 index 355ab8d..0000000 Binary files a/branding/logos/logo-128.png and /dev/null differ diff --git a/branding/logos/logo-2048-dark.png b/branding/logos/logo-2048-dark.png deleted file mode 100644 index 7489e2e..0000000 Binary files a/branding/logos/logo-2048-dark.png and /dev/null differ diff --git a/branding/logos/logo-2048-white.png b/branding/logos/logo-2048-white.png deleted file mode 100644 index ff5a317..0000000 Binary files a/branding/logos/logo-2048-white.png and /dev/null differ diff --git a/branding/logos/logo-2048.png b/branding/logos/logo-2048.png deleted file mode 100644 index f2984f5..0000000 Binary files a/branding/logos/logo-2048.png and /dev/null differ diff --git a/branding/logos/logo-256-dark.png b/branding/logos/logo-256-dark.png deleted file mode 100644 index 852481d..0000000 Binary files a/branding/logos/logo-256-dark.png and /dev/null differ diff --git a/branding/logos/logo-256-white.png b/branding/logos/logo-256-white.png deleted file mode 100644 index 2272b60..0000000 Binary files a/branding/logos/logo-256-white.png and /dev/null differ diff --git a/branding/logos/logo-256.png b/branding/logos/logo-256.png deleted file mode 100644 index ac5027d..0000000 Binary files a/branding/logos/logo-256.png and /dev/null differ diff --git a/branding/logos/logo-512-dark.png b/branding/logos/logo-512-dark.png deleted file mode 100644 index 29f3641..0000000 Binary files a/branding/logos/logo-512-dark.png and /dev/null differ diff --git a/branding/logos/logo-512-white.png b/branding/logos/logo-512-white.png deleted file mode 100644 index d15e079..0000000 Binary files a/branding/logos/logo-512-white.png and /dev/null differ diff --git a/branding/logos/logo-512.png b/branding/logos/logo-512.png deleted file mode 100644 index cdd2200..0000000 Binary files a/branding/logos/logo-512.png and /dev/null differ diff --git a/branding/logos/logo-64-dark.png b/branding/logos/logo-64-dark.png deleted file mode 100644 index e403692..0000000 Binary files a/branding/logos/logo-64-dark.png and /dev/null differ diff --git a/branding/logos/logo-64-white.png b/branding/logos/logo-64-white.png deleted file mode 100644 index 5e23475..0000000 Binary files a/branding/logos/logo-64-white.png and /dev/null differ diff --git a/branding/logos/logo-64.png b/branding/logos/logo-64.png deleted file mode 100644 index 4da6d98..0000000 Binary files a/branding/logos/logo-64.png and /dev/null differ diff --git a/branding/source/icon-dark.svg b/branding/source/icon-dark.svg deleted file mode 100644 index 4ada200..0000000 --- a/branding/source/icon-dark.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/branding/source/icon-light.svg b/branding/source/icon-light.svg deleted file mode 100644 index de57d76..0000000 --- a/branding/source/icon-light.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/branding/source/icon-tinted.svg b/branding/source/icon-tinted.svg deleted file mode 100644 index e00f524..0000000 --- a/branding/source/icon-tinted.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/branding/source/logo.svg b/branding/source/logo.svg deleted file mode 100644 index 34d55ea..0000000 --- a/branding/source/logo.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/ios/Ascently.xcodeproj/project.xcworkspace/xcuserdata/atridad.xcuserdatad/UserInterfaceState.xcuserstate b/ios/Ascently.xcodeproj/project.xcworkspace/xcuserdata/atridad.xcuserdatad/UserInterfaceState.xcuserstate index 185b696..b120194 100644 Binary files a/ios/Ascently.xcodeproj/project.xcworkspace/xcuserdata/atridad.xcuserdatad/UserInterfaceState.xcuserstate and b/ios/Ascently.xcodeproj/project.xcworkspace/xcuserdata/atridad.xcuserdatad/UserInterfaceState.xcuserstate differ