From dbe76c34c40abe8693d7f9c4d2c6b44a4d35fd4f Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 6 Aug 2026 02:52:55 +0000 Subject: [PATCH] Brand the app with the Wallace tartan and a Celtic splash MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - The launcher icon is a single square of the tartan, drawn as a vector so it stays sharp at any density and ships no PNGs. The adaptive icon's foreground is deliberately empty: the cloth is the icon. - Tartan.kt draws the sett as warp, then as weft at half opacity. That overlap is what gives the blended squares and reads as woven cloth rather than a printed grid, and it is reused by both the icon and the splash. - The app opens on the tartan under "Pro Libertate Games" in Uncial Antiqua, holds two seconds, then fades. It is an overlay rather than a destination, so the menu is already composed behind it and the fade reveals a live screen. The window background is set to a dark red so launch does not flash white before Compose draws. Two things to be aware of: - WallaceSett is an approximation. It reads as Wallace — bold red and black check with a narrow gold overstripe — but the registered threadcount could not be verified here, so the counts were chosen to look right. They are plain data and can be swapped for the registered ones without touching anything else. - Uncial Antiqua is bundled under the SIL Open Font License 1.1, with the full licence at docs/licenses/UncialAntiqua-OFL.txt. The OFL requires that to be distributed with the font, so it must not be separated from it. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_015qjfMiPUDshdKEUa6vxqzN --- README.md | 25 ++++ .../java/org/prolibertate/games/ui/AppRoot.kt | 35 ++++- .../org/prolibertate/games/ui/SplashScreen.kt | 125 ++++++++++++++++++ .../org/prolibertate/games/ui/theme/Tartan.kt | 97 ++++++++++++++ .../res/drawable/ic_launcher_background.xml | 52 +++++++- .../res/drawable/ic_launcher_foreground.xml | 13 +- app/src/main/res/font/uncial_antiqua.ttf | Bin 0 -> 61044 bytes app/src/main/res/mipmap/ic_launcher.xml | 28 ++-- app/src/main/res/mipmap/ic_launcher_round.xml | 28 ++-- app/src/main/res/values/colors.xml | 5 +- app/src/main/res/values/themes.xml | 1 + docs/licenses/UncialAntiqua-OFL.txt | 93 +++++++++++++ 12 files changed, 465 insertions(+), 37 deletions(-) create mode 100644 app/src/main/java/org/prolibertate/games/ui/SplashScreen.kt create mode 100644 app/src/main/java/org/prolibertate/games/ui/theme/Tartan.kt create mode 100644 app/src/main/res/font/uncial_antiqua.ttf create mode 100644 docs/licenses/UncialAntiqua-OFL.txt diff --git a/README.md b/README.md index 0e8985f..630df05 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,31 @@ them. - **Production** — stable builds, published from `main`. - **Dev** — preview builds, published from `dev` on every green CI run. +## Branding + +The launcher icon is a single square of the Wallace tartan, and the app opens on +a tartan splash carrying the name in a Celtic uncial hand for two seconds before +fading into the menu. + +The tartan is drawn, not an image: `ui/theme/Tartan.kt` lays the sett down as +warp and then as weft at half opacity, which is what produces the blended +squares instead of a flat grid. The icon is the same construction as a vector +drawable, so it stays sharp at every density and needs no PNGs. + +Two honest caveats: + +- **The sett is an approximation.** `WallaceSett` reproduces what the Wallace + tartan reads as — a bold red and black check divided by a narrow gold + overstripe — but the registered threadcount could not be verified, so the + numbers were chosen to look right rather than to be authoritative. They are + plain data; replacing them with the registered counts rebrands the whole app + and needs no other change. +- **The typeface is bundled under a licence.** Uncial Antiqua, © 2011 Brian J. + Bonislawsky DBA Astigmatic, Reserved Font Name "Uncial Antiqua", used under + the SIL Open Font License 1.1. The full licence is at + [docs/licenses/UncialAntiqua-OFL.txt](docs/licenses/UncialAntiqua-OFL.txt) and + must stay with the font — the OFL requires it to be distributed alongside. + ## Screen sizes There are no fixed orientations or hard-coded card sizes. Layouts measure the diff --git a/app/src/main/java/org/prolibertate/games/ui/AppRoot.kt b/app/src/main/java/org/prolibertate/games/ui/AppRoot.kt index d886eae..8902894 100644 --- a/app/src/main/java/org/prolibertate/games/ui/AppRoot.kt +++ b/app/src/main/java/org/prolibertate/games/ui/AppRoot.kt @@ -82,11 +82,9 @@ fun AppRoot(env: AppEnv) { env.updater.installedChannel() == UpdateChannel.DEV } - fun push(route: Route) { - stack = stack + route - } + val push: (Route) -> Unit = { route -> stack = stack + route } - fun pop() { + val pop: () -> Unit = { if (stack.size > 1) { // Leaving a lobby or a table tears the networking down with it. when (stack.last()) { @@ -99,6 +97,35 @@ fun AppRoot(env: AppEnv) { BackHandler(enabled = stack.size > 1) { pop() } + var splashDone by remember { mutableStateOf(false) } + + Box(modifier = Modifier.fillMaxSize()) { + AppContent( + env = env, + settings = settings, + stack = stack, + showComingSoon = showComingSoon, + push = push, + pop = pop, + ) + + // Over the top, so the menu behind it is already composed when it fades. + if (!splashDone) { + SplashScreen(onFinished = { splashDone = true }) + } + } +} + +/** The navigation stack proper, kept separate so the splash can sit over it. */ +@Composable +private fun AppContent( + env: AppEnv, + settings: Settings, + stack: List, + showComingSoon: Boolean, + push: (Route) -> Unit, + pop: () -> Unit, +) { when (val route = stack.last()) { is Route.Menu -> MainMenuScreen( // Dev builds show the games that are not finished yet; production diff --git a/app/src/main/java/org/prolibertate/games/ui/SplashScreen.kt b/app/src/main/java/org/prolibertate/games/ui/SplashScreen.kt new file mode 100644 index 0000000..a7be877 --- /dev/null +++ b/app/src/main/java/org/prolibertate/games/ui/SplashScreen.kt @@ -0,0 +1,125 @@ +package org.prolibertate.games.ui + +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.animation.core.tween +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.Shadow +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.Font +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import kotlinx.coroutines.delay +import org.prolibertate.games.R +import org.prolibertate.games.ui.theme.TartanBackground + +/** How long the splash holds at full opacity before fading. */ +private const val SPLASH_HOLD_MILLIS = 2_000L + +private const val SPLASH_FADE_MILLIS = 600 + +/** + * Uncial Antiqua — a Celtic uncial face, bundled under the SIL Open Font + * License. See docs/licenses/UncialAntiqua-OFL.txt. + */ +val CelticFontFamily = FontFamily(Font(R.font.uncial_antiqua)) + +/** + * The launch screen: Wallace tartan under the name of the house. + * + * Drawn as an overlay rather than a separate destination, so the menu is + * already composed and ready behind it and the fade reveals a live screen + * instead of a blank one. + */ +@Composable +fun SplashScreen( + onFinished: () -> Unit, + modifier: Modifier = Modifier, +) { + var fading by remember { mutableStateOf(false) } + val alpha by animateFloatAsState( + targetValue = if (fading) 0f else 1f, + animationSpec = tween(durationMillis = SPLASH_FADE_MILLIS), + label = "splashFade", + ) + + LaunchedEffect(Unit) { + delay(SPLASH_HOLD_MILLIS) + fading = true + delay(SPLASH_FADE_MILLIS.toLong()) + onFinished() + } + + BoxWithConstraints(modifier = modifier.fillMaxSize().alpha(alpha)) { + // Weave scale follows the screen so the cloth reads the same on a phone + // and a tablet rather than turning into a fine grid on a large display. + val threadWidth = (minOf(maxWidth, maxHeight).value * 0.012f).dp + TartanBackground( + modifier = Modifier.fillMaxSize(), + threadWidth = threadWidth, + ) + + // A scrim keeps the lettering legible over the busiest part of the sett. + Box( + modifier = Modifier + .fillMaxSize() + .background(Color.Black.copy(alpha = 0.45f)) + ) + + Column( + modifier = Modifier + .fillMaxSize() + .padding(horizontal = 24.dp), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Text( + text = "Pro Libertate", + style = TextStyle( + fontFamily = CelticFontFamily, + fontSize = (minOf(maxWidth, maxHeight).value * 0.13f).sp, + color = Color(0xFFF7EFD8), + textAlign = TextAlign.Center, + shadow = Shadow( + color = Color.Black, + offset = Offset(0f, 3f), + blurRadius = 10f, + ), + ), + ) + Text( + text = "Games", + style = TextStyle( + fontFamily = CelticFontFamily, + fontSize = (minOf(maxWidth, maxHeight).value * 0.13f).sp, + color = Color(0xFFF2C200), + textAlign = TextAlign.Center, + shadow = Shadow( + color = Color.Black, + offset = Offset(0f, 3f), + blurRadius = 10f, + ), + ), + ) + } + } +} diff --git a/app/src/main/java/org/prolibertate/games/ui/theme/Tartan.kt b/app/src/main/java/org/prolibertate/games/ui/theme/Tartan.kt new file mode 100644 index 0000000..a5024ad --- /dev/null +++ b/app/src/main/java/org/prolibertate/games/ui/theme/Tartan.kt @@ -0,0 +1,97 @@ +package org.prolibertate.games.ui.theme + +import androidx.compose.foundation.Canvas +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.geometry.Size +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.drawscope.DrawScope +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp + +/** One band of a tartan sett, measured in threads. */ +data class TartanStripe(val color: Color, val threads: Int) + +val WallaceRed = Color(0xFFB3121B) +val WallaceBlack = Color(0xFF111111) +val WallaceGold = Color(0xFFF2C200) + +/** + * The Wallace sett. + * + * NOTE: this is an approximation, not a certified threadcount. It reproduces + * what the Wallace tartan reads as — a bold red and black check divided by a + * narrow gold overstripe — but the exact thread counts held by the Scottish + * Register of Tartans could not be verified from here, so the numbers below + * are chosen to look right rather than to be authoritative. They are plain + * data: replacing them with the registered counts changes the whole app's + * branding and needs no other edit. + */ +val WallaceSett: List = listOf( + TartanStripe(WallaceRed, 40), + TartanStripe(WallaceBlack, 40), + TartanStripe(WallaceGold, 4), +) + +/** + * Draws a tartan by laying the sett down vertically as warp, then across as + * weft at half opacity. The overlap is what produces the blended squares and + * the sense of a woven cloth rather than a printed grid — red warp under black + * weft comes out a darker red, exactly as it does on the loom. + */ +fun DrawScope.drawTartan( + sett: List = WallaceSett, + threadSize: Float, +) { + if (sett.isEmpty() || threadSize <= 0f) return + val repeat = sett.sumOf { it.threads } * threadSize + if (repeat <= 0f) return + + // Warp: full-height bands. + var x = 0f + while (x < size.width) { + var offset = x + for (stripe in sett) { + val width = stripe.threads * threadSize + drawRect( + color = stripe.color, + topLeft = Offset(offset, 0f), + size = Size(width, size.height), + ) + offset += width + } + x += repeat + } + + // Weft: full-width bands, half opacity so the warp shows through. + var y = 0f + while (y < size.height) { + var offset = y + for (stripe in sett) { + val height = stripe.threads * threadSize + drawRect( + color = stripe.color.copy(alpha = 0.5f), + topLeft = Offset(0f, offset), + size = Size(size.width, height), + ) + offset += height + } + y += repeat + } +} + +/** + * A tartan fill. [threadWidth] sets the weave scale, so the same cloth can be + * a fine weave on a phone and a coarse one on a tablet without redrawing it. + */ +@Composable +fun TartanBackground( + modifier: Modifier = Modifier, + sett: List = WallaceSett, + threadWidth: Dp = 2.dp, +) { + Canvas(modifier = modifier) { + drawTartan(sett = sett, threadSize = threadWidth.toPx()) + } +} diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml index a1cb143..09262d8 100644 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -1,11 +1,59 @@ + - + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml index 5c8a39a..0e5a48e 100644 --- a/app/src/main/res/drawable/ic_launcher_foreground.xml +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -1,14 +1,15 @@ + - - + android:fillColor="#00000000" + android:pathData="M0,0h108v108h-108z" /> diff --git a/app/src/main/res/font/uncial_antiqua.ttf b/app/src/main/res/font/uncial_antiqua.ttf new file mode 100644 index 0000000000000000000000000000000000000000..05ded2146f69c877b2d2a8f59e1fc63e77afec81 GIT binary patch literal 61044 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap/ic_launcher.xml b/app/src/main/res/mipmap/ic_launcher.xml index 8ed1d4d..d1b3320 100644 --- a/app/src/main/res/mipmap/ic_launcher.xml +++ b/app/src/main/res/mipmap/ic_launcher.xml @@ -1,17 +1,21 @@ - + - - - + android:viewportWidth="84" + android:viewportHeight="84"> + + + + + + + + + + + diff --git a/app/src/main/res/mipmap/ic_launcher_round.xml b/app/src/main/res/mipmap/ic_launcher_round.xml index 69e9235..d1b3320 100644 --- a/app/src/main/res/mipmap/ic_launcher_round.xml +++ b/app/src/main/res/mipmap/ic_launcher_round.xml @@ -1,17 +1,21 @@ - + - - - + android:viewportWidth="84" + android:viewportHeight="84"> + + + + + + + + + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 48d3808..97c6599 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,6 +1,9 @@ - #1B5E20 + #B3121B #FF000000 #FFFFFFFF + + #4A0B10 diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index bf1e235..492b38a 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -5,5 +5,6 @@ diff --git a/docs/licenses/UncialAntiqua-OFL.txt b/docs/licenses/UncialAntiqua-OFL.txt new file mode 100644 index 0000000..d252554 --- /dev/null +++ b/docs/licenses/UncialAntiqua-OFL.txt @@ -0,0 +1,93 @@ +Copyright (c) 2011 by Brian J. Bonislawsky DBA Astigmatic (AOETI) (astigma@astigmatic.com), with Reserved Font Name "Uncial Antiqua" + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE.