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'")
- 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