Rework the Wallace tartan from a reference, and set it on the bias

The old sett was three flat stripes in roughly equal measure, which read
as a generic red-and-black check rather than as Wallace. Rebuilt against
a reference swatch.

- Setts are now written as a half-sett and reflected about their pivots,
  the way a threadcount is actually published, so the data stays in the
  form it is quoted in instead of a flat list kept symmetric by hand.
- Wallace is gold 6, black 6, red 36, black 24, red 36, black 6: a red
  ground at about two thirds, black bands alternating wide and narrow,
  and one thin gold overstripe per repeat. The reflection puts black on
  both sides of the gold line, which is what the reference shows.
- Colours taken from the swatch: a brighter scarlet and a stronger gold
  than before.
- Both the cloth and the icon are turned 45 degrees. The renderer draws
  well past the canvas edges so the corners stay covered once rotated.

The icon vector is generated from the same numbers rather than written
out by hand, so the icon and the splash cannot drift apart — changing
the sett rebrands both.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_015qjfMiPUDshdKEUa6vxqzN
This commit is contained in:
Claude
2026-08-06 04:04:51 +00:00
parent d30ea8656f
commit 510fd40d86
6 changed files with 266 additions and 134 deletions
+12 -10
View File
@@ -5,7 +5,7 @@ or against other people over Wi-Fi (LAN) or Bluetooth.
## What works today ## What works today
The app shell is complete and two games are playable end to end: The app shell is complete and four games are playable end to end:
| | | | | |
| --- | --- | | --- | --- |
@@ -59,9 +59,9 @@ them.
## Branding ## Branding
The launcher icon is a single square of the Wallace tartan, and the app opens on The launcher icon is a single square of the Wallace tartan set on the bias, and
a tartan splash carrying the name in a Celtic uncial hand for two seconds before the app opens on the same cloth carrying the name in a Celtic uncial hand for two
fading into the menu. seconds before fading into the menu.
The tartan is drawn, not an image: `ui/theme/Tartan.kt` lays the sett down as 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 warp and then as weft at half opacity, which is what produces the blended
@@ -70,12 +70,14 @@ drawable, so it stays sharp at every density and needs no PNGs.
Two honest caveats: Two honest caveats:
- **The sett is an approximation.** `WallaceSett` reproduces what the Wallace - **The sett is matched by eye, not to a registered threadcount.**
tartan reads as — a bold red and black check divided by a narrow gold `WallaceSett` is written as a half-sett and reflected about its pivots, the way
overstripe — but the registered threadcount could not be verified, so the a threadcount is published: gold 6, black 6, red 36, black 24, red 36, black 6.
numbers were chosen to look right rather than to be authoritative. They are That gives a red ground at about two thirds, black bands alternating wide and
plain data; replacing them with the registered counts rebrands the whole app narrow, and one thin gold overstripe per repeat flanked by black — matched
and needs no other change. against a reference swatch rather than to the Scottish Register of Tartans.
Substituting registered counts is an edit to that one list; the icon is
generated from the same numbers, so both follow.
- **The typeface is bundled under a licence.** Uncial Antiqua, © 2011 Brian J. - **The typeface is bundled under a licence.** Uncial Antiqua, © 2011 Brian J.
Bonislawsky DBA Astigmatic, Reserved Font Name "Uncial Antiqua", used under Bonislawsky DBA Astigmatic, Reserved Font Name "Uncial Antiqua", used under
the SIL Open Font License 1.1. The full licence is at the SIL Open Font License 1.1. The full licence is at
@@ -82,6 +82,8 @@ fun SplashScreen(
TartanBackground( TartanBackground(
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
threadWidth = threadWidth, threadWidth = threadWidth,
// On the bias, matching the icon.
rotationDegrees = 45f,
) )
// A scrim keeps the lettering legible over the busiest part of the sett. // A scrim keeps the lettering legible over the busiest part of the sett.
@@ -7,57 +7,85 @@ import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Size import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.drawscope.DrawScope import androidx.compose.ui.graphics.drawscope.DrawScope
import androidx.compose.ui.graphics.drawscope.rotate
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
/** One band of a tartan sett, measured in threads. */ /** One band of a tartan sett, measured in threads. */
data class TartanStripe(val color: Color, val threads: Int) data class TartanStripe(val color: Color, val threads: Int)
val WallaceRed = Color(0xFFB3121B) val WallaceRed = Color(0xFFE01B24)
val WallaceBlack = Color(0xFF111111) val WallaceBlack = Color(0xFF0C0C0C)
val WallaceGold = Color(0xFFF2C200) val WallaceGold = Color(0xFFF2C518)
/** /**
* The Wallace sett. * Expands a half-sett into a full repeat by reflecting it.
* *
* NOTE: this is an approximation, not a certified threadcount. It reproduces * Tartans are specified as a half-sett between two pivots and woven out to
* what the Wallace tartan reads as — a bold red and black check divided by a * both sides, so `A B C` becomes `A B C B` — the pivot stripes are not
* narrow gold overstripe — but the exact thread counts held by the Scottish * doubled. Writing the data this way keeps it in the same form a threadcount
* Register of Tartans could not be verified from here, so the numbers below * is published in, instead of a flat list that has to be kept symmetric by
* are chosen to look right rather than to be authoritative. They are plain * hand.
* data: replacing them with the registered counts changes the whole app's */
* branding and needs no other edit. fun List<TartanStripe>.pivoted(): List<TartanStripe> =
if (size < 3) this else this + drop(1).dropLast(1).reversed()
/**
* The Wallace sett, as a half-sett between the gold line and the centre of a
* narrow black guard.
*
* Matched by eye to a reference swatch rather than to a registered
* threadcount: red ground, black bands alternating wide and narrow, and one
* thin gold overstripe per repeat, flanked by black on both sides. The
* proportions are the point — swapping in registered counts is an edit to this
* list and nothing else.
*/ */
val WallaceSett: List<TartanStripe> = listOf( val WallaceSett: List<TartanStripe> = listOf(
TartanStripe(WallaceRed, 40), TartanStripe(WallaceGold, 6),
TartanStripe(WallaceBlack, 40), TartanStripe(WallaceBlack, 6),
TartanStripe(WallaceGold, 4), TartanStripe(WallaceRed, 36),
) TartanStripe(WallaceBlack, 24),
TartanStripe(WallaceRed, 36),
TartanStripe(WallaceBlack, 6),
).pivoted()
/** /**
* Draws a tartan by laying the sett down vertically as warp, then across as * 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 * 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 * 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. * weft comes out a darker red, exactly as it does on the loom.
*
* [rotationDegrees] turns the cloth on the bias. The stripes are drawn well
* past the edges of the canvas so the corners stay covered once it is turned.
*/ */
fun DrawScope.drawTartan( fun DrawScope.drawTartan(
sett: List<TartanStripe> = WallaceSett, sett: List<TartanStripe> = WallaceSett,
threadSize: Float, threadSize: Float,
rotationDegrees: Float = 0f,
) { ) {
if (sett.isEmpty() || threadSize <= 0f) return if (sett.isEmpty() || threadSize <= 0f) return
val repeat = sett.sumOf { it.threads } * threadSize val repeat = sett.sumOf { it.threads } * threadSize
if (repeat <= 0f) return if (repeat <= 0f) return
// Turning a square by 45 degrees needs about 0.21 of its size spare on
// every edge; three quarters is generous enough for any angle.
val pad = if (rotationDegrees == 0f) 0f else size.maxDimension * 0.75f
val left = -pad
val top = -pad
val right = size.width + pad
val bottom = size.height + pad
rotate(degrees = rotationDegrees) {
// Warp: full-height bands. // Warp: full-height bands.
var x = 0f var x = left - (left.mod(repeat))
while (x < size.width) { while (x < right) {
var offset = x var offset = x
for (stripe in sett) { for (stripe in sett) {
val width = stripe.threads * threadSize val width = stripe.threads * threadSize
drawRect( drawRect(
color = stripe.color, color = stripe.color,
topLeft = Offset(offset, 0f), topLeft = Offset(offset, top),
size = Size(width, size.height), size = Size(width, bottom - top),
) )
offset += width offset += width
} }
@@ -65,20 +93,21 @@ fun DrawScope.drawTartan(
} }
// Weft: full-width bands, half opacity so the warp shows through. // Weft: full-width bands, half opacity so the warp shows through.
var y = 0f var y = top - (top.mod(repeat))
while (y < size.height) { while (y < bottom) {
var offset = y var offset = y
for (stripe in sett) { for (stripe in sett) {
val height = stripe.threads * threadSize val height = stripe.threads * threadSize
drawRect( drawRect(
color = stripe.color.copy(alpha = 0.5f), color = stripe.color.copy(alpha = 0.5f),
topLeft = Offset(0f, offset), topLeft = Offset(left, offset),
size = Size(size.width, height), size = Size(right - left, height),
) )
offset += height offset += height
} }
y += repeat y += repeat
} }
}
} }
/** /**
@@ -90,8 +119,13 @@ fun TartanBackground(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
sett: List<TartanStripe> = WallaceSett, sett: List<TartanStripe> = WallaceSett,
threadWidth: Dp = 2.dp, threadWidth: Dp = 2.dp,
rotationDegrees: Float = 0f,
) { ) {
Canvas(modifier = modifier) { Canvas(modifier = modifier) {
drawTartan(sett = sett, threadSize = threadWidth.toPx()) drawTartan(
sett = sett,
threadSize = threadWidth.toPx(),
rotationDegrees = rotationDegrees,
)
} }
} }
@@ -1,59 +1,65 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
A single square of the Wallace tartan. A single square of the Wallace tartan, set on the bias.
The sett is laid down as warp (opaque, vertical) over a black ground, then as Generated from the same sett as WallaceSett in Tartan.kt: a half-sett of
weft (half opacity, horizontal), which is what produces the blended squares gold 6, black 6, red 36, black 24, red 36, black 6, reflected about its
rather than a flat grid. One full repeat is 72 units wide, so the centre pivots. Warp is drawn opaque, weft over it at half opacity, which is what
72x72 safe zone of the adaptive icon shows exactly one repeat. gives the blended squares rather than a flat grid.
Thread proportions match WallaceSett in Tartan.kt — see the note there about The paths run well past the viewport because the whole thing is rotated 45
these being a visual approximation rather than the registered threadcount. degrees; the overspill is what keeps the corners covered.
--> -->
<vector xmlns:android="http://schemas.android.com/apk/res/android" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp" android:width="108dp"
android:height="108dp" android:height="108dp"
android:viewportWidth="108" android:viewportWidth="108"
android:viewportHeight="108"> android:viewportHeight="108">
<group
<!-- Ground --> android:rotation="45"
<path android:pivotX="54.0"
android:fillColor="#111111" android:pivotY="54.0">
android:pathData="M0,0h108v108h-108z" /> <path android:fillColor="#0C0C0C" android:pathData="M-90.00,-90.00h288.00v288.00h-288.00z" />
<path android:fillColor="#E01B24" android:pathData="M-90.00,-90.00h22.50v288.00h-22.50z" />
<!-- Warp: red --> <path android:fillColor="#E01B24" android:pathData="M-63.75,-90.00h22.50v288.00h-22.50z" />
<path <path android:fillColor="#E01B24" android:pathData="M-26.25,-90.00h22.50v288.00h-22.50z" />
android:fillColor="#B3121B" <path android:fillColor="#F2C518" android:pathData="M0.00,-90.00h3.75v288.00h-3.75z" />
android:pathData="M0,0h34.29v108h-34.29z" /> <path android:fillColor="#E01B24" android:pathData="M7.50,-90.00h22.50v288.00h-22.50z" />
<path <path android:fillColor="#E01B24" android:pathData="M45.00,-90.00h22.50v288.00h-22.50z" />
android:fillColor="#B3121B" <path android:fillColor="#E01B24" android:pathData="M71.25,-90.00h22.50v288.00h-22.50z" />
android:pathData="M72,0h34.29v108h-34.29z" /> <path android:fillColor="#E01B24" android:pathData="M108.75,-90.00h22.50v288.00h-22.50z" />
<!-- Warp: gold overstripe --> <path android:fillColor="#F2C518" android:pathData="M135.00,-90.00h3.75v288.00h-3.75z" />
<path <path android:fillColor="#E01B24" android:pathData="M142.50,-90.00h22.50v288.00h-22.50z" />
android:fillColor="#F2C200" <path android:fillColor="#E01B24" android:pathData="M180.00,-90.00h22.50v288.00h-22.50z" />
android:pathData="M68.57,0h3.43v108h-3.43z" /> <path android:fillColor="#F2C518" android:fillAlpha="0.5" android:pathData="M-90.00,-135.00h288.00v3.75h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,-131.25h288.00v3.75h-288.00z" />
<!-- Weft: red --> <path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,-127.50h288.00v22.50h-288.00z" />
<path <path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,-105.00h288.00v15.00h-288.00z" />
android:fillColor="#B3121B" <path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,-90.00h288.00v22.50h-288.00z" />
android:fillAlpha="0.5" <path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,-67.50h288.00v3.75h-288.00z" />
android:pathData="M0,0h108v34.29h-108z" /> <path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,-63.75h288.00v22.50h-288.00z" />
<path <path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,-41.25h288.00v15.00h-288.00z" />
android:fillColor="#B3121B" <path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,-26.25h288.00v22.50h-288.00z" />
android:fillAlpha="0.5" <path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,-3.75h288.00v3.75h-288.00z" />
android:pathData="M0,72h108v34.29h-108z" /> <path android:fillColor="#F2C518" android:fillAlpha="0.5" android:pathData="M-90.00,0.00h288.00v3.75h-288.00z" />
<!-- Weft: black --> <path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,3.75h288.00v3.75h-288.00z" />
<path <path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,7.50h288.00v22.50h-288.00z" />
android:fillColor="#111111" <path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,30.00h288.00v15.00h-288.00z" />
android:fillAlpha="0.5" <path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,45.00h288.00v22.50h-288.00z" />
android:pathData="M0,34.29h108v34.28h-108z" /> <path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,67.50h288.00v3.75h-288.00z" />
<path <path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,71.25h288.00v22.50h-288.00z" />
android:fillColor="#111111" <path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,93.75h288.00v15.00h-288.00z" />
android:fillAlpha="0.5" <path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,108.75h288.00v22.50h-288.00z" />
android:pathData="M0,106.29h108v1.71h-108z" /> <path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,131.25h288.00v3.75h-288.00z" />
<!-- Weft: gold overstripe --> <path android:fillColor="#F2C518" android:fillAlpha="0.5" android:pathData="M-90.00,135.00h288.00v3.75h-288.00z" />
<path <path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,138.75h288.00v3.75h-288.00z" />
android:fillColor="#F2C200" <path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,142.50h288.00v22.50h-288.00z" />
android:fillAlpha="0.5" <path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,165.00h288.00v15.00h-288.00z" />
android:pathData="M0,68.57h108v3.43h-108z" /> <path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,180.00h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,202.50h288.00v3.75h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,206.25h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,228.75h288.00v15.00h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,243.75h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,266.25h288.00v3.75h-288.00z" />
</group>
</vector> </vector>
+60 -16
View File
@@ -1,21 +1,65 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Fallback launcher icon for API < 26, which has no adaptive-icon support. <!--
Same Wallace tartan swatch as drawable/ic_launcher_background.xml, drawn A single square of the Wallace tartan, set on the bias.
at icon scale so one full sett repeat fills the tile. -->
Generated from the same sett as WallaceSett in Tartan.kt: a half-sett of
gold 6, black 6, red 36, black 24, red 36, black 6, reflected about its
pivots. Warp is drawn opaque, weft over it at half opacity, which is what
gives the blended squares rather than a flat grid.
The paths run well past the viewport because the whole thing is rotated 45
degrees; the overspill is what keeps the corners covered.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp" android:width="48dp"
android:height="48dp" android:height="48dp"
android:viewportWidth="84" android:viewportWidth="108"
android:viewportHeight="84"> android:viewportHeight="108">
<group
<path android:fillColor="#111111" android:pathData="M0,0h84v84h-84z" /> android:rotation="45"
android:pivotX="54.0"
<!-- Warp --> android:pivotY="54.0">
<path android:fillColor="#B3121B" android:pathData="M0,0h40v84h-40z" /> <path android:fillColor="#0C0C0C" android:pathData="M-90.00,-90.00h288.00v288.00h-288.00z" />
<path android:fillColor="#F2C200" android:pathData="M80,0h4v84h-4z" /> <path android:fillColor="#E01B24" android:pathData="M-90.00,-90.00h22.50v288.00h-22.50z" />
<path android:fillColor="#E01B24" android:pathData="M-63.75,-90.00h22.50v288.00h-22.50z" />
<!-- Weft --> <path android:fillColor="#E01B24" android:pathData="M-26.25,-90.00h22.50v288.00h-22.50z" />
<path android:fillColor="#B3121B" android:fillAlpha="0.5" android:pathData="M0,0h84v40h-84z" /> <path android:fillColor="#F2C518" android:pathData="M0.00,-90.00h3.75v288.00h-3.75z" />
<path android:fillColor="#111111" android:fillAlpha="0.5" android:pathData="M0,40h84v40h-84z" /> <path android:fillColor="#E01B24" android:pathData="M7.50,-90.00h22.50v288.00h-22.50z" />
<path android:fillColor="#F2C200" android:fillAlpha="0.5" android:pathData="M0,80h84v4h-84z" /> <path android:fillColor="#E01B24" android:pathData="M45.00,-90.00h22.50v288.00h-22.50z" />
<path android:fillColor="#E01B24" android:pathData="M71.25,-90.00h22.50v288.00h-22.50z" />
<path android:fillColor="#E01B24" android:pathData="M108.75,-90.00h22.50v288.00h-22.50z" />
<path android:fillColor="#F2C518" android:pathData="M135.00,-90.00h3.75v288.00h-3.75z" />
<path android:fillColor="#E01B24" android:pathData="M142.50,-90.00h22.50v288.00h-22.50z" />
<path android:fillColor="#E01B24" android:pathData="M180.00,-90.00h22.50v288.00h-22.50z" />
<path android:fillColor="#F2C518" android:fillAlpha="0.5" android:pathData="M-90.00,-135.00h288.00v3.75h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,-131.25h288.00v3.75h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,-127.50h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,-105.00h288.00v15.00h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,-90.00h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,-67.50h288.00v3.75h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,-63.75h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,-41.25h288.00v15.00h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,-26.25h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,-3.75h288.00v3.75h-288.00z" />
<path android:fillColor="#F2C518" android:fillAlpha="0.5" android:pathData="M-90.00,0.00h288.00v3.75h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,3.75h288.00v3.75h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,7.50h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,30.00h288.00v15.00h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,45.00h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,67.50h288.00v3.75h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,71.25h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,93.75h288.00v15.00h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,108.75h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,131.25h288.00v3.75h-288.00z" />
<path android:fillColor="#F2C518" android:fillAlpha="0.5" android:pathData="M-90.00,135.00h288.00v3.75h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,138.75h288.00v3.75h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,142.50h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,165.00h288.00v15.00h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,180.00h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,202.50h288.00v3.75h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,206.25h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,228.75h288.00v15.00h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,243.75h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,266.25h288.00v3.75h-288.00z" />
</group>
</vector> </vector>
+60 -16
View File
@@ -1,21 +1,65 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Fallback launcher icon for API < 26, which has no adaptive-icon support. <!--
Same Wallace tartan swatch as drawable/ic_launcher_background.xml, drawn A single square of the Wallace tartan, set on the bias.
at icon scale so one full sett repeat fills the tile. -->
Generated from the same sett as WallaceSett in Tartan.kt: a half-sett of
gold 6, black 6, red 36, black 24, red 36, black 6, reflected about its
pivots. Warp is drawn opaque, weft over it at half opacity, which is what
gives the blended squares rather than a flat grid.
The paths run well past the viewport because the whole thing is rotated 45
degrees; the overspill is what keeps the corners covered.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp" android:width="48dp"
android:height="48dp" android:height="48dp"
android:viewportWidth="84" android:viewportWidth="108"
android:viewportHeight="84"> android:viewportHeight="108">
<group
<path android:fillColor="#111111" android:pathData="M0,0h84v84h-84z" /> android:rotation="45"
android:pivotX="54.0"
<!-- Warp --> android:pivotY="54.0">
<path android:fillColor="#B3121B" android:pathData="M0,0h40v84h-40z" /> <path android:fillColor="#0C0C0C" android:pathData="M-90.00,-90.00h288.00v288.00h-288.00z" />
<path android:fillColor="#F2C200" android:pathData="M80,0h4v84h-4z" /> <path android:fillColor="#E01B24" android:pathData="M-90.00,-90.00h22.50v288.00h-22.50z" />
<path android:fillColor="#E01B24" android:pathData="M-63.75,-90.00h22.50v288.00h-22.50z" />
<!-- Weft --> <path android:fillColor="#E01B24" android:pathData="M-26.25,-90.00h22.50v288.00h-22.50z" />
<path android:fillColor="#B3121B" android:fillAlpha="0.5" android:pathData="M0,0h84v40h-84z" /> <path android:fillColor="#F2C518" android:pathData="M0.00,-90.00h3.75v288.00h-3.75z" />
<path android:fillColor="#111111" android:fillAlpha="0.5" android:pathData="M0,40h84v40h-84z" /> <path android:fillColor="#E01B24" android:pathData="M7.50,-90.00h22.50v288.00h-22.50z" />
<path android:fillColor="#F2C200" android:fillAlpha="0.5" android:pathData="M0,80h84v4h-84z" /> <path android:fillColor="#E01B24" android:pathData="M45.00,-90.00h22.50v288.00h-22.50z" />
<path android:fillColor="#E01B24" android:pathData="M71.25,-90.00h22.50v288.00h-22.50z" />
<path android:fillColor="#E01B24" android:pathData="M108.75,-90.00h22.50v288.00h-22.50z" />
<path android:fillColor="#F2C518" android:pathData="M135.00,-90.00h3.75v288.00h-3.75z" />
<path android:fillColor="#E01B24" android:pathData="M142.50,-90.00h22.50v288.00h-22.50z" />
<path android:fillColor="#E01B24" android:pathData="M180.00,-90.00h22.50v288.00h-22.50z" />
<path android:fillColor="#F2C518" android:fillAlpha="0.5" android:pathData="M-90.00,-135.00h288.00v3.75h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,-131.25h288.00v3.75h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,-127.50h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,-105.00h288.00v15.00h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,-90.00h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,-67.50h288.00v3.75h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,-63.75h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,-41.25h288.00v15.00h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,-26.25h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,-3.75h288.00v3.75h-288.00z" />
<path android:fillColor="#F2C518" android:fillAlpha="0.5" android:pathData="M-90.00,0.00h288.00v3.75h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,3.75h288.00v3.75h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,7.50h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,30.00h288.00v15.00h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,45.00h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,67.50h288.00v3.75h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,71.25h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,93.75h288.00v15.00h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,108.75h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,131.25h288.00v3.75h-288.00z" />
<path android:fillColor="#F2C518" android:fillAlpha="0.5" android:pathData="M-90.00,135.00h288.00v3.75h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,138.75h288.00v3.75h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,142.50h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,165.00h288.00v15.00h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,180.00h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,202.50h288.00v3.75h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,206.25h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,228.75h288.00v15.00h-288.00z" />
<path android:fillColor="#E01B24" android:fillAlpha="0.5" android:pathData="M-90.00,243.75h288.00v22.50h-288.00z" />
<path android:fillColor="#0C0C0C" android:fillAlpha="0.5" android:pathData="M-90.00,266.25h288.00v3.75h-288.00z" />
</group>
</vector> </vector>