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
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
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 launcher icon is a single square of the Wallace tartan set on the bias, and
the app opens on the same cloth 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
@@ -70,12 +70,14 @@ 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 sett is matched by eye, not to a registered threadcount.**
`WallaceSett` is written as a half-sett and reflected about its pivots, the way
a threadcount is published: gold 6, black 6, red 36, black 24, red 36, black 6.
That gives a red ground at about two thirds, black bands alternating wide and
narrow, and one thin gold overstripe per repeat flanked by black — matched
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.
Bonislawsky DBA Astigmatic, Reserved Font Name "Uncial Antiqua", used under
the SIL Open Font License 1.1. The full licence is at
@@ -82,6 +82,8 @@ fun SplashScreen(
TartanBackground(
modifier = Modifier.fillMaxSize(),
threadWidth = threadWidth,
// On the bias, matching the icon.
rotationDegrees = 45f,
)
// 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.graphics.Color
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
/** 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)
val WallaceRed = Color(0xFFE01B24)
val WallaceBlack = Color(0xFF0C0C0C)
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
* 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.
* Tartans are specified as a half-sett between two pivots and woven out to
* both sides, so `A B C` becomes `A B C B` — the pivot stripes are not
* doubled. Writing the data this way keeps it in the same form a threadcount
* is published in, instead of a flat list that has to be kept symmetric by
* hand.
*/
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(
TartanStripe(WallaceRed, 40),
TartanStripe(WallaceBlack, 40),
TartanStripe(WallaceGold, 4),
)
TartanStripe(WallaceGold, 6),
TartanStripe(WallaceBlack, 6),
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
* 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.
*
* [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(
sett: List<TartanStripe> = WallaceSett,
threadSize: Float,
rotationDegrees: Float = 0f,
) {
if (sett.isEmpty() || threadSize <= 0f) return
val repeat = sett.sumOf { it.threads } * threadSize
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.
var x = 0f
while (x < size.width) {
var x = left - (left.mod(repeat))
while (x < right) {
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),
topLeft = Offset(offset, top),
size = Size(width, bottom - top),
)
offset += width
}
@@ -65,20 +93,21 @@ fun DrawScope.drawTartan(
}
// Weft: full-width bands, half opacity so the warp shows through.
var y = 0f
while (y < size.height) {
var y = top - (top.mod(repeat))
while (y < bottom) {
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),
topLeft = Offset(left, offset),
size = Size(right - left, height),
)
offset += height
}
y += repeat
}
}
}
/**
@@ -90,8 +119,13 @@ fun TartanBackground(
modifier: Modifier = Modifier,
sett: List<TartanStripe> = WallaceSett,
threadWidth: Dp = 2.dp,
rotationDegrees: Float = 0f,
) {
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"?>
<!--
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
weft (half opacity, horizontal), which is what produces the blended squares
rather than a flat grid. One full repeat is 72 units wide, so the centre
72x72 safe zone of the adaptive icon shows exactly one repeat.
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.
Thread proportions match WallaceSett in Tartan.kt — see the note there about
these being a visual approximation rather than the registered threadcount.
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"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<!-- Ground -->
<path
android:fillColor="#111111"
android:pathData="M0,0h108v108h-108z" />
<!-- Warp: red -->
<path
android:fillColor="#B3121B"
android:pathData="M0,0h34.29v108h-34.29z" />
<path
android:fillColor="#B3121B"
android:pathData="M72,0h34.29v108h-34.29z" />
<!-- Warp: gold overstripe -->
<path
android:fillColor="#F2C200"
android:pathData="M68.57,0h3.43v108h-3.43z" />
<!-- Weft: red -->
<path
android:fillColor="#B3121B"
android:fillAlpha="0.5"
android:pathData="M0,0h108v34.29h-108z" />
<path
android:fillColor="#B3121B"
android:fillAlpha="0.5"
android:pathData="M0,72h108v34.29h-108z" />
<!-- Weft: black -->
<path
android:fillColor="#111111"
android:fillAlpha="0.5"
android:pathData="M0,34.29h108v34.28h-108z" />
<path
android:fillColor="#111111"
android:fillAlpha="0.5"
android:pathData="M0,106.29h108v1.71h-108z" />
<!-- Weft: gold overstripe -->
<path
android:fillColor="#F2C200"
android:fillAlpha="0.5"
android:pathData="M0,68.57h108v3.43h-108z" />
<group
android:rotation="45"
android:pivotX="54.0"
android:pivotY="54.0">
<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" />
<path android:fillColor="#E01B24" android:pathData="M-63.75,-90.00h22.50v288.00h-22.50z" />
<path android:fillColor="#E01B24" android:pathData="M-26.25,-90.00h22.50v288.00h-22.50z" />
<path android:fillColor="#F2C518" android:pathData="M0.00,-90.00h3.75v288.00h-3.75z" />
<path android:fillColor="#E01B24" android:pathData="M7.50,-90.00h22.50v288.00h-22.50z" />
<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>
+60 -16
View File
@@ -1,21 +1,65 @@
<?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
at icon scale so one full sett repeat fills the tile. -->
<!--
A single square of the Wallace tartan, set on the bias.
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"
android:width="48dp"
android:height="48dp"
android:viewportWidth="84"
android:viewportHeight="84">
<path android:fillColor="#111111" android:pathData="M0,0h84v84h-84z" />
<!-- Warp -->
<path android:fillColor="#B3121B" android:pathData="M0,0h40v84h-40z" />
<path android:fillColor="#F2C200" android:pathData="M80,0h4v84h-4z" />
<!-- Weft -->
<path android:fillColor="#B3121B" android:fillAlpha="0.5" android:pathData="M0,0h84v40h-84z" />
<path android:fillColor="#111111" android:fillAlpha="0.5" android:pathData="M0,40h84v40h-84z" />
<path android:fillColor="#F2C200" android:fillAlpha="0.5" android:pathData="M0,80h84v4h-84z" />
android:viewportWidth="108"
android:viewportHeight="108">
<group
android:rotation="45"
android:pivotX="54.0"
android:pivotY="54.0">
<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" />
<path android:fillColor="#E01B24" android:pathData="M-63.75,-90.00h22.50v288.00h-22.50z" />
<path android:fillColor="#E01B24" android:pathData="M-26.25,-90.00h22.50v288.00h-22.50z" />
<path android:fillColor="#F2C518" android:pathData="M0.00,-90.00h3.75v288.00h-3.75z" />
<path android:fillColor="#E01B24" android:pathData="M7.50,-90.00h22.50v288.00h-22.50z" />
<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>
+60 -16
View File
@@ -1,21 +1,65 @@
<?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
at icon scale so one full sett repeat fills the tile. -->
<!--
A single square of the Wallace tartan, set on the bias.
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"
android:width="48dp"
android:height="48dp"
android:viewportWidth="84"
android:viewportHeight="84">
<path android:fillColor="#111111" android:pathData="M0,0h84v84h-84z" />
<!-- Warp -->
<path android:fillColor="#B3121B" android:pathData="M0,0h40v84h-40z" />
<path android:fillColor="#F2C200" android:pathData="M80,0h4v84h-4z" />
<!-- Weft -->
<path android:fillColor="#B3121B" android:fillAlpha="0.5" android:pathData="M0,0h84v40h-84z" />
<path android:fillColor="#111111" android:fillAlpha="0.5" android:pathData="M0,40h84v40h-84z" />
<path android:fillColor="#F2C200" android:fillAlpha="0.5" android:pathData="M0,80h84v4h-84z" />
android:viewportWidth="108"
android:viewportHeight="108">
<group
android:rotation="45"
android:pivotX="54.0"
android:pivotY="54.0">
<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" />
<path android:fillColor="#E01B24" android:pathData="M-63.75,-90.00h22.50v288.00h-22.50z" />
<path android:fillColor="#E01B24" android:pathData="M-26.25,-90.00h22.50v288.00h-22.50z" />
<path android:fillColor="#F2C518" android:pathData="M0.00,-90.00h3.75v288.00h-3.75z" />
<path android:fillColor="#E01B24" android:pathData="M7.50,-90.00h22.50v288.00h-22.50z" />
<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>