From 56a067b91e17776edc5cf446d8cc3c1b2de10e22 Mon Sep 17 00:00:00 2001 From: Ali Nasrabadi Date: Sat, 13 Jul 2024 09:03:06 +0330 Subject: [PATCH 1/9] Add resources library --- build.gradle.kts | 1 + gradle/libs.versions.toml | 1 + library/resources/.gitignore | 1 + library/resources/build.gradle.kts | 9 +++++++++ .../src/main/java/me/nasrabadiam/resources/Resources.kt | 4 ++++ settings.gradle.kts | 1 + 6 files changed, 17 insertions(+) create mode 100644 library/resources/.gitignore create mode 100644 library/resources/build.gradle.kts create mode 100644 library/resources/src/main/java/me/nasrabadiam/resources/Resources.kt diff --git a/build.gradle.kts b/build.gradle.kts index 27adc46..7621235 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,6 +8,7 @@ plugins { alias(libs.plugins.parcelize) apply false alias(libs.plugins.sentry) apply false alias(libs.plugins.compose.compiler) apply false + alias(libs.plugins.kotlinJvm) apply false } tasks.register("detektAll") { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 943e71d..c2d921f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -53,6 +53,7 @@ materialWindow = { group = "androidx.compose.material3", name = "material3-windo [plugins] androidApplication = { id = "com.android.application", version.ref = "agp" } +javaLibrary = { id = "java-library" } kotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } kotlinJvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlinJvm" } diff --git a/library/resources/.gitignore b/library/resources/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/library/resources/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/library/resources/build.gradle.kts b/library/resources/build.gradle.kts new file mode 100644 index 0000000..dd54ebf --- /dev/null +++ b/library/resources/build.gradle.kts @@ -0,0 +1,9 @@ +plugins { + id(libs.plugins.javaLibrary.get().pluginId) + alias(libs.plugins.kotlinJvm) +} + +java { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 +} \ No newline at end of file diff --git a/library/resources/src/main/java/me/nasrabadiam/resources/Resources.kt b/library/resources/src/main/java/me/nasrabadiam/resources/Resources.kt new file mode 100644 index 0000000..35668ba --- /dev/null +++ b/library/resources/src/main/java/me/nasrabadiam/resources/Resources.kt @@ -0,0 +1,4 @@ +package me.nasrabadiam.resources + +class Resources { +} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index a8e838b..cfcdbe4 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -15,3 +15,4 @@ dependencyResolutionManagement { rootProject.name = "TicTacToe" include(":app") +include(":library:resources") From 90ff482e681b7499e71c505dc47a9a611ffdbf90 Mon Sep 17 00:00:00 2001 From: Ali Nasrabadi Date: Sat, 13 Jul 2024 09:05:49 +0330 Subject: [PATCH 2/9] Add project icon for ide --- .idea/icon.png | Bin 0 -> 16382 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 .idea/icon.png diff --git a/.idea/icon.png b/.idea/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f053582e000ca5a66407499538ff89b90fd1fcbd GIT binary patch literal 16382 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 literal 0 HcmV?d00001 From 7957db9eaa416d7f046499a3603171163aae7bce Mon Sep 17 00:00:00 2001 From: Ali Nasrabadi Date: Sat, 13 Jul 2024 10:57:09 +0330 Subject: [PATCH 3/9] Add resources module --- app/build.gradle.kts | 1 + library/resources/build.gradle.kts | 7 ++ .../me/nasrabadiam/resources/LocaleManager.kt | 31 ++++++++ .../java/me/nasrabadiam/resources/Lyricist.kt | 75 +++++++++++++++++++ .../nasrabadiam/resources/LyricistCompose.kt | 46 ++++++++++++ 5 files changed, 160 insertions(+) create mode 100644 library/resources/src/main/java/me/nasrabadiam/resources/LocaleManager.kt create mode 100644 library/resources/src/main/java/me/nasrabadiam/resources/Lyricist.kt create mode 100644 library/resources/src/main/java/me/nasrabadiam/resources/LyricistCompose.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 4a1f0a1..2ee452d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -76,6 +76,7 @@ dependencies { implementation(libs.androidx.window) implementation(libs.materialWindow) implementation(libs.navigation) + implementation(project(":library:resources")) ksp(libs.kotlin.inject.ksp) implementation(libs.kotlin.inject.runtime) diff --git a/library/resources/build.gradle.kts b/library/resources/build.gradle.kts index dd54ebf..6787e0d 100644 --- a/library/resources/build.gradle.kts +++ b/library/resources/build.gradle.kts @@ -1,9 +1,16 @@ plugins { id(libs.plugins.javaLibrary.get().pluginId) alias(libs.plugins.kotlinJvm) + alias(libs.plugins.compose.compiler) } java { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 +} + +dependencies{ + implementation(libs.coroutines) + implementation(platform(libs.compose.bom)) + implementation(libs.ui) } \ No newline at end of file diff --git a/library/resources/src/main/java/me/nasrabadiam/resources/LocaleManager.kt b/library/resources/src/main/java/me/nasrabadiam/resources/LocaleManager.kt new file mode 100644 index 0000000..6a9bd1c --- /dev/null +++ b/library/resources/src/main/java/me/nasrabadiam/resources/LocaleManager.kt @@ -0,0 +1,31 @@ +package me.nasrabadiam.resources + +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import me.nasrabadiam.resources.Locales.EN + +typealias Locale = String + +public object LocaleManager { + + var currentLocale: Locale by mutableStateOf(EN.getName()) + private set + + fun updateLocale(locale: Locales) { + currentLocale = locale.name.lowercase() + } +} + +public fun getLocale(): Locale { + return LocaleManager.currentLocale +} + +public enum class Locales { + EN, + FA; +} + +public fun Locales.getName(): String { + return this.name.lowercase() +} \ No newline at end of file diff --git a/library/resources/src/main/java/me/nasrabadiam/resources/Lyricist.kt b/library/resources/src/main/java/me/nasrabadiam/resources/Lyricist.kt new file mode 100644 index 0000000..f97455d --- /dev/null +++ b/library/resources/src/main/java/me/nasrabadiam/resources/Lyricist.kt @@ -0,0 +1,75 @@ +package me.nasrabadiam.resources + +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow + +public typealias LanguageTag = String + +public class Lyricist( + private val defaultLanguageTag: LanguageTag, + private val layoutDirections: Map, + private val translations: Map +) { + + private val mutableState: MutableStateFlow> = + MutableStateFlow( + LyricistState( + defaultLanguageTag, + getLayoutDirection(defaultLanguageTag), + getStrings(defaultLanguageTag) + ) + ) + + public val state: StateFlow> = + mutableState.asStateFlow() + + public var languageTag: LanguageTag + get() = mutableState.value.languageTag + set(languageTag) { + mutableState.value = LyricistState( + languageTag, + getLayoutDirection(languageTag), + getStrings(languageTag) + ) + } + + public val layoutDirection: LayoutDirection + get() = mutableState.value.layoutDirection + + public val strings: T + get() = mutableState.value.strings + + private val LanguageTag.fallback: LanguageTag + get() = split(FALLBACK_REGEX).first() + + private fun getStrings(languageTag: LanguageTag) = + translations[languageTag] + ?: translations[languageTag.fallback] + ?: translations[defaultLanguageTag] + ?: throw LyricistException("Strings for language tag $languageTag not found") + + private fun getLayoutDirection(languageTag: LanguageTag): LayoutDirection = + layoutDirections[languageTag] + ?: layoutDirections[languageTag.fallback] + ?: layoutDirections[defaultLanguageTag] + ?: throw LyricistException("LayoutDirection for language tag $languageTag not found") + + private companion object { + private val FALLBACK_REGEX = Regex("[-_]") + } +} + +public data class LyricistState internal constructor( + val languageTag: LanguageTag, + val layoutDirection: LayoutDirection, + val strings: T, +) + +public class LyricistException internal constructor( + override val message: String +) : RuntimeException() + +public enum class LayoutDirection { + Ltr, Rtl +} diff --git a/library/resources/src/main/java/me/nasrabadiam/resources/LyricistCompose.kt b/library/resources/src/main/java/me/nasrabadiam/resources/LyricistCompose.kt new file mode 100644 index 0000000..bd078d5 --- /dev/null +++ b/library/resources/src/main/java/me/nasrabadiam/resources/LyricistCompose.kt @@ -0,0 +1,46 @@ +package me.nasrabadiam.resources + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.ProvidableCompositionLocal +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.ui.platform.LocalLayoutDirection +import androidx.compose.ui.text.intl.Locale +import androidx.compose.ui.unit.LayoutDirection as ComposeLayoutDirection + +@Composable +public fun rememberStrings( + translations: Map, + layoutDirections: Map, + defaultLanguageTag: LanguageTag = "en", + currentLanguageTag: LanguageTag = Locale.current.toLanguageTag() +): Lyricist = + remember(defaultLanguageTag) { + Lyricist(defaultLanguageTag, layoutDirections, translations) + }.apply { + languageTag = currentLanguageTag + } + +@Composable +public fun ProvideStrings( + lyricist: Lyricist, + provider: ProvidableCompositionLocal, + content: @Composable () -> Unit +) { + val state by lyricist.state.collectAsState() + + CompositionLocalProvider( + provider provides state.strings, + LocalLayoutDirection provides state.layoutDirection.toComposeLayoutDirection(), + content = content + ) +} + +private fun LayoutDirection.toComposeLayoutDirection(): ComposeLayoutDirection { + return when (this) { + LayoutDirection.Ltr -> ComposeLayoutDirection.Ltr + LayoutDirection.Rtl -> ComposeLayoutDirection.Rtl + } +} From 0397c214267c64ac8dd2e0adb09f5a0f5705ded7 Mon Sep 17 00:00:00 2001 From: Ali Nasrabadi Date: Sat, 13 Jul 2024 10:57:37 +0330 Subject: [PATCH 4/9] Add project strings --- .../tictactoe/strings/AppStrings.kt | 54 +++++++++++++++++++ .../tictactoe/strings/EnStrings.kt | 9 ++++ .../tictactoe/strings/FaStrings.kt | 9 ++++ .../nasrabadiam/tictactoe/strings/Strings.kt | 9 ++++ .../nasrabadiam/tictactoe/ui/theme/Theme.kt | 20 +++++-- 5 files changed, 96 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/me/nasrabadiam/tictactoe/strings/AppStrings.kt create mode 100644 app/src/main/java/me/nasrabadiam/tictactoe/strings/EnStrings.kt create mode 100644 app/src/main/java/me/nasrabadiam/tictactoe/strings/FaStrings.kt create mode 100644 app/src/main/java/me/nasrabadiam/tictactoe/strings/Strings.kt diff --git a/app/src/main/java/me/nasrabadiam/tictactoe/strings/AppStrings.kt b/app/src/main/java/me/nasrabadiam/tictactoe/strings/AppStrings.kt new file mode 100644 index 0000000..99f8ff2 --- /dev/null +++ b/app/src/main/java/me/nasrabadiam/tictactoe/strings/AppStrings.kt @@ -0,0 +1,54 @@ +package me.nasrabadiam.tictactoe.strings + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.ProvidableCompositionLocal +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.text.intl.Locale +import me.nasrabadiam.resources.LanguageTag +import me.nasrabadiam.resources.LayoutDirection +import me.nasrabadiam.resources.Locales +import me.nasrabadiam.resources.Lyricist +import me.nasrabadiam.resources.ProvideStrings +import me.nasrabadiam.resources.getName +import me.nasrabadiam.resources.rememberStrings + +internal val AppStrings: Map = mapOf( + Locales.EN.getName() to EnStrings, + Locales.FA.getName() to FaStrings, +) + +internal val AppStringsLayoutDirections: Map = mapOf( + Locales.EN.getName() to LayoutDirection.Ltr, + Locales.FA.getName() to LayoutDirection.Rtl, +) + +internal val LocalStrings: ProvidableCompositionLocal = + staticCompositionLocalOf { EnStrings } + +internal val appStrings: Strings + @Composable + get() = LocalStrings.current + +internal fun getAppStrings(locale: Locale = Locale.current): Strings { + return (AppStrings[locale.toLanguageTag()] ?: EnStrings) +} + +@Composable +internal fun rememberAppStrings( + defaultLanguageTag: LanguageTag = Locales.EN.getName(), + currentLanguageTag: LanguageTag = Locale.current.toLanguageTag(), +): Lyricist = + rememberStrings( + AppStrings, + AppStringsLayoutDirections, + defaultLanguageTag, + currentLanguageTag + ) + +@Composable +internal fun ProvideAppStrings( + lyricist: Lyricist = rememberAppStrings(), + content: @Composable () -> Unit +) { + ProvideStrings(lyricist, LocalStrings, content) +} \ No newline at end of file diff --git a/app/src/main/java/me/nasrabadiam/tictactoe/strings/EnStrings.kt b/app/src/main/java/me/nasrabadiam/tictactoe/strings/EnStrings.kt new file mode 100644 index 0000000..5b3a1ca --- /dev/null +++ b/app/src/main/java/me/nasrabadiam/tictactoe/strings/EnStrings.kt @@ -0,0 +1,9 @@ +package me.nasrabadiam.tictactoe.strings + +internal val EnStrings = Strings( + playSolo = "Play solo", + comingSoon = "(coming soon)", + playWithAFriend = "Play with a friend", + restart = "Restart", + gameRules = "Game Rules" +) \ No newline at end of file diff --git a/app/src/main/java/me/nasrabadiam/tictactoe/strings/FaStrings.kt b/app/src/main/java/me/nasrabadiam/tictactoe/strings/FaStrings.kt new file mode 100644 index 0000000..65d174d --- /dev/null +++ b/app/src/main/java/me/nasrabadiam/tictactoe/strings/FaStrings.kt @@ -0,0 +1,9 @@ +package me.nasrabadiam.tictactoe.strings + +internal val FaStrings = Strings( + playSolo = "بازی یک نفره", + comingSoon = "(به زودی)", + playWithAFriend = "بازی دو نفره", + restart = "شروع دوباره", + gameRules = "قوانین بازی " +) \ No newline at end of file diff --git a/app/src/main/java/me/nasrabadiam/tictactoe/strings/Strings.kt b/app/src/main/java/me/nasrabadiam/tictactoe/strings/Strings.kt new file mode 100644 index 0000000..9676fcd --- /dev/null +++ b/app/src/main/java/me/nasrabadiam/tictactoe/strings/Strings.kt @@ -0,0 +1,9 @@ +package me.nasrabadiam.tictactoe.strings + +internal data class Strings( + val playSolo: String, + val comingSoon: String, + val playWithAFriend: String, + val restart: String, + val gameRules: String, +) \ No newline at end of file diff --git a/app/src/main/java/me/nasrabadiam/tictactoe/ui/theme/Theme.kt b/app/src/main/java/me/nasrabadiam/tictactoe/ui/theme/Theme.kt index 38185a7..5e5c554 100644 --- a/app/src/main/java/me/nasrabadiam/tictactoe/ui/theme/Theme.kt +++ b/app/src/main/java/me/nasrabadiam/tictactoe/ui/theme/Theme.kt @@ -14,6 +14,10 @@ import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalView import androidx.core.view.WindowCompat +import me.nasrabadiam.resources.Locale +import me.nasrabadiam.resources.LocaleManager +import me.nasrabadiam.tictactoe.strings.ProvideAppStrings +import me.nasrabadiam.tictactoe.strings.rememberAppStrings private val DarkColorScheme = darkColorScheme( primary = Purple80, @@ -39,6 +43,7 @@ private val LightColorScheme = lightColorScheme( @Composable fun TicTacToeTheme( + currentLocale: Locale = LocaleManager.currentLocale, darkTheme: Boolean = isSystemInDarkTheme(), // Dynamic color is available on Android 12+ dynamicColor: Boolean = true, @@ -63,9 +68,14 @@ fun TicTacToeTheme( } } - MaterialTheme( - colorScheme = colorScheme, - typography = Typography, - content = content - ) + val currentLanguage = rememberAppStrings().apply { + languageTag = currentLocale + } + ProvideAppStrings(currentLanguage) { + MaterialTheme( + colorScheme = colorScheme, + typography = Typography, + content = content + ) + } } \ No newline at end of file From 2dc87c8c1b63875bca32bffbe653f4ff6a39fbcc Mon Sep 17 00:00:00 2001 From: Ali Nasrabadi Date: Sat, 13 Jul 2024 10:58:00 +0330 Subject: [PATCH 5/9] Use project strings instead of hard coded strings --- .../tictactoe/game/ui/GameScreen.kt | 22 +++++++++---------- .../nasrabadiam/tictactoe/home/HomeScreen.kt | 22 +++++++++++-------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/me/nasrabadiam/tictactoe/game/ui/GameScreen.kt b/app/src/main/java/me/nasrabadiam/tictactoe/game/ui/GameScreen.kt index 1a35e62..46875bc 100644 --- a/app/src/main/java/me/nasrabadiam/tictactoe/game/ui/GameScreen.kt +++ b/app/src/main/java/me/nasrabadiam/tictactoe/game/ui/GameScreen.kt @@ -32,6 +32,8 @@ import androidx.compose.ui.unit.dp import me.nasrabadiam.tictactoe.game.ui.GameEvent.CellClicked import me.nasrabadiam.tictactoe.game.ui.GameEvent.RestartClicked import me.nasrabadiam.tictactoe.game.ui.GameEvent.RulesClicked +import me.nasrabadiam.tictactoe.strings.appStrings +import me.nasrabadiam.tictactoe.strings.getAppStrings import me.nasrabadiam.tictactoe.ui.GameWindowSizeClass import me.nasrabadiam.tictactoe.ui.GameWindowSizeClass.COMPACT import me.nasrabadiam.tictactoe.ui.GameWindowSizeClass.EXPANDED @@ -205,7 +207,7 @@ private fun CompactGameScreen( Button( modifier = Modifier - .semantics { contentDescription = RESTART_BUTTON_TEXT } + .semantics { contentDescription = getAppStrings().restart } .padding(horizontal = 24.dp) .weight(1f) .widthIn(min = 124.dp, max = 210.dp), @@ -216,20 +218,20 @@ private fun CompactGameScreen( contentDescription = null ) Spacer(modifier = Modifier.width(16.dp)) - Text(text = RESTART_BUTTON_TEXT) + Text(text = appStrings.restart) } Button( modifier = Modifier - .semantics { contentDescription = COMING_SOON_BUTTON_TEXT } + .semantics { contentDescription = getAppStrings().comingSoon } .padding(horizontal = 24.dp) .weight(1f) .widthIn(min = 124.dp, max = 210.dp), enabled = false, onClick = { sendEvent(RulesClicked) } ) { - Text(text = GAME_RULE_BUTTON_TEXT) + Text(text = appStrings.gameRules) Text( - text = COMING_SOON_BUTTON_TEXT, + text = appStrings.comingSoon, style = MaterialTheme.typography.labelSmall ) } @@ -274,7 +276,7 @@ private fun ActionButtons( Icon(imageVector = Icons.Rounded.Refresh, contentDescription = null) Spacer(modifier = Modifier.width(16.dp)) Text( - text = RESTART_BUTTON_TEXT, + text = appStrings.restart, overflow = TextOverflow.Ellipsis, maxLines = 1 ) @@ -287,18 +289,14 @@ private fun ActionButtons( enabled = false, onClick = onRulesClicked ) { - Text(text = GAME_RULE_BUTTON_TEXT) + Text(text = appStrings.gameRules) Text( - text = COMING_SOON_BUTTON_TEXT, + text = appStrings.comingSoon, style = MaterialTheme.typography.labelSmall ) } } -private const val RESTART_BUTTON_TEXT = "Restart" -private const val GAME_RULE_BUTTON_TEXT = "Game Rules" -private const val COMING_SOON_BUTTON_TEXT = "(Coming Soon)" - @Preview(showBackground = true) @Preview(showSystemUi = true, device = Devices.TABLET) @Composable diff --git a/app/src/main/java/me/nasrabadiam/tictactoe/home/HomeScreen.kt b/app/src/main/java/me/nasrabadiam/tictactoe/home/HomeScreen.kt index fdbc198..6808dbd 100644 --- a/app/src/main/java/me/nasrabadiam/tictactoe/home/HomeScreen.kt +++ b/app/src/main/java/me/nasrabadiam/tictactoe/home/HomeScreen.kt @@ -2,6 +2,7 @@ package me.nasrabadiam.tictactoe.home import androidx.compose.foundation.Image import androidx.compose.foundation.background +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -35,6 +36,10 @@ import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import me.nasrabadiam.tictactoe.R import me.nasrabadiam.tictactoe.home.HomeEvent.PlayWithAFriend +import me.nasrabadiam.resources.LocaleManager +import me.nasrabadiam.resources.Locales +import me.nasrabadiam.tictactoe.strings.appStrings +import me.nasrabadiam.tictactoe.strings.getAppStrings import me.nasrabadiam.tictactoe.ui.GameWindowSizeClass import me.nasrabadiam.tictactoe.ui.GameWindowSizeClass.COMPACT import me.nasrabadiam.tictactoe.ui.GameWindowSizeClass.EXPANDED @@ -146,7 +151,7 @@ private fun GameButtons( ) { Button( modifier = modifier - .semantics { contentDescription = PLAY_WITH_A_FRIEND_TEXT } + .semantics { contentDescription = getAppStrings().playWithAFriend } .widthIn(220.dp), colors = ButtonDefaults.buttonColors().copy( contentColor = MaterialTheme.colorScheme.onPrimary, @@ -164,13 +169,16 @@ private fun GameButtons( ) Text( modifier = Modifier.padding(start = 8.dp), - text = PLAY_WITH_A_FRIEND_TEXT + text = appStrings.playWithAFriend ) } buttonsSpace() Button( modifier = modifier - .semantics { contentDescription = PLAY_SOLO_TEXT + COMING_SOON_TEXT } + .semantics { + val playSoloContentDesc = getAppStrings().playSolo + getAppStrings().comingSoon + contentDescription = playSoloContentDesc + } .widthIn(min = 220.dp), onClick = { TODO("Not Implemented yet!") }, enabled = false @@ -182,20 +190,16 @@ private fun GameButtons( ) Text( modifier = Modifier.padding(start = 8.dp), - text = PLAY_SOLO_TEXT + text = appStrings.playSolo ) Text( modifier = Modifier.padding(start = 2.dp), - text = COMING_SOON_TEXT, + text = appStrings.comingSoon, style = MaterialTheme.typography.labelSmall ) } } -private const val PLAY_SOLO_TEXT = "Play solo" -private const val COMING_SOON_TEXT = "(coming soon)" -private const val PLAY_WITH_A_FRIEND_TEXT = "Play with a friend" - @Preview(showBackground = true) @Preview(showSystemUi = true, device = Devices.TABLET) @Composable From 19ad5f891aaaf3078e665af18e0e97f6aef4445c Mon Sep 17 00:00:00 2001 From: Ali Nasrabadi Date: Sat, 13 Jul 2024 10:58:12 +0330 Subject: [PATCH 6/9] Remove unused files --- .gitignore | 3 ++- .../src/main/java/me/nasrabadiam/resources/Resources.kt | 4 ---- 2 files changed, 2 insertions(+), 5 deletions(-) delete mode 100644 library/resources/src/main/java/me/nasrabadiam/resources/Resources.kt diff --git a/.gitignore b/.gitignore index 8cf0ec8..ad20951 100644 --- a/.gitignore +++ b/.gitignore @@ -42,4 +42,5 @@ local.properties _sandbox # Android Studio captures folder -captures/ \ No newline at end of file +captures/ +/.kotlin/* diff --git a/library/resources/src/main/java/me/nasrabadiam/resources/Resources.kt b/library/resources/src/main/java/me/nasrabadiam/resources/Resources.kt deleted file mode 100644 index 35668ba..0000000 --- a/library/resources/src/main/java/me/nasrabadiam/resources/Resources.kt +++ /dev/null @@ -1,4 +0,0 @@ -package me.nasrabadiam.resources - -class Resources { -} \ No newline at end of file From fa890e4780e91ff51244a39f50f5c024b18b6583 Mon Sep 17 00:00:00 2001 From: Ali Nasrabadi Date: Sat, 13 Jul 2024 11:07:17 +0330 Subject: [PATCH 7/9] Refactor ui tests --- .../tictactoe/game/GameClickTests.kt | 19 +++++++++---- .../tictactoe/game/GameLogicTests.kt | 27 ++++++++++++------- .../tictactoe/game/GameScoreTests.kt | 17 +++++++++--- .../nasrabadiam/tictactoe/game/GameTests.kt | 23 +++++++++++----- .../tictactoe/game/GameTurnTests.kt | 19 +++++++++---- .../tictactoe/home/HomeScreenTests.kt | 23 ++++++++++------ 6 files changed, 90 insertions(+), 38 deletions(-) diff --git a/app/src/androidTest/java/me/nasrabadiam/tictactoe/game/GameClickTests.kt b/app/src/androidTest/java/me/nasrabadiam/tictactoe/game/GameClickTests.kt index 60ac904..84a51bc 100644 --- a/app/src/androidTest/java/me/nasrabadiam/tictactoe/game/GameClickTests.kt +++ b/app/src/androidTest/java/me/nasrabadiam/tictactoe/game/GameClickTests.kt @@ -1,5 +1,6 @@ package me.nasrabadiam.tictactoe.game +import androidx.compose.ui.test.junit4.ComposeContentTestRule import androidx.compose.ui.test.junit4.createComposeRule import androidx.lifecycle.SavedStateHandle import me.nasrabadiam.tictactoe.assertPlayersCountEquals @@ -7,7 +8,7 @@ import me.nasrabadiam.tictactoe.clickOnCell import me.nasrabadiam.tictactoe.game.model.Player import me.nasrabadiam.tictactoe.game.ui.GameScreen import me.nasrabadiam.tictactoe.game.ui.GameViewModel -import me.nasrabadiam.tictactoe.ui.GameWindowSizeClass.COMPACT +import me.nasrabadiam.tictactoe.ui.getWindowSizeClass import org.junit.Rule import org.junit.Test @@ -18,11 +19,19 @@ class GameClickTests { private val gameUseCase = GameUseCase() private val gameViewModel = GameViewModel(gameUseCase, SavedStateHandle()) - private val windowClass = COMPACT + + private fun ComposeContentTestRule.setContent( + viewModel: GameViewModel = gameViewModel + ) { + setContent { + val windowSizeClass = getWindowSizeClass() + GameScreen(viewModel, windowSizeClass) + } + } @Test fun whenClickOnCellsShouldDrawItem(): Unit = with(composeRule) { - setContent { GameScreen(gameViewModel, windowClass) } + setContent() clickOnCell(0, 0) @@ -31,7 +40,7 @@ class GameClickTests { @Test fun whenClickOnSecondCellShouldChangeTurn(): Unit = with(composeRule) { - setContent { GameScreen(gameViewModel, windowClass) } + setContent() clickOnCell(0, 0) clickOnCell(1, 1) @@ -42,7 +51,7 @@ class GameClickTests { @Test fun whenClickOnCellThatClickedBeforeShouldDoNothing(): Unit = with(composeRule) { - setContent { GameScreen(gameViewModel, windowClass) } + setContent() clickOnCell(0, 0) diff --git a/app/src/androidTest/java/me/nasrabadiam/tictactoe/game/GameLogicTests.kt b/app/src/androidTest/java/me/nasrabadiam/tictactoe/game/GameLogicTests.kt index 83c1d7c..655239a 100644 --- a/app/src/androidTest/java/me/nasrabadiam/tictactoe/game/GameLogicTests.kt +++ b/app/src/androidTest/java/me/nasrabadiam/tictactoe/game/GameLogicTests.kt @@ -4,6 +4,7 @@ import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.hasContentDescription import androidx.compose.ui.test.hasText import androidx.compose.ui.test.isDisplayed +import androidx.compose.ui.test.junit4.ComposeContentTestRule import androidx.compose.ui.test.junit4.createComposeRule import androidx.lifecycle.SavedStateHandle import me.nasrabadiam.tictactoe.DRAW_RESULT_STRING @@ -14,7 +15,7 @@ import me.nasrabadiam.tictactoe.clickOnCell import me.nasrabadiam.tictactoe.game.model.Player import me.nasrabadiam.tictactoe.game.ui.GameScreen import me.nasrabadiam.tictactoe.game.ui.GameViewModel -import me.nasrabadiam.tictactoe.ui.GameWindowSizeClass.COMPACT +import me.nasrabadiam.tictactoe.ui.getWindowSizeClass import org.junit.Rule import org.junit.Test @@ -25,7 +26,15 @@ class GameLogicTests { private val gameUseCase = GameUseCase() private val gameViewModel = GameViewModel(gameUseCase, SavedStateHandle()) - private val windowClass = COMPACT + + private fun ComposeContentTestRule.setContent( + viewModel: GameViewModel = gameViewModel + ) { + setContent { + val windowSizeClass = getWindowSizeClass() + GameScreen(viewModel, windowSizeClass) + } + } /** * X - M - M @@ -34,7 +43,7 @@ class GameLogicTests { */ @Test fun whenXWinsVerticallyShouldShowWinnerAndEndsTheGame(): Unit = with(composeRule) { - setContent { GameScreen(gameViewModel, windowClass) } + setContent() val colIndex = 0 clickOnCell(col = colIndex, row = 0) // X @@ -57,7 +66,7 @@ class GameLogicTests { */ @Test fun whenXWinsHorizontallyShouldShowWinnerAndEndsTheGame(): Unit = with(composeRule) { - setContent { GameScreen(gameViewModel, windowClass) } + setContent() val rowIndex = 0 clickOnCell(col = 0, row = rowIndex) // X @@ -80,7 +89,7 @@ class GameLogicTests { */ @Test fun whenXWinsInCrossShouldShowWinnerAndEndsTheGame(): Unit = with(composeRule) { - setContent { GameScreen(gameViewModel, windowClass) } + setContent() clickOnCell(col = 0, row = 0) // X clickOnCell(col = 0, row = 1) // O @@ -102,7 +111,7 @@ class GameLogicTests { */ @Test fun whenOWinsVerticallyShouldShowWinnerAndEndsTheGame(): Unit = with(composeRule) { - setContent { GameScreen(gameViewModel, windowClass) } + setContent() val colIndex = 2 clickOnCell(col = 0, row = 0) // X @@ -126,7 +135,7 @@ class GameLogicTests { */ @Test fun whenOWinsHorizontallyShouldShowWinnerAndEndsTheGame(): Unit = with(composeRule) { - setContent { GameScreen(gameViewModel, windowClass) } + setContent() val rowIndex = 1 clickOnCell(col = 0, row = 0) // X @@ -150,7 +159,7 @@ class GameLogicTests { */ @Test fun whenOWinsInCrossShouldShowWinnerAndEndsTheGame(): Unit = with(composeRule) { - setContent { GameScreen(gameViewModel, windowClass) } + setContent() clickOnCell(col = 0, row = 0) // X clickOnCell(col = 2, row = 0) // O @@ -173,7 +182,7 @@ class GameLogicTests { */ @Test fun whenOAndXDrawShouldShowDrawAndEndsTheGame(): Unit = with(composeRule) { - setContent { GameScreen(gameViewModel, windowClass) } + setContent() clickOnCell(col = 0, row = 0) // X clickOnCell(col = 2, row = 0) // O diff --git a/app/src/androidTest/java/me/nasrabadiam/tictactoe/game/GameScoreTests.kt b/app/src/androidTest/java/me/nasrabadiam/tictactoe/game/GameScoreTests.kt index 0ed8d23..4879c46 100644 --- a/app/src/androidTest/java/me/nasrabadiam/tictactoe/game/GameScoreTests.kt +++ b/app/src/androidTest/java/me/nasrabadiam/tictactoe/game/GameScoreTests.kt @@ -2,6 +2,7 @@ package me.nasrabadiam.tictactoe.game import androidx.compose.ui.test.assertAny import androidx.compose.ui.test.hasText +import androidx.compose.ui.test.junit4.ComposeContentTestRule import androidx.compose.ui.test.junit4.createComposeRule import androidx.compose.ui.test.onChildren import androidx.compose.ui.test.onNodeWithContentDescription @@ -12,7 +13,7 @@ import me.nasrabadiam.tictactoe.REPLAY_GAME_BUTTON_TEXT import me.nasrabadiam.tictactoe.clickOnCell import me.nasrabadiam.tictactoe.game.ui.GameScreen import me.nasrabadiam.tictactoe.game.ui.GameViewModel -import me.nasrabadiam.tictactoe.ui.GameWindowSizeClass.COMPACT +import me.nasrabadiam.tictactoe.ui.getWindowSizeClass import org.junit.Rule import org.junit.Test @@ -23,11 +24,19 @@ class GameScoreTests { private val gameUseCase = GameUseCase() private val gameViewModel = GameViewModel(gameUseCase, SavedStateHandle()) - private val windowClass = COMPACT + + private fun ComposeContentTestRule.setContent( + viewModel: GameViewModel = gameViewModel + ) { + setContent { + val windowSizeClass = getWindowSizeClass() + GameScreen(viewModel, windowSizeClass) + } + } @Test fun whenXWinsOneTimeShouldShowScore1AndO0(): Unit = with(composeRule) { - setContent { GameScreen(gameViewModel, windowClass) } + setContent() val rowIndex = 0 clickOnCell(col = 0, row = rowIndex) // X @@ -46,7 +55,7 @@ class GameScoreTests { @Test fun whenXWinsOneTimeAndOWinsAnotherShouldShowScore1ForXAnd1ForO(): Unit = with(composeRule) { - setContent { GameScreen(gameViewModel, windowClass) } + setContent() val rowIndex = 0 clickOnCell(col = 0, row = rowIndex) // X diff --git a/app/src/androidTest/java/me/nasrabadiam/tictactoe/game/GameTests.kt b/app/src/androidTest/java/me/nasrabadiam/tictactoe/game/GameTests.kt index 314c04b..4c2136c 100644 --- a/app/src/androidTest/java/me/nasrabadiam/tictactoe/game/GameTests.kt +++ b/app/src/androidTest/java/me/nasrabadiam/tictactoe/game/GameTests.kt @@ -6,6 +6,7 @@ import androidx.compose.ui.test.assertIsNotDisplayed import androidx.compose.ui.test.hasTestTag import androidx.compose.ui.test.hasText import androidx.compose.ui.test.isDisplayed +import androidx.compose.ui.test.junit4.ComposeContentTestRule import androidx.compose.ui.test.junit4.createComposeRule import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick @@ -21,7 +22,7 @@ import me.nasrabadiam.tictactoe.game.model.Player import me.nasrabadiam.tictactoe.game.ui.GameScreen import me.nasrabadiam.tictactoe.game.ui.GameViewModel import me.nasrabadiam.tictactoe.getCellTestTag -import me.nasrabadiam.tictactoe.ui.GameWindowSizeClass.COMPACT +import me.nasrabadiam.tictactoe.ui.getWindowSizeClass import org.junit.Rule import org.junit.Test @@ -32,11 +33,19 @@ class GameTests { private val gameUseCase = GameUseCase() private val gameViewModel = GameViewModel(gameUseCase, SavedStateHandle()) - private val windowClass = COMPACT + + private fun ComposeContentTestRule.setContent( + viewModel: GameViewModel = gameViewModel + ) { + setContent { + val windowSizeClass = getWindowSizeClass() + GameScreen(viewModel, windowSizeClass) + } + } @Test fun displayGameCells(): Unit = with(composeRule) { - setContent { GameScreen(gameViewModel, windowClass) } + setContent() for (index in 0..DEFAULT_BOARD_CELL_COUNT) { onNode(hasTestTag(getCellTestTag(index))).isDisplayed() } @@ -44,14 +53,14 @@ class GameTests { @Test fun displayRestartButton(): Unit = with(composeRule) { - setContent { GameScreen(gameViewModel, windowClass) } + setContent() onNodeWithText(RESTART_GAME_BUTTON_TEXT).assertIsDisplayed() } @Test fun displayReplayButtonWhenOneGameFinished(): Unit = with(composeRule) { - setContent { GameScreen(gameViewModel, windowClass) } + setContent() onNodeWithText(REPLAY_GAME_BUTTON_TEXT).assertIsNotDisplayed() @@ -74,7 +83,7 @@ class GameTests { @Test fun restartGameBoardWhenClickOnReplayButton(): Unit = with(composeRule) { - setContent { GameScreen(gameViewModel, windowClass) } + setContent() clickOnCell(col = 0, row = 0) // X clickOnCell(col = 2, row = 0) // O @@ -101,7 +110,7 @@ class GameTests { @Test fun whenClickOnRestartGameButtonShouldRestartGame(): Unit = with(composeRule) { - setContent { GameScreen(gameViewModel, windowClass) } + setContent() clickOnCell(col = 0, row = 0) // X clickOnCell(col = 2, row = 0) // O diff --git a/app/src/androidTest/java/me/nasrabadiam/tictactoe/game/GameTurnTests.kt b/app/src/androidTest/java/me/nasrabadiam/tictactoe/game/GameTurnTests.kt index ada6b32..c7d86ef 100644 --- a/app/src/androidTest/java/me/nasrabadiam/tictactoe/game/GameTurnTests.kt +++ b/app/src/androidTest/java/me/nasrabadiam/tictactoe/game/GameTurnTests.kt @@ -1,5 +1,6 @@ package me.nasrabadiam.tictactoe.game +import androidx.compose.ui.test.junit4.ComposeContentTestRule import androidx.compose.ui.test.junit4.createComposeRule import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick @@ -10,7 +11,7 @@ import me.nasrabadiam.tictactoe.clickOnCell import me.nasrabadiam.tictactoe.game.model.Player import me.nasrabadiam.tictactoe.game.ui.GameScreen import me.nasrabadiam.tictactoe.game.ui.GameViewModel -import me.nasrabadiam.tictactoe.ui.GameWindowSizeClass.COMPACT +import me.nasrabadiam.tictactoe.ui.getWindowSizeClass import org.junit.Rule import org.junit.Test @@ -21,11 +22,19 @@ class GameTurnTests { private val gameUseCase = GameUseCase() private val gameViewModel = GameViewModel(gameUseCase, SavedStateHandle()) - private val windowClass = COMPACT + + private fun ComposeContentTestRule.setContent( + viewModel: GameViewModel = gameViewModel + ) { + setContent { + val windowSizeClass = getWindowSizeClass() + GameScreen(viewModel, windowSizeClass) + } + } @Test fun whenGameStartsXShouldStartTheGame(): Unit = with(composeRule) { - setContent { GameScreen(gameViewModel, windowClass) } + setContent() clickOnCell(0, 0) @@ -35,7 +44,7 @@ class GameTurnTests { @Test fun whenGameDrawsWhoDoesNotPlayThisGameFirstShouldPlayFirst(): Unit = with(composeRule) { - setContent { GameScreen(gameViewModel, windowClass) } + setContent() clickOnCell(col = 0, row = 0) // X clickOnCell(col = 2, row = 0) // O @@ -61,7 +70,7 @@ class GameTurnTests { @Test fun whenXWinsTheGameShouldStartTheNextGame(): Unit = with(composeRule) { - setContent { GameScreen(gameViewModel, windowClass) } + setContent() val colIndex = 0 diff --git a/app/src/androidTest/java/me/nasrabadiam/tictactoe/home/HomeScreenTests.kt b/app/src/androidTest/java/me/nasrabadiam/tictactoe/home/HomeScreenTests.kt index 4d8e11e..43506b1 100644 --- a/app/src/androidTest/java/me/nasrabadiam/tictactoe/home/HomeScreenTests.kt +++ b/app/src/androidTest/java/me/nasrabadiam/tictactoe/home/HomeScreenTests.kt @@ -2,10 +2,11 @@ package me.nasrabadiam.tictactoe.home import androidx.compose.ui.test.assertIsNotEnabled import androidx.compose.ui.test.hasContentDescription +import androidx.compose.ui.test.junit4.ComposeContentTestRule import androidx.compose.ui.test.junit4.createComposeRule import androidx.compose.ui.test.performClick import me.nasrabadiam.tictactoe.home.HomeEvent.PlayWithAFriend -import me.nasrabadiam.tictactoe.ui.GameWindowSizeClass.NORMAL +import me.nasrabadiam.tictactoe.ui.getWindowSizeClass import org.junit.Rule import org.junit.Test @@ -14,25 +15,31 @@ class HomeScreenTests { @get:Rule val composeRule = createComposeRule() - private val windowClass = NORMAL - private val homeEvent: (HomeEvent) -> Unit = { } + private fun ComposeContentTestRule.setContent( + homeEvent: (HomeEvent) -> Unit = {} + ) { + setContent { + val windowSizeClass = getWindowSizeClass() + HomeScreen(homeEvent, windowSizeClass) + } + } @Test fun whenOpenHomeScreenShouldShowAppIcon(): Unit = with(composeRule) { - setContent { HomeScreen(homeEvent, windowClass) } + setContent() onNode(hasContentDescription("App Logo")).assertExists() } @Test fun whenOpenHomeScreenShouldShowPlayWithAFriendButton(): Unit = with(composeRule) { - setContent { HomeScreen(homeEvent, windowClass) } + setContent() onNode(hasContentDescription(PLAY_WITH_A_FRIEND_BUTTON_TEXT)).assertExists() } @Test fun whenOpenHomeScreenShouldShowPlaySoloButtonDisabled(): Unit = with(composeRule) { - setContent { HomeScreen(homeEvent, windowClass) } + setContent() val soloButton = onNode(hasContentDescription(PLAY_SOLO_BUTTON_TEXT)) soloButton.assertExists() soloButton.assertIsNotEnabled() @@ -40,7 +47,7 @@ class HomeScreenTests { @Test fun whenClickedOnPlaySoloShouldDoNothing(): Unit = with(composeRule) { - setContent { HomeScreen(homeEvent, windowClass) } + setContent() val playSoloButton = onNode(hasContentDescription(PLAY_SOLO_BUTTON_TEXT)) playSoloButton.performClick() playSoloButton.assertExists() @@ -52,7 +59,7 @@ class HomeScreenTests { val homeEvent: (HomeEvent) -> Unit = { if (it == PlayWithAFriend) clicked = true } - setContent { HomeScreen(homeEvent, windowClass) } + setContent(homeEvent) onNode(hasContentDescription(PLAY_WITH_A_FRIEND_BUTTON_TEXT)).performClick() assert(clicked) { "when clicked on play with a friend button," + From 6f131db8df60f925d01978d5a64dde20b7e9f7b6 Mon Sep 17 00:00:00 2001 From: Ali Nasrabadi Date: Sat, 13 Jul 2024 11:19:43 +0330 Subject: [PATCH 8/9] Fix detekt issues --- app/src/main/java/me/nasrabadiam/tictactoe/home/HomeScreen.kt | 3 --- .../main/java/me/nasrabadiam/tictactoe/strings/AppStrings.kt | 4 ++-- library/resources/build.gradle.kts | 2 +- .../src/main/java/me/nasrabadiam/resources/LocaleManager.kt | 3 +-- .../src/main/java/me/nasrabadiam/resources/Lyricist.kt | 2 +- .../src/main/java/me/nasrabadiam/resources/LyricistCompose.kt | 4 ++-- 6 files changed, 7 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/me/nasrabadiam/tictactoe/home/HomeScreen.kt b/app/src/main/java/me/nasrabadiam/tictactoe/home/HomeScreen.kt index 6808dbd..2f547cd 100644 --- a/app/src/main/java/me/nasrabadiam/tictactoe/home/HomeScreen.kt +++ b/app/src/main/java/me/nasrabadiam/tictactoe/home/HomeScreen.kt @@ -2,7 +2,6 @@ package me.nasrabadiam.tictactoe.home import androidx.compose.foundation.Image import androidx.compose.foundation.background -import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -36,8 +35,6 @@ import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import me.nasrabadiam.tictactoe.R import me.nasrabadiam.tictactoe.home.HomeEvent.PlayWithAFriend -import me.nasrabadiam.resources.LocaleManager -import me.nasrabadiam.resources.Locales import me.nasrabadiam.tictactoe.strings.appStrings import me.nasrabadiam.tictactoe.strings.getAppStrings import me.nasrabadiam.tictactoe.ui.GameWindowSizeClass diff --git a/app/src/main/java/me/nasrabadiam/tictactoe/strings/AppStrings.kt b/app/src/main/java/me/nasrabadiam/tictactoe/strings/AppStrings.kt index 99f8ff2..6c2cadf 100644 --- a/app/src/main/java/me/nasrabadiam/tictactoe/strings/AppStrings.kt +++ b/app/src/main/java/me/nasrabadiam/tictactoe/strings/AppStrings.kt @@ -18,8 +18,8 @@ internal val AppStrings: Map = mapOf( ) internal val AppStringsLayoutDirections: Map = mapOf( - Locales.EN.getName() to LayoutDirection.Ltr, - Locales.FA.getName() to LayoutDirection.Rtl, + Locales.EN.getName() to LayoutDirection.LTR, + Locales.FA.getName() to LayoutDirection.RTL, ) internal val LocalStrings: ProvidableCompositionLocal = diff --git a/library/resources/build.gradle.kts b/library/resources/build.gradle.kts index 6787e0d..ad9276f 100644 --- a/library/resources/build.gradle.kts +++ b/library/resources/build.gradle.kts @@ -9,7 +9,7 @@ java { targetCompatibility = JavaVersion.VERSION_17 } -dependencies{ +dependencies { implementation(libs.coroutines) implementation(platform(libs.compose.bom)) implementation(libs.ui) diff --git a/library/resources/src/main/java/me/nasrabadiam/resources/LocaleManager.kt b/library/resources/src/main/java/me/nasrabadiam/resources/LocaleManager.kt index 6a9bd1c..2adb8d0 100644 --- a/library/resources/src/main/java/me/nasrabadiam/resources/LocaleManager.kt +++ b/library/resources/src/main/java/me/nasrabadiam/resources/LocaleManager.kt @@ -22,8 +22,7 @@ public fun getLocale(): Locale { } public enum class Locales { - EN, - FA; + EN, FA } public fun Locales.getName(): String { diff --git a/library/resources/src/main/java/me/nasrabadiam/resources/Lyricist.kt b/library/resources/src/main/java/me/nasrabadiam/resources/Lyricist.kt index f97455d..cf562e3 100644 --- a/library/resources/src/main/java/me/nasrabadiam/resources/Lyricist.kt +++ b/library/resources/src/main/java/me/nasrabadiam/resources/Lyricist.kt @@ -71,5 +71,5 @@ public class LyricistException internal constructor( ) : RuntimeException() public enum class LayoutDirection { - Ltr, Rtl + LTR, RTL } diff --git a/library/resources/src/main/java/me/nasrabadiam/resources/LyricistCompose.kt b/library/resources/src/main/java/me/nasrabadiam/resources/LyricistCompose.kt index bd078d5..0b748fa 100644 --- a/library/resources/src/main/java/me/nasrabadiam/resources/LyricistCompose.kt +++ b/library/resources/src/main/java/me/nasrabadiam/resources/LyricistCompose.kt @@ -40,7 +40,7 @@ public fun ProvideStrings( private fun LayoutDirection.toComposeLayoutDirection(): ComposeLayoutDirection { return when (this) { - LayoutDirection.Ltr -> ComposeLayoutDirection.Ltr - LayoutDirection.Rtl -> ComposeLayoutDirection.Rtl + LayoutDirection.LTR -> ComposeLayoutDirection.Ltr + LayoutDirection.RTL -> ComposeLayoutDirection.Rtl } } From 34b1a8150f78457c4b728f4273b83cf7fb70f406 Mon Sep 17 00:00:00 2001 From: Ali Nasrabadi Date: Sat, 27 Jul 2024 15:22:39 +0330 Subject: [PATCH 9/9] WIP: Add Iran and Us Flags for language --- .../nasrabadiam/tictactoe/home/HomeScreen.kt | 14 +- .../nasrabadiam/tictactoe/ui/icon/IranFlag.kt | 1659 +++++++++++++++++ .../nasrabadiam/tictactoe/ui/icon/USFlag.kt | 913 +++++++++ 3 files changed, 2582 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/me/nasrabadiam/tictactoe/ui/icon/IranFlag.kt create mode 100644 app/src/main/java/me/nasrabadiam/tictactoe/ui/icon/USFlag.kt diff --git a/app/src/main/java/me/nasrabadiam/tictactoe/home/HomeScreen.kt b/app/src/main/java/me/nasrabadiam/tictactoe/home/HomeScreen.kt index 2f547cd..54b93f0 100644 --- a/app/src/main/java/me/nasrabadiam/tictactoe/home/HomeScreen.kt +++ b/app/src/main/java/me/nasrabadiam/tictactoe/home/HomeScreen.kt @@ -3,13 +3,14 @@ package me.nasrabadiam.tictactoe.home import androidx.compose.foundation.Image 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.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.material.icons.Icons @@ -33,6 +34,7 @@ import androidx.compose.ui.tooling.preview.Devices import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.min import me.nasrabadiam.tictactoe.R import me.nasrabadiam.tictactoe.home.HomeEvent.PlayWithAFriend import me.nasrabadiam.tictactoe.strings.appStrings @@ -122,7 +124,7 @@ private fun HorizontalHomeScreen( @Composable private fun AppLogo(modifier: Modifier = Modifier) { - Box( + BoxWithConstraints( modifier = modifier .semantics { contentDescription = "App Logo" } .padding(60.dp) @@ -130,10 +132,14 @@ private fun AppLogo(modifier: Modifier = Modifier) { .scale(1.5f) .background(MaterialTheme.colorScheme.primary) ) { + val minSize = min(maxHeight, maxWidth) * 4 / 5 + Image( - modifier = Modifier.semantics(mergeDescendants = true) {}, + modifier = Modifier + .size(minSize) + .semantics(mergeDescendants = true) {}, painter = painterResource(id = R.drawable.ic_launcher_foreground), - contentScale = ContentScale.FillWidth, + contentScale = ContentScale.Fit, colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.onPrimary), contentDescription = null ) diff --git a/app/src/main/java/me/nasrabadiam/tictactoe/ui/icon/IranFlag.kt b/app/src/main/java/me/nasrabadiam/tictactoe/ui/icon/IranFlag.kt new file mode 100644 index 0000000..bfb3a6d --- /dev/null +++ b/app/src/main/java/me/nasrabadiam/tictactoe/ui/icon/IranFlag.kt @@ -0,0 +1,1659 @@ +package me.nasrabadiam.tictactoe.ui.icon + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.width +import androidx.compose.material.icons.Icons +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import me.nasrabadiam.tictactoe.ui.theme.TicTacToeTheme + +val Icons.IranFlag: ImageVector + get() { + val current = _iranFlag + if (current != null) return current + + return ImageVector.Builder( + name = "com.nasrabadiam.tictactoe.IranFlag", + defaultWidth = 630.0.dp, + defaultHeight = 360.0.dp, + viewportWidth = 630.0f, + viewportHeight = 360.0f, + ).apply { + // M0 0 H630 V360 H0z + path( + fill = SolidColor(Color(0xFFDA0000)), + ) { + // M 0 0 + moveTo(x = 0.0f, y = 0.0f) + // H 630 + horizontalLineTo(x = 630.0f) + // V 360 + verticalLineTo(y = 360.0f) + // H 0z + horizontalLineTo(x = 0.0f) + close() + } + // M0 0 H630 V240 H0z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 0 0 + moveTo(x = 0.0f, y = 0.0f) + // H 630 + horizontalLineTo(x = 630.0f) + // V 240 + verticalLineTo(y = 240.0f) + // H 0z + horizontalLineTo(x = 0.0f) + close() + } + // M0 0 H630 V120 H0z + path( + fill = SolidColor(Color(0xFF239F40)), + ) { + // M 0 0 + moveTo(x = 0.0f, y = 0.0f) + // H 630 + horizontalLineTo(x = 630.0f) + // V 120 + verticalLineTo(y = 120.0f) + // H 0z + horizontalLineTo(x = 0.0f) + close() + } + // M0 1 h26 M1 10 V5 h8 v4 h8 V5 h-5 M4 9 h2 m20 0 h-5 V5 h8 m0 -5 v9 h8 V0 m-4 0 v9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 8.4 101.8 + moveTo(x = 8.4f, y = 101.8f) + // l 36.399998 0 + lineToRelative(dx = 36.399998f, dy = 0.0f) + // M 9.799999 114.4 + moveTo(x = 9.799999f, y = 114.4f) + // L 9.799999 107.4 + lineTo(x = 9.799999f, y = 107.4f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // l 0 5.6 + lineToRelative(dx = 0.0f, dy = 5.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 32.199997 107.4 + lineTo(x = 32.199997f, y = 107.4f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // M 14 113 + moveTo(x = 14.0f, y = 113.0f) + // l 2.8 0 + lineToRelative(dx = 2.8f, dy = 0.0f) + // m 28 0 + moveToRelative(dx = 28.0f, dy = 0.0f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // L 37.8 107.4 + lineTo(x = 37.8f, y = 107.4f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // m 0 -7 + moveToRelative(dx = 0.0f, dy = -7.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 60.199997 100.4 + lineTo(x = 60.199997f, y = 100.4f) + // m -5.6 0 + moveToRelative(dx = -5.6f, dy = 0.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + } + // M0 7 h9 m1 0 h9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 8.4 120 + moveTo(x = 8.4f, y = 120.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + // m 2.8 0 + moveToRelative(dx = 2.8f, dy = 0.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + } + // M0 7 h9 m1 0 h9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 8.4 240 + moveTo(x = 8.4f, y = 240.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + // m 2.8 0 + moveToRelative(dx = 2.8f, dy = 0.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + } + // M0 1 h26 M1 10 V5 h8 v4 h8 V5 h-5 M4 9 h2 m20 0 h-5 V5 h8 m0 -5 v9 h8 V0 m-4 0 v9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 8.4 247 + moveTo(x = 8.4f, y = 247.0f) + // l 36.399998 0 + lineToRelative(dx = 36.399998f, dy = 0.0f) + // M 9.799999 259.6 + moveTo(x = 9.799999f, y = 259.6f) + // L 9.799999 252.6 + lineTo(x = 9.799999f, y = 252.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // l 0 5.6 + lineToRelative(dx = 0.0f, dy = 5.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 32.199997 252.6 + lineTo(x = 32.199997f, y = 252.6f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // M 14 258.2 + moveTo(x = 14.0f, y = 258.2f) + // l 2.8 0 + lineToRelative(dx = 2.8f, dy = 0.0f) + // m 28 0 + moveToRelative(dx = 28.0f, dy = 0.0f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // L 37.8 252.6 + lineTo(x = 37.8f, y = 252.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // m 0 -7 + moveToRelative(dx = 0.0f, dy = -7.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 60.199997 245.6 + lineTo(x = 60.199997f, y = 245.6f) + // m -5.6 0 + moveToRelative(dx = -5.6f, dy = 0.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + } + // M0 1 h26 M1 10 V5 h8 v4 h8 V5 h-5 M4 9 h2 m20 0 h-5 V5 h8 m0 -5 v9 h8 V0 m-4 0 v9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 64.4 101.8 + moveTo(x = 64.4f, y = 101.8f) + // l 36.399998 0 + lineToRelative(dx = 36.399998f, dy = 0.0f) + // M 65.8 114.4 + moveTo(x = 65.8f, y = 114.4f) + // L 65.8 107.4 + lineTo(x = 65.8f, y = 107.4f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // l 0 5.6 + lineToRelative(dx = 0.0f, dy = 5.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 88.2 107.4 + lineTo(x = 88.2f, y = 107.4f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // M 70 113 + moveTo(x = 70.0f, y = 113.0f) + // l 2.8 0 + lineToRelative(dx = 2.8f, dy = 0.0f) + // m 28 0 + moveToRelative(dx = 28.0f, dy = 0.0f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // L 93.8 107.4 + lineTo(x = 93.8f, y = 107.4f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // m 0 -7 + moveToRelative(dx = 0.0f, dy = -7.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 116.2 100.4 + lineTo(x = 116.2f, y = 100.4f) + // m -5.6 0 + moveToRelative(dx = -5.6f, dy = 0.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + } + // M0 7 h9 m1 0 h9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 64.4 120 + moveTo(x = 64.4f, y = 120.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + // m 2.8 0 + moveToRelative(dx = 2.8f, dy = 0.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + } + // M0 7 h9 m1 0 h9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 64.4 240 + moveTo(x = 64.4f, y = 240.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + // m 2.8 0 + moveToRelative(dx = 2.8f, dy = 0.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + } + // M0 1 h26 M1 10 V5 h8 v4 h8 V5 h-5 M4 9 h2 m20 0 h-5 V5 h8 m0 -5 v9 h8 V0 m-4 0 v9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 64.4 247 + moveTo(x = 64.4f, y = 247.0f) + // l 36.399998 0 + lineToRelative(dx = 36.399998f, dy = 0.0f) + // M 65.8 259.6 + moveTo(x = 65.8f, y = 259.6f) + // L 65.8 252.6 + lineTo(x = 65.8f, y = 252.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // l 0 5.6 + lineToRelative(dx = 0.0f, dy = 5.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 88.2 252.6 + lineTo(x = 88.2f, y = 252.6f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // M 70 258.2 + moveTo(x = 70.0f, y = 258.2f) + // l 2.8 0 + lineToRelative(dx = 2.8f, dy = 0.0f) + // m 28 0 + moveToRelative(dx = 28.0f, dy = 0.0f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // L 93.8 252.6 + lineTo(x = 93.8f, y = 252.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // m 0 -7 + moveToRelative(dx = 0.0f, dy = -7.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 116.2 245.6 + lineTo(x = 116.2f, y = 245.6f) + // m -5.6 0 + moveToRelative(dx = -5.6f, dy = 0.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + } + // M0 1 h26 M1 10 V5 h8 v4 h8 V5 h-5 M4 9 h2 m20 0 h-5 V5 h8 m0 -5 v9 h8 V0 m-4 0 v9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 120.4 101.8 + moveTo(x = 120.4f, y = 101.8f) + // l 36.399998 0 + lineToRelative(dx = 36.399998f, dy = 0.0f) + // M 121.8 114.4 + moveTo(x = 121.8f, y = 114.4f) + // L 121.8 107.4 + lineTo(x = 121.8f, y = 107.4f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // l 0 5.6 + lineToRelative(dx = 0.0f, dy = 5.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 144.2 107.4 + lineTo(x = 144.2f, y = 107.4f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // M 126 113 + moveTo(x = 126.0f, y = 113.0f) + // l 2.8 0 + lineToRelative(dx = 2.8f, dy = 0.0f) + // m 28 0 + moveToRelative(dx = 28.0f, dy = 0.0f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // L 149.8 107.4 + lineTo(x = 149.8f, y = 107.4f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // m 0 -7 + moveToRelative(dx = 0.0f, dy = -7.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 172.2 100.4 + lineTo(x = 172.2f, y = 100.4f) + // m -5.6 0 + moveToRelative(dx = -5.6f, dy = 0.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + } + // M0 7 h9 m1 0 h9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 120.4 120 + moveTo(x = 120.4f, y = 120.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + // m 2.8 0 + moveToRelative(dx = 2.8f, dy = 0.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + } + // M0 7 h9 m1 0 h9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 120.4 240 + moveTo(x = 120.4f, y = 240.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + // m 2.8 0 + moveToRelative(dx = 2.8f, dy = 0.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + } + // M0 1 h26 M1 10 V5 h8 v4 h8 V5 h-5 M4 9 h2 m20 0 h-5 V5 h8 m0 -5 v9 h8 V0 m-4 0 v9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 120.4 247 + moveTo(x = 120.4f, y = 247.0f) + // l 36.399998 0 + lineToRelative(dx = 36.399998f, dy = 0.0f) + // M 121.8 259.6 + moveTo(x = 121.8f, y = 259.6f) + // L 121.8 252.6 + lineTo(x = 121.8f, y = 252.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // l 0 5.6 + lineToRelative(dx = 0.0f, dy = 5.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 144.2 252.6 + lineTo(x = 144.2f, y = 252.6f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // M 126 258.2 + moveTo(x = 126.0f, y = 258.2f) + // l 2.8 0 + lineToRelative(dx = 2.8f, dy = 0.0f) + // m 28 0 + moveToRelative(dx = 28.0f, dy = 0.0f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // L 149.8 252.6 + lineTo(x = 149.8f, y = 252.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // m 0 -7 + moveToRelative(dx = 0.0f, dy = -7.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 172.2 245.6 + lineTo(x = 172.2f, y = 245.6f) + // m -5.6 0 + moveToRelative(dx = -5.6f, dy = 0.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + } + // M0 1 h26 M1 10 V5 h8 v4 h8 V5 h-5 M4 9 h2 m20 0 h-5 V5 h8 m0 -5 v9 h8 V0 m-4 0 v9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 176.4 101.8 + moveTo(x = 176.4f, y = 101.8f) + // l 36.399998 0 + lineToRelative(dx = 36.399998f, dy = 0.0f) + // M 177.79999 114.4 + moveTo(x = 177.79999f, y = 114.4f) + // L 177.79999 107.4 + lineTo(x = 177.79999f, y = 107.4f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // l 0 5.6 + lineToRelative(dx = 0.0f, dy = 5.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 200.2 107.4 + lineTo(x = 200.2f, y = 107.4f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // M 182 113 + moveTo(x = 182.0f, y = 113.0f) + // l 2.8 0 + lineToRelative(dx = 2.8f, dy = 0.0f) + // m 28 0 + moveToRelative(dx = 28.0f, dy = 0.0f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // L 205.79999 107.4 + lineTo(x = 205.79999f, y = 107.4f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // m 0 -7 + moveToRelative(dx = 0.0f, dy = -7.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 228.2 100.4 + lineTo(x = 228.2f, y = 100.4f) + // m -5.6 0 + moveToRelative(dx = -5.6f, dy = 0.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + } + // M0 7 h9 m1 0 h9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 176.4 120 + moveTo(x = 176.4f, y = 120.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + // m 2.8 0 + moveToRelative(dx = 2.8f, dy = 0.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + } + // M0 7 h9 m1 0 h9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 176.4 240 + moveTo(x = 176.4f, y = 240.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + // m 2.8 0 + moveToRelative(dx = 2.8f, dy = 0.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + } + // M0 1 h26 M1 10 V5 h8 v4 h8 V5 h-5 M4 9 h2 m20 0 h-5 V5 h8 m0 -5 v9 h8 V0 m-4 0 v9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 176.4 247 + moveTo(x = 176.4f, y = 247.0f) + // l 36.399998 0 + lineToRelative(dx = 36.399998f, dy = 0.0f) + // M 177.79999 259.6 + moveTo(x = 177.79999f, y = 259.6f) + // L 177.79999 252.6 + lineTo(x = 177.79999f, y = 252.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // l 0 5.6 + lineToRelative(dx = 0.0f, dy = 5.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 200.2 252.6 + lineTo(x = 200.2f, y = 252.6f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // M 182 258.2 + moveTo(x = 182.0f, y = 258.2f) + // l 2.8 0 + lineToRelative(dx = 2.8f, dy = 0.0f) + // m 28 0 + moveToRelative(dx = 28.0f, dy = 0.0f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // L 205.79999 252.6 + lineTo(x = 205.79999f, y = 252.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // m 0 -7 + moveToRelative(dx = 0.0f, dy = -7.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 228.2 245.6 + lineTo(x = 228.2f, y = 245.6f) + // m -5.6 0 + moveToRelative(dx = -5.6f, dy = 0.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + } + // M0 1 h26 M1 10 V5 h8 v4 h8 V5 h-5 M4 9 h2 m20 0 h-5 V5 h8 m0 -5 v9 h8 V0 m-4 0 v9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 232.4 101.8 + moveTo(x = 232.4f, y = 101.8f) + // l 36.399998 0 + lineToRelative(dx = 36.399998f, dy = 0.0f) + // M 233.79999 114.4 + moveTo(x = 233.79999f, y = 114.4f) + // L 233.79999 107.4 + lineTo(x = 233.79999f, y = 107.4f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // l 0 5.6 + lineToRelative(dx = 0.0f, dy = 5.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 256.19998 107.4 + lineTo(x = 256.19998f, y = 107.4f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // M 238 113 + moveTo(x = 238.0f, y = 113.0f) + // l 2.8 0 + lineToRelative(dx = 2.8f, dy = 0.0f) + // m 28 0 + moveToRelative(dx = 28.0f, dy = 0.0f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // L 261.8 107.4 + lineTo(x = 261.8f, y = 107.4f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // m 0 -7 + moveToRelative(dx = 0.0f, dy = -7.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 284.19998 100.4 + lineTo(x = 284.19998f, y = 100.4f) + // m -5.6 0 + moveToRelative(dx = -5.6f, dy = 0.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + } + // M0 7 h9 m1 0 h9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 232.4 120 + moveTo(x = 232.4f, y = 120.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + // m 2.8 0 + moveToRelative(dx = 2.8f, dy = 0.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + } + // M0 7 h9 m1 0 h9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 232.4 240 + moveTo(x = 232.4f, y = 240.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + // m 2.8 0 + moveToRelative(dx = 2.8f, dy = 0.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + } + // M0 1 h26 M1 10 V5 h8 v4 h8 V5 h-5 M4 9 h2 m20 0 h-5 V5 h8 m0 -5 v9 h8 V0 m-4 0 v9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 232.4 247 + moveTo(x = 232.4f, y = 247.0f) + // l 36.399998 0 + lineToRelative(dx = 36.399998f, dy = 0.0f) + // M 233.79999 259.6 + moveTo(x = 233.79999f, y = 259.6f) + // L 233.79999 252.6 + lineTo(x = 233.79999f, y = 252.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // l 0 5.6 + lineToRelative(dx = 0.0f, dy = 5.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 256.19998 252.6 + lineTo(x = 256.19998f, y = 252.6f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // M 238 258.2 + moveTo(x = 238.0f, y = 258.2f) + // l 2.8 0 + lineToRelative(dx = 2.8f, dy = 0.0f) + // m 28 0 + moveToRelative(dx = 28.0f, dy = 0.0f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // L 261.8 252.6 + lineTo(x = 261.8f, y = 252.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // m 0 -7 + moveToRelative(dx = 0.0f, dy = -7.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 284.19998 245.6 + lineTo(x = 284.19998f, y = 245.6f) + // m -5.6 0 + moveToRelative(dx = -5.6f, dy = 0.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + } + // M0 1 h26 M1 10 V5 h8 v4 h8 V5 h-5 M4 9 h2 m20 0 h-5 V5 h8 m0 -5 v9 h8 V0 m-4 0 v9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 288.4 101.8 + moveTo(x = 288.4f, y = 101.8f) + // l 36.399998 0 + lineToRelative(dx = 36.399998f, dy = 0.0f) + // M 289.8 114.4 + moveTo(x = 289.8f, y = 114.4f) + // L 289.8 107.4 + lineTo(x = 289.8f, y = 107.4f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // l 0 5.6 + lineToRelative(dx = 0.0f, dy = 5.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 312.19998 107.4 + lineTo(x = 312.19998f, y = 107.4f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // M 294 113 + moveTo(x = 294.0f, y = 113.0f) + // l 2.8 0 + lineToRelative(dx = 2.8f, dy = 0.0f) + // m 28 0 + moveToRelative(dx = 28.0f, dy = 0.0f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // L 317.8 107.4 + lineTo(x = 317.8f, y = 107.4f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // m 0 -7 + moveToRelative(dx = 0.0f, dy = -7.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 340.19998 100.4 + lineTo(x = 340.19998f, y = 100.4f) + // m -5.6 0 + moveToRelative(dx = -5.6f, dy = 0.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + } + // M0 7 h9 m1 0 h9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 288.4 120 + moveTo(x = 288.4f, y = 120.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + // m 2.8 0 + moveToRelative(dx = 2.8f, dy = 0.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + } + // M0 7 h9 m1 0 h9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 288.4 240 + moveTo(x = 288.4f, y = 240.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + // m 2.8 0 + moveToRelative(dx = 2.8f, dy = 0.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + } + // M0 1 h26 M1 10 V5 h8 v4 h8 V5 h-5 M4 9 h2 m20 0 h-5 V5 h8 m0 -5 v9 h8 V0 m-4 0 v9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 288.4 247 + moveTo(x = 288.4f, y = 247.0f) + // l 36.399998 0 + lineToRelative(dx = 36.399998f, dy = 0.0f) + // M 289.8 259.6 + moveTo(x = 289.8f, y = 259.6f) + // L 289.8 252.6 + lineTo(x = 289.8f, y = 252.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // l 0 5.6 + lineToRelative(dx = 0.0f, dy = 5.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 312.19998 252.6 + lineTo(x = 312.19998f, y = 252.6f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // M 294 258.2 + moveTo(x = 294.0f, y = 258.2f) + // l 2.8 0 + lineToRelative(dx = 2.8f, dy = 0.0f) + // m 28 0 + moveToRelative(dx = 28.0f, dy = 0.0f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // L 317.8 252.6 + lineTo(x = 317.8f, y = 252.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // m 0 -7 + moveToRelative(dx = 0.0f, dy = -7.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 340.19998 245.6 + lineTo(x = 340.19998f, y = 245.6f) + // m -5.6 0 + moveToRelative(dx = -5.6f, dy = 0.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + } + // M0 1 h26 M1 10 V5 h8 v4 h8 V5 h-5 M4 9 h2 m20 0 h-5 V5 h8 m0 -5 v9 h8 V0 m-4 0 v9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 344.4 101.8 + moveTo(x = 344.4f, y = 101.8f) + // l 36.399998 0 + lineToRelative(dx = 36.399998f, dy = 0.0f) + // M 345.8 114.4 + moveTo(x = 345.8f, y = 114.4f) + // L 345.8 107.4 + lineTo(x = 345.8f, y = 107.4f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // l 0 5.6 + lineToRelative(dx = 0.0f, dy = 5.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 368.19998 107.4 + lineTo(x = 368.19998f, y = 107.4f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // M 350 113 + moveTo(x = 350.0f, y = 113.0f) + // l 2.8 0 + lineToRelative(dx = 2.8f, dy = 0.0f) + // m 28 0 + moveToRelative(dx = 28.0f, dy = 0.0f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // L 373.8 107.4 + lineTo(x = 373.8f, y = 107.4f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // m 0 -7 + moveToRelative(dx = 0.0f, dy = -7.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 396.19998 100.4 + lineTo(x = 396.19998f, y = 100.4f) + // m -5.6 0 + moveToRelative(dx = -5.6f, dy = 0.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + } + // M0 7 h9 m1 0 h9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 344.4 120 + moveTo(x = 344.4f, y = 120.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + // m 2.8 0 + moveToRelative(dx = 2.8f, dy = 0.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + } + // M0 7 h9 m1 0 h9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 344.4 240 + moveTo(x = 344.4f, y = 240.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + // m 2.8 0 + moveToRelative(dx = 2.8f, dy = 0.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + } + // M0 1 h26 M1 10 V5 h8 v4 h8 V5 h-5 M4 9 h2 m20 0 h-5 V5 h8 m0 -5 v9 h8 V0 m-4 0 v9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 344.4 247 + moveTo(x = 344.4f, y = 247.0f) + // l 36.399998 0 + lineToRelative(dx = 36.399998f, dy = 0.0f) + // M 345.8 259.6 + moveTo(x = 345.8f, y = 259.6f) + // L 345.8 252.6 + lineTo(x = 345.8f, y = 252.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // l 0 5.6 + lineToRelative(dx = 0.0f, dy = 5.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 368.19998 252.6 + lineTo(x = 368.19998f, y = 252.6f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // M 350 258.2 + moveTo(x = 350.0f, y = 258.2f) + // l 2.8 0 + lineToRelative(dx = 2.8f, dy = 0.0f) + // m 28 0 + moveToRelative(dx = 28.0f, dy = 0.0f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // L 373.8 252.6 + lineTo(x = 373.8f, y = 252.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // m 0 -7 + moveToRelative(dx = 0.0f, dy = -7.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 396.19998 245.6 + lineTo(x = 396.19998f, y = 245.6f) + // m -5.6 0 + moveToRelative(dx = -5.6f, dy = 0.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + } + // M0 1 h26 M1 10 V5 h8 v4 h8 V5 h-5 M4 9 h2 m20 0 h-5 V5 h8 m0 -5 v9 h8 V0 m-4 0 v9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 400.4 101.8 + moveTo(x = 400.4f, y = 101.8f) + // l 36.399998 0 + lineToRelative(dx = 36.399998f, dy = 0.0f) + // M 401.8 114.4 + moveTo(x = 401.8f, y = 114.4f) + // L 401.8 107.4 + lineTo(x = 401.8f, y = 107.4f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // l 0 5.6 + lineToRelative(dx = 0.0f, dy = 5.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 424.19998 107.4 + lineTo(x = 424.19998f, y = 107.4f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // M 406 113 + moveTo(x = 406.0f, y = 113.0f) + // l 2.8 0 + lineToRelative(dx = 2.8f, dy = 0.0f) + // m 28 0 + moveToRelative(dx = 28.0f, dy = 0.0f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // L 429.8 107.4 + lineTo(x = 429.8f, y = 107.4f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // m 0 -7 + moveToRelative(dx = 0.0f, dy = -7.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 452.19998 100.4 + lineTo(x = 452.19998f, y = 100.4f) + // m -5.6 0 + moveToRelative(dx = -5.6f, dy = 0.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + } + // M0 7 h9 m1 0 h9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 400.4 120 + moveTo(x = 400.4f, y = 120.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + // m 2.8 0 + moveToRelative(dx = 2.8f, dy = 0.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + } + // M0 7 h9 m1 0 h9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 400.4 240 + moveTo(x = 400.4f, y = 240.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + // m 2.8 0 + moveToRelative(dx = 2.8f, dy = 0.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + } + // M0 1 h26 M1 10 V5 h8 v4 h8 V5 h-5 M4 9 h2 m20 0 h-5 V5 h8 m0 -5 v9 h8 V0 m-4 0 v9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 400.4 247 + moveTo(x = 400.4f, y = 247.0f) + // l 36.399998 0 + lineToRelative(dx = 36.399998f, dy = 0.0f) + // M 401.8 259.6 + moveTo(x = 401.8f, y = 259.6f) + // L 401.8 252.6 + lineTo(x = 401.8f, y = 252.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // l 0 5.6 + lineToRelative(dx = 0.0f, dy = 5.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 424.19998 252.6 + lineTo(x = 424.19998f, y = 252.6f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // M 406 258.2 + moveTo(x = 406.0f, y = 258.2f) + // l 2.8 0 + lineToRelative(dx = 2.8f, dy = 0.0f) + // m 28 0 + moveToRelative(dx = 28.0f, dy = 0.0f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // L 429.8 252.6 + lineTo(x = 429.8f, y = 252.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // m 0 -7 + moveToRelative(dx = 0.0f, dy = -7.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 452.19998 245.6 + lineTo(x = 452.19998f, y = 245.6f) + // m -5.6 0 + moveToRelative(dx = -5.6f, dy = 0.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + } + // M0 1 h26 M1 10 V5 h8 v4 h8 V5 h-5 M4 9 h2 m20 0 h-5 V5 h8 m0 -5 v9 h8 V0 m-4 0 v9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 456.4 101.8 + moveTo(x = 456.4f, y = 101.8f) + // l 36.399998 0 + lineToRelative(dx = 36.399998f, dy = 0.0f) + // M 457.8 114.4 + moveTo(x = 457.8f, y = 114.4f) + // L 457.8 107.4 + lineTo(x = 457.8f, y = 107.4f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // l 0 5.6 + lineToRelative(dx = 0.0f, dy = 5.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 480.19998 107.4 + lineTo(x = 480.19998f, y = 107.4f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // M 462 113 + moveTo(x = 462.0f, y = 113.0f) + // l 2.8 0 + lineToRelative(dx = 2.8f, dy = 0.0f) + // m 28 0 + moveToRelative(dx = 28.0f, dy = 0.0f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // L 485.8 107.4 + lineTo(x = 485.8f, y = 107.4f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // m 0 -7 + moveToRelative(dx = 0.0f, dy = -7.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 508.19998 100.4 + lineTo(x = 508.19998f, y = 100.4f) + // m -5.6 0 + moveToRelative(dx = -5.6f, dy = 0.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + } + // M0 7 h9 m1 0 h9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 456.4 120 + moveTo(x = 456.4f, y = 120.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + // m 2.8 0 + moveToRelative(dx = 2.8f, dy = 0.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + } + // M0 7 h9 m1 0 h9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 456.4 240 + moveTo(x = 456.4f, y = 240.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + // m 2.8 0 + moveToRelative(dx = 2.8f, dy = 0.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + } + // M0 1 h26 M1 10 V5 h8 v4 h8 V5 h-5 M4 9 h2 m20 0 h-5 V5 h8 m0 -5 v9 h8 V0 m-4 0 v9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 456.4 247 + moveTo(x = 456.4f, y = 247.0f) + // l 36.399998 0 + lineToRelative(dx = 36.399998f, dy = 0.0f) + // M 457.8 259.6 + moveTo(x = 457.8f, y = 259.6f) + // L 457.8 252.6 + lineTo(x = 457.8f, y = 252.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // l 0 5.6 + lineToRelative(dx = 0.0f, dy = 5.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 480.19998 252.6 + lineTo(x = 480.19998f, y = 252.6f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // M 462 258.2 + moveTo(x = 462.0f, y = 258.2f) + // l 2.8 0 + lineToRelative(dx = 2.8f, dy = 0.0f) + // m 28 0 + moveToRelative(dx = 28.0f, dy = 0.0f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // L 485.8 252.6 + lineTo(x = 485.8f, y = 252.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // m 0 -7 + moveToRelative(dx = 0.0f, dy = -7.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 508.19998 245.6 + lineTo(x = 508.19998f, y = 245.6f) + // m -5.6 0 + moveToRelative(dx = -5.6f, dy = 0.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + } + // M0 1 h26 M1 10 V5 h8 v4 h8 V5 h-5 M4 9 h2 m20 0 h-5 V5 h8 m0 -5 v9 h8 V0 m-4 0 v9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 512.4 101.8 + moveTo(x = 512.4f, y = 101.8f) + // l 36.399998 0 + lineToRelative(dx = 36.399998f, dy = 0.0f) + // M 513.80005 114.4 + moveTo(x = 513.80005f, y = 114.4f) + // L 513.80005 107.4 + lineTo(x = 513.80005f, y = 107.4f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // l 0 5.6 + lineToRelative(dx = 0.0f, dy = 5.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 536.2 107.4 + lineTo(x = 536.2f, y = 107.4f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // M 518 113 + moveTo(x = 518.0f, y = 113.0f) + // l 2.8 0 + lineToRelative(dx = 2.8f, dy = 0.0f) + // m 28 0 + moveToRelative(dx = 28.0f, dy = 0.0f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // L 541.80005 107.4 + lineTo(x = 541.80005f, y = 107.4f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // m 0 -7 + moveToRelative(dx = 0.0f, dy = -7.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 564.2 100.4 + lineTo(x = 564.2f, y = 100.4f) + // m -5.6 0 + moveToRelative(dx = -5.6f, dy = 0.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + } + // M0 7 h9 m1 0 h9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 512.4 120 + moveTo(x = 512.4f, y = 120.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + // m 2.8 0 + moveToRelative(dx = 2.8f, dy = 0.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + } + // M0 7 h9 m1 0 h9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 512.4 240 + moveTo(x = 512.4f, y = 240.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + // m 2.8 0 + moveToRelative(dx = 2.8f, dy = 0.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + } + // M0 1 h26 M1 10 V5 h8 v4 h8 V5 h-5 M4 9 h2 m20 0 h-5 V5 h8 m0 -5 v9 h8 V0 m-4 0 v9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 512.4 247 + moveTo(x = 512.4f, y = 247.0f) + // l 36.399998 0 + lineToRelative(dx = 36.399998f, dy = 0.0f) + // M 513.80005 259.6 + moveTo(x = 513.80005f, y = 259.6f) + // L 513.80005 252.6 + lineTo(x = 513.80005f, y = 252.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // l 0 5.6 + lineToRelative(dx = 0.0f, dy = 5.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 536.2 252.6 + lineTo(x = 536.2f, y = 252.6f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // M 518 258.2 + moveTo(x = 518.0f, y = 258.2f) + // l 2.8 0 + lineToRelative(dx = 2.8f, dy = 0.0f) + // m 28 0 + moveToRelative(dx = 28.0f, dy = 0.0f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // L 541.80005 252.6 + lineTo(x = 541.80005f, y = 252.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // m 0 -7 + moveToRelative(dx = 0.0f, dy = -7.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 564.2 245.6 + lineTo(x = 564.2f, y = 245.6f) + // m -5.6 0 + moveToRelative(dx = -5.6f, dy = 0.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + } + // M0 1 h26 M1 10 V5 h8 v4 h8 V5 h-5 M4 9 h2 m20 0 h-5 V5 h8 m0 -5 v9 h8 V0 m-4 0 v9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 568.4 101.8 + moveTo(x = 568.4f, y = 101.8f) + // l 36.399998 0 + lineToRelative(dx = 36.399998f, dy = 0.0f) + // M 569.80005 114.4 + moveTo(x = 569.80005f, y = 114.4f) + // L 569.80005 107.4 + lineTo(x = 569.80005f, y = 107.4f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // l 0 5.6 + lineToRelative(dx = 0.0f, dy = 5.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 592.2 107.4 + lineTo(x = 592.2f, y = 107.4f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // M 574 113 + moveTo(x = 574.0f, y = 113.0f) + // l 2.8 0 + lineToRelative(dx = 2.8f, dy = 0.0f) + // m 28 0 + moveToRelative(dx = 28.0f, dy = 0.0f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // L 597.80005 107.4 + lineTo(x = 597.80005f, y = 107.4f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // m 0 -7 + moveToRelative(dx = 0.0f, dy = -7.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 620.2 100.4 + lineTo(x = 620.2f, y = 100.4f) + // m -5.6 0 + moveToRelative(dx = -5.6f, dy = 0.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + } + // M0 7 h9 m1 0 h9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 568.4 120 + moveTo(x = 568.4f, y = 120.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + // m 2.8 0 + moveToRelative(dx = 2.8f, dy = 0.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + } + // M0 7 h9 m1 0 h9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 568.4 240 + moveTo(x = 568.4f, y = 240.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + // m 2.8 0 + moveToRelative(dx = 2.8f, dy = 0.0f) + // l 25.199999 0 + lineToRelative(dx = 25.199999f, dy = 0.0f) + } + // M0 1 h26 M1 10 V5 h8 v4 h8 V5 h-5 M4 9 h2 m20 0 h-5 V5 h8 m0 -5 v9 h8 V0 m-4 0 v9 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 2.0f, + ) { + // M 568.4 247 + moveTo(x = 568.4f, y = 247.0f) + // l 36.399998 0 + lineToRelative(dx = 36.399998f, dy = 0.0f) + // M 569.80005 259.6 + moveTo(x = 569.80005f, y = 259.6f) + // L 569.80005 252.6 + lineTo(x = 569.80005f, y = 252.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // l 0 5.6 + lineToRelative(dx = 0.0f, dy = 5.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 592.2 252.6 + lineTo(x = 592.2f, y = 252.6f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // M 574 258.2 + moveTo(x = 574.0f, y = 258.2f) + // l 2.8 0 + lineToRelative(dx = 2.8f, dy = 0.0f) + // m 28 0 + moveToRelative(dx = 28.0f, dy = 0.0f) + // l -7 0 + lineToRelative(dx = -7.0f, dy = 0.0f) + // L 597.80005 252.6 + lineTo(x = 597.80005f, y = 252.6f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // m 0 -7 + moveToRelative(dx = 0.0f, dy = -7.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + // l 11.2 0 + lineToRelative(dx = 11.2f, dy = 0.0f) + // L 620.2 245.6 + lineTo(x = 620.2f, y = 245.6f) + // m -5.6 0 + moveToRelative(dx = -5.6f, dy = 0.0f) + // l 0 12.599999 + lineToRelative(dx = 0.0f, dy = 12.599999f) + } + // M-.55 .84 a.91 .91 0 0 0 .88 -1.56 1 1 0 0 1 -.88 1.56 + path( + fill = SolidColor(Color(0xFFDA0000)), + ) { + // M 290.25 217.8 + moveTo(x = 290.25f, y = 217.8f) + // a 40.95 40.95 0 0 0 39.6 -70.2 + arcToRelative( + a = 40.95f, + b = 40.95f, + theta = 0.0f, + isMoreThanHalf = false, + isPositiveArc = false, + dx1 = 39.6f, + dy1 = -70.2f, + ) + // a 45 45 0 0 1 -39.6 70.2 + arcToRelative( + a = 45.0f, + b = 45.0f, + theta = 0.0f, + isMoreThanHalf = false, + isPositiveArc = true, + dx1 = -39.6f, + dy1 = 70.2f, + ) + } + // M.62 .66 a.76 .76 0 0 0 -.2 -1.4 1 1 0 0 1 .2 1.4 M0 1 l-.05 -1 L0 -.79 a.3 .3 0 0 0 .12 .1 v.59 l-.04 1z m-.02 -1.85 L0 -.83 a.14 .14 0 0 0 .25 -.14 A.14 .14 0 0 1 0 -.92 + path( + fill = SolidColor(Color(0xFFDA0000)), + ) { + // M 342.9 209.7 + moveTo(x = 342.9f, y = 209.7f) + // a 34.2 34.2 0 0 0 -9 -63 + arcToRelative( + a = 34.2f, + b = 34.2f, + theta = 0.0f, + isMoreThanHalf = false, + isPositiveArc = false, + dx1 = -9.0f, + dy1 = -63.0f, + ) + // a 45 45 0 0 1 9 63 + arcToRelative( + a = 45.0f, + b = 45.0f, + theta = 0.0f, + isMoreThanHalf = false, + isPositiveArc = true, + dx1 = 9.0f, + dy1 = 63.0f, + ) + // M 315 225 + moveTo(x = 315.0f, y = 225.0f) + // l -2.25 -45 + lineToRelative(dx = -2.25f, dy = -45.0f) + // L 315 144.45 + lineTo(x = 315.0f, y = 144.45f) + // a 13.500001 13.500001 0 0 0 5.4 4.5 + arcToRelative( + a = 13.500001f, + b = 13.500001f, + theta = 0.0f, + isMoreThanHalf = false, + isPositiveArc = false, + dx1 = 5.4f, + dy1 = 4.5f, + ) + // l 0 26.55 + lineToRelative(dx = 0.0f, dy = 26.55f) + // l -1.8 45z + lineToRelative(dx = -1.8f, dy = 45.0f) + close() + // m -0.9 -83.25 + moveToRelative(dx = -0.9f, dy = -83.25f) + // L 315 142.65 + lineTo(x = 315.0f, y = 142.65f) + // a 6.4469476 6.4469476 0 0 0 11.25 -6.3 + arcToRelative( + a = 6.4469476f, + b = 6.4469476f, + theta = 0.0f, + isMoreThanHalf = false, + isPositiveArc = false, + dx1 = 11.25f, + dy1 = -6.3f, + ) + // A 6.3 6.3 0 0 1 315 138.6 + arcTo( + horizontalEllipseRadius = 6.3f, + verticalEllipseRadius = 6.3f, + theta = 0.0f, + isMoreThanHalf = false, + isPositiveArc = true, + x1 = 315.0f, + y1 = 138.6f, + ) + } + // M-.55 .84 a.91 .91 0 0 0 .88 -1.56 1 1 0 0 1 -.88 1.56 + path( + fill = SolidColor(Color(0xFFDA0000)), + ) { + // M 339.75 217.8 + moveTo(x = 339.75f, y = 217.8f) + // a 40.95 40.95 0 0 1 -39.6 -70.2 + arcToRelative( + a = 40.95f, + b = 40.95f, + theta = 0.0f, + isMoreThanHalf = false, + isPositiveArc = true, + dx1 = -39.6f, + dy1 = -70.2f, + ) + // a 45 45 0 0 0 39.6 70.2 + arcToRelative( + a = 45.0f, + b = 45.0f, + theta = 0.0f, + isMoreThanHalf = false, + isPositiveArc = false, + dx1 = 39.6f, + dy1 = 70.2f, + ) + } + // M.62 .66 a.76 .76 0 0 0 -.2 -1.4 1 1 0 0 1 .2 1.4 M0 1 l-.05 -1 L0 -.79 a.3 .3 0 0 0 .12 .1 v.59 l-.04 1z m-.02 -1.85 L0 -.83 a.14 .14 0 0 0 .25 -.14 A.14 .14 0 0 1 0 -.92 + path( + fill = SolidColor(Color(0xFFDA0000)), + ) { + // M 287.1 209.7 + moveTo(x = 287.1f, y = 209.7f) + // a 34.2 34.2 0 0 1 9 -63 + arcToRelative( + a = 34.2f, + b = 34.2f, + theta = 0.0f, + isMoreThanHalf = false, + isPositiveArc = true, + dx1 = 9.0f, + dy1 = -63.0f, + ) + // a 45 45 0 0 0 -9 63 + arcToRelative( + a = 45.0f, + b = 45.0f, + theta = 0.0f, + isMoreThanHalf = false, + isPositiveArc = false, + dx1 = -9.0f, + dy1 = 63.0f, + ) + // M 315 225 + moveTo(x = 315.0f, y = 225.0f) + // l 2.25 -45 + lineToRelative(dx = 2.25f, dy = -45.0f) + // L 315 144.45 + lineTo(x = 315.0f, y = 144.45f) + // a 13.500001 13.500001 0 0 1 -5.4 4.5 + arcToRelative( + a = 13.500001f, + b = 13.500001f, + theta = 0.0f, + isMoreThanHalf = false, + isPositiveArc = true, + dx1 = -5.4f, + dy1 = 4.5f, + ) + // l 0 26.55 + lineToRelative(dx = 0.0f, dy = 26.55f) + // l 1.8 45z + lineToRelative(dx = 1.8f, dy = 45.0f) + close() + // m 0.9 -83.25 + moveToRelative(dx = 0.9f, dy = -83.25f) + // L 315 142.65 + lineTo(x = 315.0f, y = 142.65f) + // a 6.4469476 6.4469476 0 0 1 -11.25 -6.3 + arcToRelative( + a = 6.4469476f, + b = 6.4469476f, + theta = 0.0f, + isMoreThanHalf = false, + isPositiveArc = true, + dx1 = -11.25f, + dy1 = -6.3f, + ) + // A 6.3 6.3 0 0 0 315 138.6 + arcTo( + horizontalEllipseRadius = 6.3f, + verticalEllipseRadius = 6.3f, + theta = 0.0f, + isMoreThanHalf = false, + isPositiveArc = false, + x1 = 315.0f, + y1 = 138.6f, + ) + } + }.build().also { _iranFlag = it } + } + +@Preview +@Composable +private fun IconPreview() { + TicTacToeTheme { + Column( + verticalArrangement = Arrangement.spacedBy(8.dp), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Image( + imageVector = Icons.IranFlag, + contentDescription = null, + modifier = Modifier + .width((630.0).dp) + .height((360.0).dp), + ) + } + } +} + +@Suppress("ObjectPropertyName") +private var _iranFlag: ImageVector? = null diff --git a/app/src/main/java/me/nasrabadiam/tictactoe/ui/icon/USFlag.kt b/app/src/main/java/me/nasrabadiam/tictactoe/ui/icon/USFlag.kt new file mode 100644 index 0000000..0c8138f --- /dev/null +++ b/app/src/main/java/me/nasrabadiam/tictactoe/ui/icon/USFlag.kt @@ -0,0 +1,913 @@ +package me.nasrabadiam.tictactoe.ui.icon + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.width +import androidx.compose.material.icons.Icons +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import me.nasrabadiam.tictactoe.ui.theme.TicTacToeTheme + +val Icons.USFlag: ImageVector + get() { + val current = _usFlag + if (current != null) return current + + return ImageVector.Builder( + name = "com.nasrabadiam.tictactoe.USFlag", + defaultWidth = 1235.0.dp, + defaultHeight = 650.0.dp, + viewportWidth = 7410.0f, + viewportHeight = 3900.0f, + ).apply { + // + path( + fill = SolidColor(Color(0xFFB22234)), + ) { + // M 0 0 + moveTo(x = 0.0f, y = 0.0f) + // h 7410 + horizontalLineToRelative(dx = 7410.0f) + // v 3900 + verticalLineToRelative(dy = 3900.0f) + // h -7410z + horizontalLineToRelative(dx = -7410.0f) + close() + } + // M0 450 H7410 m0 600 H0 m0 600 H7410 m0 600 H0 m0 600 H7410 m0 600 H0 + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 300.0f, + ) { + // M 0 450 + moveTo(x = 0.0f, y = 450.0f) + // H 7410 + horizontalLineTo(x = 7410.0f) + // m 0 600 + moveToRelative(dx = 0.0f, dy = 600.0f) + // H 0 + horizontalLineTo(x = 0.0f) + // m 0 600 + moveToRelative(dx = 0.0f, dy = 600.0f) + // H 7410 + horizontalLineTo(x = 7410.0f) + // m 0 600 + moveToRelative(dx = 0.0f, dy = 600.0f) + // H 0 + horizontalLineTo(x = 0.0f) + // m 0 600 + moveToRelative(dx = 0.0f, dy = 600.0f) + // H 7410 + horizontalLineTo(x = 7410.0f) + // m 0 600 + moveToRelative(dx = 0.0f, dy = 600.0f) + // H 0 + horizontalLineTo(x = 0.0f) + } + // + path( + fill = SolidColor(Color(0xFF3C3B6E)), + ) { + // M 0 0 + moveTo(x = 0.0f, y = 0.0f) + // h 2964 + horizontalLineToRelative(dx = 2964.0f) + // v 2100 + verticalLineToRelative(dy = 2100.0f) + // h -2964z + horizontalLineToRelative(dx = -2964.0f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 247 90 + moveTo(x = 247.0f, y = 90.0f) + // L 317.53424 307.08203 + lineTo(x = 317.53424f, y = 307.08203f) + // L 132.87321 172.91795 + lineTo(x = 132.87321f, y = 172.91795f) + // H 361.12677 + horizontalLineTo(x = 361.12677f) + // L 176.46577 307.08203z + lineTo(x = 176.46577f, y = 307.08203f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 247 510 + moveTo(x = 247.0f, y = 510.0f) + // L 317.53424 727.08203 + lineTo(x = 317.53424f, y = 727.08203f) + // L 132.87321 592.91797 + lineTo(x = 132.87321f, y = 592.91797f) + // L 361.12677 592.91797 + lineTo(x = 361.12677f, y = 592.91797f) + // L 176.46577 727.08203z + lineTo(x = 176.46577f, y = 727.08203f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 247 930 + moveTo(x = 247.0f, y = 930.0f) + // L 317.53424 1147.082 + lineTo(x = 317.53424f, y = 1147.082f) + // L 132.87321 1012.91797 + lineTo(x = 132.87321f, y = 1012.91797f) + // L 361.12677 1012.91797 + lineTo(x = 361.12677f, y = 1012.91797f) + // L 176.46577 1147.082z + lineTo(x = 176.46577f, y = 1147.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 247 1350 + moveTo(x = 247.0f, y = 1350.0f) + // L 317.53424 1567.082 + lineTo(x = 317.53424f, y = 1567.082f) + // L 132.87321 1432.918 + lineTo(x = 132.87321f, y = 1432.918f) + // L 361.12677 1432.918 + lineTo(x = 361.12677f, y = 1432.918f) + // L 176.46577 1567.082z + lineTo(x = 176.46577f, y = 1567.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 247 1770 + moveTo(x = 247.0f, y = 1770.0f) + // L 317.53424 1987.082 + lineTo(x = 317.53424f, y = 1987.082f) + // L 132.87321 1852.918 + lineTo(x = 132.87321f, y = 1852.918f) + // L 361.12677 1852.918 + lineTo(x = 361.12677f, y = 1852.918f) + // L 176.46577 1987.082z + lineTo(x = 176.46577f, y = 1987.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 494 300 + moveTo(x = 494.0f, y = 300.0f) + // L 564.53424 517.08203 + lineTo(x = 564.53424f, y = 517.08203f) + // L 379.87323 382.91797 + lineTo(x = 379.87323f, y = 382.91797f) + // L 608.1268 382.91797 + lineTo(x = 608.1268f, y = 382.91797f) + // L 423.46576 517.08203z + lineTo(x = 423.46576f, y = 517.08203f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 494 720 + moveTo(x = 494.0f, y = 720.0f) + // L 564.53424 937.08203 + lineTo(x = 564.53424f, y = 937.08203f) + // L 379.87323 802.91797 + lineTo(x = 379.87323f, y = 802.91797f) + // L 608.1268 802.91797 + lineTo(x = 608.1268f, y = 802.91797f) + // L 423.46576 937.08203z + lineTo(x = 423.46576f, y = 937.08203f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 494 1140 + moveTo(x = 494.0f, y = 1140.0f) + // L 564.53424 1357.082 + lineTo(x = 564.53424f, y = 1357.082f) + // L 379.87323 1222.918 + lineTo(x = 379.87323f, y = 1222.918f) + // L 608.1268 1222.918 + lineTo(x = 608.1268f, y = 1222.918f) + // L 423.46576 1357.082z + lineTo(x = 423.46576f, y = 1357.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 494 1560 + moveTo(x = 494.0f, y = 1560.0f) + // L 564.53424 1777.082 + lineTo(x = 564.53424f, y = 1777.082f) + // L 379.87323 1642.918 + lineTo(x = 379.87323f, y = 1642.918f) + // L 608.1268 1642.918 + lineTo(x = 608.1268f, y = 1642.918f) + // L 423.46576 1777.082z + lineTo(x = 423.46576f, y = 1777.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 741 90 + moveTo(x = 741.0f, y = 90.0f) + // L 811.53424 307.08203 + lineTo(x = 811.53424f, y = 307.08203f) + // L 626.8732 172.91795 + lineTo(x = 626.8732f, y = 172.91795f) + // L 855.1268 172.91795 + lineTo(x = 855.1268f, y = 172.91795f) + // L 670.46576 307.08203z + lineTo(x = 670.46576f, y = 307.08203f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 741 510 + moveTo(x = 741.0f, y = 510.0f) + // L 811.53424 727.08203 + lineTo(x = 811.53424f, y = 727.08203f) + // L 626.8732 592.91797 + lineTo(x = 626.8732f, y = 592.91797f) + // L 855.1268 592.91797 + lineTo(x = 855.1268f, y = 592.91797f) + // L 670.46576 727.08203z + lineTo(x = 670.46576f, y = 727.08203f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 741 930 + moveTo(x = 741.0f, y = 930.0f) + // L 811.53424 1147.082 + lineTo(x = 811.53424f, y = 1147.082f) + // L 626.8732 1012.91797 + lineTo(x = 626.8732f, y = 1012.91797f) + // L 855.1268 1012.91797 + lineTo(x = 855.1268f, y = 1012.91797f) + // L 670.46576 1147.082z + lineTo(x = 670.46576f, y = 1147.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 741 1350 + moveTo(x = 741.0f, y = 1350.0f) + // L 811.53424 1567.082 + lineTo(x = 811.53424f, y = 1567.082f) + // L 626.8732 1432.918 + lineTo(x = 626.8732f, y = 1432.918f) + // L 855.1268 1432.918 + lineTo(x = 855.1268f, y = 1432.918f) + // L 670.46576 1567.082z + lineTo(x = 670.46576f, y = 1567.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 741 1770 + moveTo(x = 741.0f, y = 1770.0f) + // L 811.53424 1987.082 + lineTo(x = 811.53424f, y = 1987.082f) + // L 626.8732 1852.918 + lineTo(x = 626.8732f, y = 1852.918f) + // L 855.1268 1852.918 + lineTo(x = 855.1268f, y = 1852.918f) + // L 670.46576 1987.082z + lineTo(x = 670.46576f, y = 1987.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 988 300 + moveTo(x = 988.0f, y = 300.0f) + // L 1058.5342 517.08203 + lineTo(x = 1058.5342f, y = 517.08203f) + // L 873.8732 382.91797 + lineTo(x = 873.8732f, y = 382.91797f) + // L 1102.1267 382.91797 + lineTo(x = 1102.1267f, y = 382.91797f) + // L 917.46576 517.08203z + lineTo(x = 917.46576f, y = 517.08203f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 988 720 + moveTo(x = 988.0f, y = 720.0f) + // L 1058.5342 937.08203 + lineTo(x = 1058.5342f, y = 937.08203f) + // L 873.8732 802.91797 + lineTo(x = 873.8732f, y = 802.91797f) + // L 1102.1267 802.91797 + lineTo(x = 1102.1267f, y = 802.91797f) + // L 917.46576 937.08203z + lineTo(x = 917.46576f, y = 937.08203f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 988 1140 + moveTo(x = 988.0f, y = 1140.0f) + // L 1058.5342 1357.082 + lineTo(x = 1058.5342f, y = 1357.082f) + // L 873.8732 1222.918 + lineTo(x = 873.8732f, y = 1222.918f) + // L 1102.1267 1222.918 + lineTo(x = 1102.1267f, y = 1222.918f) + // L 917.46576 1357.082z + lineTo(x = 917.46576f, y = 1357.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 988 1560 + moveTo(x = 988.0f, y = 1560.0f) + // L 1058.5342 1777.082 + lineTo(x = 1058.5342f, y = 1777.082f) + // L 873.8732 1642.918 + lineTo(x = 873.8732f, y = 1642.918f) + // L 1102.1267 1642.918 + lineTo(x = 1102.1267f, y = 1642.918f) + // L 917.46576 1777.082z + lineTo(x = 917.46576f, y = 1777.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 1235 90 + moveTo(x = 1235.0f, y = 90.0f) + // L 1305.5342 307.08203 + lineTo(x = 1305.5342f, y = 307.08203f) + // L 1120.8732 172.91795 + lineTo(x = 1120.8732f, y = 172.91795f) + // L 1349.1267 172.91795 + lineTo(x = 1349.1267f, y = 172.91795f) + // L 1164.4658 307.08203z + lineTo(x = 1164.4658f, y = 307.08203f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 1235 510 + moveTo(x = 1235.0f, y = 510.0f) + // L 1305.5342 727.08203 + lineTo(x = 1305.5342f, y = 727.08203f) + // L 1120.8732 592.91797 + lineTo(x = 1120.8732f, y = 592.91797f) + // L 1349.1267 592.91797 + lineTo(x = 1349.1267f, y = 592.91797f) + // L 1164.4658 727.08203z + lineTo(x = 1164.4658f, y = 727.08203f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 1235 930 + moveTo(x = 1235.0f, y = 930.0f) + // L 1305.5342 1147.082 + lineTo(x = 1305.5342f, y = 1147.082f) + // L 1120.8732 1012.91797 + lineTo(x = 1120.8732f, y = 1012.91797f) + // L 1349.1267 1012.91797 + lineTo(x = 1349.1267f, y = 1012.91797f) + // L 1164.4658 1147.082z + lineTo(x = 1164.4658f, y = 1147.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 1235 1350 + moveTo(x = 1235.0f, y = 1350.0f) + // L 1305.5342 1567.082 + lineTo(x = 1305.5342f, y = 1567.082f) + // L 1120.8732 1432.918 + lineTo(x = 1120.8732f, y = 1432.918f) + // L 1349.1267 1432.918 + lineTo(x = 1349.1267f, y = 1432.918f) + // L 1164.4658 1567.082z + lineTo(x = 1164.4658f, y = 1567.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 1235 1770 + moveTo(x = 1235.0f, y = 1770.0f) + // L 1305.5342 1987.082 + lineTo(x = 1305.5342f, y = 1987.082f) + // L 1120.8732 1852.918 + lineTo(x = 1120.8732f, y = 1852.918f) + // L 1349.1267 1852.918 + lineTo(x = 1349.1267f, y = 1852.918f) + // L 1164.4658 1987.082z + lineTo(x = 1164.4658f, y = 1987.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 1482 300 + moveTo(x = 1482.0f, y = 300.0f) + // L 1552.5342 517.08203 + lineTo(x = 1552.5342f, y = 517.08203f) + // L 1367.8732 382.91797 + lineTo(x = 1367.8732f, y = 382.91797f) + // L 1596.1267 382.91797 + lineTo(x = 1596.1267f, y = 382.91797f) + // L 1411.4658 517.08203z + lineTo(x = 1411.4658f, y = 517.08203f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 1482 720 + moveTo(x = 1482.0f, y = 720.0f) + // L 1552.5342 937.08203 + lineTo(x = 1552.5342f, y = 937.08203f) + // L 1367.8732 802.91797 + lineTo(x = 1367.8732f, y = 802.91797f) + // L 1596.1267 802.91797 + lineTo(x = 1596.1267f, y = 802.91797f) + // L 1411.4658 937.08203z + lineTo(x = 1411.4658f, y = 937.08203f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 1482 1140 + moveTo(x = 1482.0f, y = 1140.0f) + // L 1552.5342 1357.082 + lineTo(x = 1552.5342f, y = 1357.082f) + // L 1367.8732 1222.918 + lineTo(x = 1367.8732f, y = 1222.918f) + // L 1596.1267 1222.918 + lineTo(x = 1596.1267f, y = 1222.918f) + // L 1411.4658 1357.082z + lineTo(x = 1411.4658f, y = 1357.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 1482 1560 + moveTo(x = 1482.0f, y = 1560.0f) + // L 1552.5342 1777.082 + lineTo(x = 1552.5342f, y = 1777.082f) + // L 1367.8732 1642.918 + lineTo(x = 1367.8732f, y = 1642.918f) + // L 1596.1267 1642.918 + lineTo(x = 1596.1267f, y = 1642.918f) + // L 1411.4658 1777.082z + lineTo(x = 1411.4658f, y = 1777.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 1729 90 + moveTo(x = 1729.0f, y = 90.0f) + // L 1799.5342 307.08203 + lineTo(x = 1799.5342f, y = 307.08203f) + // L 1614.8732 172.91795 + lineTo(x = 1614.8732f, y = 172.91795f) + // L 1843.1267 172.91795 + lineTo(x = 1843.1267f, y = 172.91795f) + // L 1658.4658 307.08203z + lineTo(x = 1658.4658f, y = 307.08203f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 1729 510 + moveTo(x = 1729.0f, y = 510.0f) + // L 1799.5342 727.08203 + lineTo(x = 1799.5342f, y = 727.08203f) + // L 1614.8732 592.91797 + lineTo(x = 1614.8732f, y = 592.91797f) + // L 1843.1267 592.91797 + lineTo(x = 1843.1267f, y = 592.91797f) + // L 1658.4658 727.08203z + lineTo(x = 1658.4658f, y = 727.08203f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 1729 930 + moveTo(x = 1729.0f, y = 930.0f) + // L 1799.5342 1147.082 + lineTo(x = 1799.5342f, y = 1147.082f) + // L 1614.8732 1012.91797 + lineTo(x = 1614.8732f, y = 1012.91797f) + // L 1843.1267 1012.91797 + lineTo(x = 1843.1267f, y = 1012.91797f) + // L 1658.4658 1147.082z + lineTo(x = 1658.4658f, y = 1147.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 1729 1350 + moveTo(x = 1729.0f, y = 1350.0f) + // L 1799.5342 1567.082 + lineTo(x = 1799.5342f, y = 1567.082f) + // L 1614.8732 1432.918 + lineTo(x = 1614.8732f, y = 1432.918f) + // L 1843.1267 1432.918 + lineTo(x = 1843.1267f, y = 1432.918f) + // L 1658.4658 1567.082z + lineTo(x = 1658.4658f, y = 1567.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 1729 1770 + moveTo(x = 1729.0f, y = 1770.0f) + // L 1799.5342 1987.082 + lineTo(x = 1799.5342f, y = 1987.082f) + // L 1614.8732 1852.918 + lineTo(x = 1614.8732f, y = 1852.918f) + // L 1843.1267 1852.918 + lineTo(x = 1843.1267f, y = 1852.918f) + // L 1658.4658 1987.082z + lineTo(x = 1658.4658f, y = 1987.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 1976 300 + moveTo(x = 1976.0f, y = 300.0f) + // L 2046.5342 517.08203 + lineTo(x = 2046.5342f, y = 517.08203f) + // L 1861.8732 382.91797 + lineTo(x = 1861.8732f, y = 382.91797f) + // L 2090.1267 382.91797 + lineTo(x = 2090.1267f, y = 382.91797f) + // L 1905.4658 517.08203z + lineTo(x = 1905.4658f, y = 517.08203f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 1976 720 + moveTo(x = 1976.0f, y = 720.0f) + // L 2046.5342 937.08203 + lineTo(x = 2046.5342f, y = 937.08203f) + // L 1861.8732 802.91797 + lineTo(x = 1861.8732f, y = 802.91797f) + // L 2090.1267 802.91797 + lineTo(x = 2090.1267f, y = 802.91797f) + // L 1905.4658 937.08203z + lineTo(x = 1905.4658f, y = 937.08203f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 1976 1140 + moveTo(x = 1976.0f, y = 1140.0f) + // L 2046.5342 1357.082 + lineTo(x = 2046.5342f, y = 1357.082f) + // L 1861.8732 1222.918 + lineTo(x = 1861.8732f, y = 1222.918f) + // L 2090.1267 1222.918 + lineTo(x = 2090.1267f, y = 1222.918f) + // L 1905.4658 1357.082z + lineTo(x = 1905.4658f, y = 1357.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 1976 1560 + moveTo(x = 1976.0f, y = 1560.0f) + // L 2046.5342 1777.082 + lineTo(x = 2046.5342f, y = 1777.082f) + // L 1861.8732 1642.918 + lineTo(x = 1861.8732f, y = 1642.918f) + // L 2090.1267 1642.918 + lineTo(x = 2090.1267f, y = 1642.918f) + // L 1905.4658 1777.082z + lineTo(x = 1905.4658f, y = 1777.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 2223 90 + moveTo(x = 2223.0f, y = 90.0f) + // L 2293.5342 307.08203 + lineTo(x = 2293.5342f, y = 307.08203f) + // L 2108.8733 172.91795 + lineTo(x = 2108.8733f, y = 172.91795f) + // L 2337.1267 172.91795 + lineTo(x = 2337.1267f, y = 172.91795f) + // L 2152.4658 307.08203z + lineTo(x = 2152.4658f, y = 307.08203f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 2223 510 + moveTo(x = 2223.0f, y = 510.0f) + // L 2293.5342 727.08203 + lineTo(x = 2293.5342f, y = 727.08203f) + // L 2108.8733 592.91797 + lineTo(x = 2108.8733f, y = 592.91797f) + // L 2337.1267 592.91797 + lineTo(x = 2337.1267f, y = 592.91797f) + // L 2152.4658 727.08203z + lineTo(x = 2152.4658f, y = 727.08203f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 2223 930 + moveTo(x = 2223.0f, y = 930.0f) + // L 2293.5342 1147.082 + lineTo(x = 2293.5342f, y = 1147.082f) + // L 2108.8733 1012.91797 + lineTo(x = 2108.8733f, y = 1012.91797f) + // L 2337.1267 1012.91797 + lineTo(x = 2337.1267f, y = 1012.91797f) + // L 2152.4658 1147.082z + lineTo(x = 2152.4658f, y = 1147.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 2223 1350 + moveTo(x = 2223.0f, y = 1350.0f) + // L 2293.5342 1567.082 + lineTo(x = 2293.5342f, y = 1567.082f) + // L 2108.8733 1432.918 + lineTo(x = 2108.8733f, y = 1432.918f) + // L 2337.1267 1432.918 + lineTo(x = 2337.1267f, y = 1432.918f) + // L 2152.4658 1567.082z + lineTo(x = 2152.4658f, y = 1567.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 2223 1770 + moveTo(x = 2223.0f, y = 1770.0f) + // L 2293.5342 1987.082 + lineTo(x = 2293.5342f, y = 1987.082f) + // L 2108.8733 1852.918 + lineTo(x = 2108.8733f, y = 1852.918f) + // L 2337.1267 1852.918 + lineTo(x = 2337.1267f, y = 1852.918f) + // L 2152.4658 1987.082z + lineTo(x = 2152.4658f, y = 1987.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 2470 300 + moveTo(x = 2470.0f, y = 300.0f) + // L 2540.5342 517.08203 + lineTo(x = 2540.5342f, y = 517.08203f) + // L 2355.8733 382.91797 + lineTo(x = 2355.8733f, y = 382.91797f) + // L 2584.1267 382.91797 + lineTo(x = 2584.1267f, y = 382.91797f) + // L 2399.4658 517.08203z + lineTo(x = 2399.4658f, y = 517.08203f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 2470 720 + moveTo(x = 2470.0f, y = 720.0f) + // L 2540.5342 937.08203 + lineTo(x = 2540.5342f, y = 937.08203f) + // L 2355.8733 802.91797 + lineTo(x = 2355.8733f, y = 802.91797f) + // L 2584.1267 802.91797 + lineTo(x = 2584.1267f, y = 802.91797f) + // L 2399.4658 937.08203z + lineTo(x = 2399.4658f, y = 937.08203f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 2470 1140 + moveTo(x = 2470.0f, y = 1140.0f) + // L 2540.5342 1357.082 + lineTo(x = 2540.5342f, y = 1357.082f) + // L 2355.8733 1222.918 + lineTo(x = 2355.8733f, y = 1222.918f) + // L 2584.1267 1222.918 + lineTo(x = 2584.1267f, y = 1222.918f) + // L 2399.4658 1357.082z + lineTo(x = 2399.4658f, y = 1357.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 2470 1560 + moveTo(x = 2470.0f, y = 1560.0f) + // L 2540.5342 1777.082 + lineTo(x = 2540.5342f, y = 1777.082f) + // L 2355.8733 1642.918 + lineTo(x = 2355.8733f, y = 1642.918f) + // L 2584.1267 1642.918 + lineTo(x = 2584.1267f, y = 1642.918f) + // L 2399.4658 1777.082z + lineTo(x = 2399.4658f, y = 1777.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 2717 90 + moveTo(x = 2717.0f, y = 90.0f) + // L 2787.5342 307.08203 + lineTo(x = 2787.5342f, y = 307.08203f) + // L 2602.8733 172.91795 + lineTo(x = 2602.8733f, y = 172.91795f) + // L 2831.1267 172.91795 + lineTo(x = 2831.1267f, y = 172.91795f) + // L 2646.4658 307.08203z + lineTo(x = 2646.4658f, y = 307.08203f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 2717 510 + moveTo(x = 2717.0f, y = 510.0f) + // L 2787.5342 727.08203 + lineTo(x = 2787.5342f, y = 727.08203f) + // L 2602.8733 592.91797 + lineTo(x = 2602.8733f, y = 592.91797f) + // L 2831.1267 592.91797 + lineTo(x = 2831.1267f, y = 592.91797f) + // L 2646.4658 727.08203z + lineTo(x = 2646.4658f, y = 727.08203f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 2717 930 + moveTo(x = 2717.0f, y = 930.0f) + // L 2787.5342 1147.082 + lineTo(x = 2787.5342f, y = 1147.082f) + // L 2602.8733 1012.91797 + lineTo(x = 2602.8733f, y = 1012.91797f) + // L 2831.1267 1012.91797 + lineTo(x = 2831.1267f, y = 1012.91797f) + // L 2646.4658 1147.082z + lineTo(x = 2646.4658f, y = 1147.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 2717 1350 + moveTo(x = 2717.0f, y = 1350.0f) + // L 2787.5342 1567.082 + lineTo(x = 2787.5342f, y = 1567.082f) + // L 2602.8733 1432.918 + lineTo(x = 2602.8733f, y = 1432.918f) + // L 2831.1267 1432.918 + lineTo(x = 2831.1267f, y = 1432.918f) + // L 2646.4658 1567.082z + lineTo(x = 2646.4658f, y = 1567.082f) + close() + } + // M247 90 317.534230 307.082039 132.873218 172.917961 H361.126782 L176.465770 307.082039z + path( + fill = SolidColor(Color(0xFFFFFFFF)), + ) { + // M 2717 1770 + moveTo(x = 2717.0f, y = 1770.0f) + // L 2787.5342 1987.082 + lineTo(x = 2787.5342f, y = 1987.082f) + // L 2602.8733 1852.918 + lineTo(x = 2602.8733f, y = 1852.918f) + // L 2831.1267 1852.918 + lineTo(x = 2831.1267f, y = 1852.918f) + // L 2646.4658 1987.082z + lineTo(x = 2646.4658f, y = 1987.082f) + close() + } + }.build().also { _usFlag = it } + } + +@Preview +@Composable +private fun IconPreview() { + TicTacToeTheme { + Column( + verticalArrangement = Arrangement.spacedBy(8.dp), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Image( + imageVector = Icons.USFlag, + contentDescription = null, + modifier = Modifier + .width((7410.0).dp) + .height((250.0).dp), + ) + } + } +} + +@Suppress("ObjectPropertyName") +private var _usFlag: ImageVector? = null