mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-08 23:54:39 +00:00
Switches Robohash to Precompiled SVGs in order to reduce the memory burned of creating Strings with SVGs on the fly.
This commit is contained in:
@@ -73,6 +73,7 @@ class HashImageFetcher(
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("Use the RobohashAssembler instead")
|
||||
object RobohashImageRequest {
|
||||
fun build(
|
||||
context: Context,
|
||||
|
||||
@@ -36,12 +36,12 @@ import androidx.compose.ui.graphics.ColorFilter
|
||||
import androidx.compose.ui.graphics.DefaultAlpha
|
||||
import androidx.compose.ui.graphics.FilterQuality
|
||||
import androidx.compose.ui.graphics.drawscope.DrawScope
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.core.graphics.drawable.toDrawable
|
||||
import coil.ImageLoader
|
||||
import coil.compose.AsyncImage
|
||||
import coil.compose.AsyncImagePainter
|
||||
import coil.compose.rememberAsyncImagePainter
|
||||
import coil.decode.DataSource
|
||||
import coil.fetch.DrawableResult
|
||||
@@ -49,6 +49,7 @@ import coil.fetch.FetchResult
|
||||
import coil.fetch.Fetcher
|
||||
import coil.request.ImageRequest
|
||||
import coil.request.Options
|
||||
import com.vitorpamplona.amethyst.commons.CachedRobohash
|
||||
import com.vitorpamplona.amethyst.service.checkNotInMainThread
|
||||
import com.vitorpamplona.amethyst.ui.theme.isLight
|
||||
import java.util.Base64
|
||||
@@ -58,31 +59,18 @@ fun RobohashAsyncImage(
|
||||
robot: String,
|
||||
modifier: Modifier = Modifier,
|
||||
contentDescription: String? = null,
|
||||
transform: (AsyncImagePainter.State) -> AsyncImagePainter.State =
|
||||
AsyncImagePainter.DefaultTransform,
|
||||
onState: ((AsyncImagePainter.State) -> Unit)? = null,
|
||||
alignment: Alignment = Alignment.Center,
|
||||
contentScale: ContentScale = ContentScale.Fit,
|
||||
alpha: Float = DefaultAlpha,
|
||||
colorFilter: ColorFilter? = null,
|
||||
filterQuality: FilterQuality = DrawScope.DefaultFilterQuality,
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
val isLightTheme = MaterialTheme.colorScheme.isLight
|
||||
|
||||
val imageRequest = remember(robot) { RobohashImageRequest.build(context, robot, isLightTheme) }
|
||||
val robotPainter =
|
||||
remember(robot) {
|
||||
CachedRobohash.get(robot, isLightTheme)
|
||||
}
|
||||
|
||||
AsyncImage(
|
||||
model = imageRequest,
|
||||
Image(
|
||||
imageVector = robotPainter,
|
||||
contentDescription = contentDescription,
|
||||
modifier = modifier,
|
||||
transform = transform,
|
||||
onState = onState,
|
||||
alignment = alignment,
|
||||
contentScale = contentScale,
|
||||
alpha = alpha,
|
||||
colorFilter = colorFilter,
|
||||
filterQuality = filterQuality,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -101,10 +89,6 @@ fun RobohashFallbackAsyncImage(
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
val isLightTheme = MaterialTheme.colorScheme.isLight
|
||||
val painter =
|
||||
rememberAsyncImagePainter(
|
||||
model = RobohashImageRequest.build(context, robot, isLightTheme),
|
||||
)
|
||||
|
||||
if (model != null && loadProfilePicture) {
|
||||
val isBase64 by remember { derivedStateOf { model.startsWith("data:image/jpeg;base64,") } }
|
||||
@@ -124,6 +108,11 @@ fun RobohashFallbackAsyncImage(
|
||||
colorFilter = colorFilter,
|
||||
)
|
||||
} else {
|
||||
val painter =
|
||||
rememberVectorPainter(
|
||||
image = CachedRobohash.get(robot, isLightTheme),
|
||||
)
|
||||
|
||||
AsyncImage(
|
||||
model = model,
|
||||
contentDescription = contentDescription,
|
||||
@@ -139,8 +128,10 @@ fun RobohashFallbackAsyncImage(
|
||||
)
|
||||
}
|
||||
} else {
|
||||
val robotPainter = CachedRobohash.get(robot, isLightTheme)
|
||||
|
||||
Image(
|
||||
painter = painter,
|
||||
imageVector = robotPainter,
|
||||
contentDescription = contentDescription,
|
||||
modifier = modifier,
|
||||
alignment = alignment,
|
||||
|
||||
@@ -56,6 +56,8 @@ dependencies {
|
||||
androidTestImplementation project(path: ':quartz')
|
||||
androidTestImplementation project(path: ':commons')
|
||||
|
||||
androidTestImplementation libs.androidx.compose.foundation
|
||||
|
||||
// Add your dependencies here. Note that you cannot benchmark code
|
||||
// in an app module this way - you will need to move any code you
|
||||
// want to benchmark to a library module:
|
||||
|
||||
+11
-152
@@ -24,7 +24,7 @@ import androidx.benchmark.junit4.BenchmarkRule
|
||||
import androidx.benchmark.junit4.measureRepeated
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import com.vitorpamplona.amethyst.commons.Robohash
|
||||
import junit.framework.TestCase.assertEquals
|
||||
import com.vitorpamplona.amethyst.commons.RobohashAssembler
|
||||
import okio.Buffer
|
||||
import okio.buffer
|
||||
import okio.source
|
||||
@@ -45,162 +45,21 @@ class RobohashBenchmark {
|
||||
|
||||
val warmHex = "f4f016c739b8ec0d6313540a8b12cf48a72b485d38338627ec9d427583551f9a"
|
||||
val testHex = "48a72b485d38338627ec9d427583551f9af4f016c739b8ec0d6313540a8b12cf"
|
||||
val expectedTestSVG =
|
||||
"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 300 300\">" +
|
||||
"<defs>" +
|
||||
"<style>" +
|
||||
".cls-bg{fill:#b2d7a6;}.cls-fill-1{fill:#4e5647;}.cls-fill-2{fill:#4e5647;}" +
|
||||
".cls-11-2{fill:#fff;}.cls-11-2,.cls-11-6{fill-opacity:0.2;}.cls-11-3{fill:none;}" +
|
||||
".cls-11-3,.cls-11-4{stroke:#000;stroke-miterlimit:10;}.cls-11-4{fill:#6d6e70;}" +
|
||||
".cls-11-5{opacity:0.2;}.cls-34-2,.cls-34-3{fill:#fff;}.cls-34-2{fill-opacity:0.4;}" +
|
||||
".cls-34-3,.cls-34-5{fill-opacity:0.2;}.cls-34-3,.cls-34-4{stroke:#000;stroke-miterlimit:10;}" +
|
||||
".cls-34-4{fill:none;}.cls-29-2{fill:#fff;}.cls-29-2,.cls-29-4{fill-opacity:0.4;}" +
|
||||
".cls-29-3{fill:none;}.cls-29-3,.cls-29-4{stroke:#000;stroke-linecap:round;stroke-linejoin:round;}" +
|
||||
".cls-29-4{stroke-width:0.75px;}.cls-46-2{fill-opacity:0.4;}.cls-46-3{fill:none;}" +
|
||||
".cls-46-3,.cls-46-4{stroke:#000;stroke-linecap:round;stroke-linejoin:round;}" +
|
||||
".cls-46-4{fill:#461917;stroke-width:0.5px;}.cls-07-10,.cls-07-2,.cls-07-4,.cls-07-8,.cls-07-9{fill:none;}" +
|
||||
".cls-07-10,.cls-07-2,.cls-07-3,.cls-07-4,.cls-07-5,.cls-07-6,.cls-07-8,.cls-07-9{stroke:#000;}" +
|
||||
".cls-07-2,.cls-07-3,.cls-07-4,.cls-07-5,.cls-07-6,.cls-07-8{stroke-linecap:round;}" +
|
||||
".cls-07-2,.cls-07-3,.cls-07-4,.cls-07-5,.cls-07-6,.cls-07-8,.cls-07-9{stroke-linejoin:round;}" +
|
||||
".cls-07-3,.cls-07-5{fill:#fff;}.cls-07-3,.cls-07-5,.cls-07-6,.cls-07-7{fill-opacity:0.2;}" +
|
||||
".cls-07-3,.cls-07-4{stroke-width:0.75px;}.cls-07-10,.cls-07-8,.cls-07-9{stroke-width:1.5px;}" +
|
||||
".cls-07-10{stroke-miterlimit:10;}" +
|
||||
"</style>" +
|
||||
"</defs>" +
|
||||
"<rect width=\"300\" height=\"300\" class=\"cls-bg\" /><g>" +
|
||||
"<path class=\"cls-fill-1\" d=\"M160.5,246.5s-14-3-27,13-22,45-22,45h108s-20-35-25-40S176.5,247.5,160.5,246.5Z\"/>" +
|
||||
"<path class=\"cls-11-2\" d=\"M121.5,303.5s5-24,10-33,3.28-8.07,7.64-8.53,15.13-1.22,23.75,2.66,8.18,3.25," +
|
||||
"8.18,3.25l13.12-12.15s-12.68-9.66-26.18-9.44-23.5,12.22-26.5,15.22-14.17,23.45-19.09,40.22Z\"/>" +
|
||||
"<path class=\"cls-11-3\" d=\"M145.5,261.5s28,1,38,17,13,26,13,26h-86s13.77-34.15,18.39-38.57S144.5,261.5,145.5,261.5Z\"/>" +
|
||||
"<path class=\"cls-11-2\" d=\"M121.5,303.5s5-24,10-33,3.28-8.07,7.64-8.53c22.36-1.47," +
|
||||
"31.93,5.9,31.93,5.9l13.12-12.15s-12.68-9.66-26.18-9.44-23.5,12.22-26.5,15.22-14.17," +
|
||||
"23.45-19.09,40.22Z\"/>" +
|
||||
"<path class=\"cls-11-3\" d=\"M160.5,246.5s-14-3-27,13-22,45-22,45h108s-20-35-25-40S176.5," +
|
||||
"247.5,160.5,246.5Z\"/><path class=\"cls-11-4\" d=\"M149,192s1,62,2,64a11.16,11.16,0,0,0," +
|
||||
"9.06,3.21c5.44-.71,6.44-2.71,6.94-5.21,0,0-2.5-48.5-2.5-62.5Z\"/>" +
|
||||
"<path class=\"cls-11-5\" d=\"M159.5,191.5s3,36,3,40,1,27,1,27l3-1-2-66Z\"/>" +
|
||||
"<path class=\"cls-11-3\" d=\"M164.5,203.5a8.76,8.76,0,0,1-6,2c-4,0-8,0-9-1\"/>" +
|
||||
"<path class=\"cls-11-3\" d=\"M165.5,214.5a12.68,12.68,0,0,1-6,2c-3,0-7,.25-10-1.37\"/>" +
|
||||
"<path class=\"cls-11-3\" d=\"M165.8,225.5a10.11,10.11,0,0,1-6.3,2c-4,0-7.65-.2-9.82-2.1\"/>" +
|
||||
"<path class=\"cls-11-3\" d=\"M166,234.5s-.5,3-5.5,3a64.39,64.39,0,0,1-10.3-1\"/>" +
|
||||
"<path class=\"cls-11-3\" d=\"M166.5,245.5s-1,3-6,3a21.51,21.51,0,0,1-10-2\"/>" +
|
||||
"<path class=\"cls-11-6\" d=\"M195.58,301.91H218S203,275.78,198.73,270.14,186.5,256.5,184.5," +
|
||||
"255.5l-13,12s8,4.69,10.48,8.84S192.66,293.32,195.58,301.91Z\"/>" +
|
||||
"<path class=\"cls-11-4\" d=\"M193.5,272.5a6.85,6.85,0,0,0-2,8c2,5,8,6,8,6s7-6,15-2,9,7,9,15," +
|
||||
"14,3,14,3l2-2s4-21-19-31C220.5,269.5,209.5,265.5,193.5,272.5Z\"/>" +
|
||||
"<path class=\"cls-11-6\" d=\"M196.5,284.5a25.68,25.68,0,0,1,18-5c11,1,16,9,18,17s-4,10-4," +
|
||||
"10l-5-7s.05-13.88-10-15.44-14,2.44-14,2.44S195.5,286.5,196.5,284.5Z\"/>" +
|
||||
"<path class=\"cls-11-3\" d=\"M206,268.82a2.89,2.89,0,0,0-1.5,2.68c0,2,.1,8.87,7,11.94\"/>" +
|
||||
"<path class=\"cls-11-3\" d=\"M229.44,274.89s-3.94-1.39-5.94,1.61-3.62,9.25-2.81,12.13\"/>" +
|
||||
"<path class=\"cls-11-3\" d=\"M223.56,300.34c-.06.16.94-2.84,5.94-2.84a21.66,21.66," +
|
||||
"0,0,1,10.09,2.37\"/>" +
|
||||
"<path class=\"cls-11-4\" d=\"M127.07,268.36S108.5,263.5,98.5,279.5c0,0-5,9,1,20s7,4,7," +
|
||||
"4l7-5.25s-6-7.75-2-13.75c0,0,2.75-4.25,8.88-3.12Z\"/>" +
|
||||
"<path class=\"cls-11-3\" d=\"M119.5,281.5s2-7,1-10a5.45,5.45,0,0,0-3.56-3.62\"/>" +
|
||||
"<path class=\"cls-11-3\" d=\"M111.5,284.5a14.54,14.54,0,0,0-8-5c-5-1-5.44.94-5.44.94\"/>" +
|
||||
"<path class=\"cls-11-3\" d=\"M111,293.56a10.89,10.89,0,0,0-7.48.94c-4,2-4,5-4,5\"/>" +
|
||||
"<path class=\"cls-11-6\" d=\"M123.53,274.89s-7-2.39-13,.61-9,7-9,12,5,12,7,14,4.83-3.86," +
|
||||
"4.83-3.86-3.83-5.14-2.83-11.14c0,0,1-6,10-5Z\"/>" +
|
||||
"<circle cx=\"145\" cy=\"266\" r=\"1.5\"/>" +
|
||||
"<circle cx=\"160.5\" cy=\"268.5\" r=\"1.5\"/>" +
|
||||
"<circle cx=\"173.5\" cy=\"274.5\" r=\"1.5\"/>" +
|
||||
"<circle cx=\"182.5\" cy=\"285.5\" r=\"1.5\"/>" +
|
||||
"<circle cx=\"188.5\" cy=\"296.5\" r=\"1.5\"/>" +
|
||||
"<circle cx=\"133.5\" cy=\"266.5\" r=\"1.5\"/>" +
|
||||
"</g><g>" +
|
||||
"" +
|
||||
"<path class=\"cls-fill-1\" d=\"M91.5,107.5s4,64,4,77,1,38,1,38,4,11,22,10c36.5.5,60-11," +
|
||||
"66-16,0,0-3-106-3-116s4-20-36-22c0,0-35.59,1.45-44.8,8.73,0,0-10.2,2.27-9.2,7.27S91.5," +
|
||||
"107.5,91.5,107.5Z\"/>" +
|
||||
"<path class=\"cls-34-2\" d=\"M95.8,102s2.7,53.53,3.7,68.53,5,42,5," +
|
||||
"45v14.71s-7-3.71-8-7.71-3.65-88.21-3.83-95.61S91.5,107.5,91.5,107.5v-13S91.1," +
|
||||
"100.43,95.8,102Z\"/>" +
|
||||
"<path class=\"cls-34-3\" d=\"M145.5,78.5s-53,5-54,16,23,14,37,13,52-7,53-16S156.5,77.5,145.5,78.5Z\"/>" +
|
||||
"<path class=\"cls-34-4\" d=\"M91.5,107.5s4,64,4,77,1,38,1,38,3,9,22,10c32,2,60-11,66-16," +
|
||||
"0,0-3-106-3-116s4-20-36-22c-16,.67-31.14,3.13-44.8,8.73-4.7,1.42-7.78,3.83-9.2,7.27Z\"/>" +
|
||||
"<path class=\"cls-34-5\" d=\"M168.5,103.5s1,49,1,57,1,35,1,41-1,22.92-1," +
|
||||
"22.92l15-7.92s-2.94-96.67-3-100.83,0-25.17,0-25.17c.34,3.51-3.36,6.57-11,9.17l-2,.72Z\"/>" +
|
||||
"<circle cx=\"148\" cy=\"114\" r=\"1.5\"/><circle cx=\"130.5\" cy=\"116.5\" r=\"1.5\"/>" +
|
||||
"<circle cx=\"114.5\" cy=\"117.5\" r=\"1.5\"/><circle cx=\"116.5\" cy=\"225.5\" r=\"1.5\"/>" +
|
||||
"<circle cx=\"101.5\" cy=\"220.5\" r=\"1.5\"/><circle cx=\"132.5\" cy=\"225.5\" r=\"1.5\"/>" +
|
||||
"<circle cx=\"150.5\" cy=\"221.5\" r=\"1.5\"/><circle cx=\"166.5\" cy=\"217.5\" r=\"1.5\"/>" +
|
||||
"<circle cx=\"179.5\" cy=\"212.5\" r=\"1.5\"/><circle cx=\"99.5\" cy=\"112.5\" r=\"1.5\"/>" +
|
||||
"<circle cx=\"164.5\" cy=\"109.5\" r=\"1.5\"/><circle cx=\"177.5\" cy=\"104.5\" r=\"1.5\"/>" +
|
||||
"</g><path class=\"cls-fill-1\" d=\"M129.5,123.5s-30,3-31,15,8,13,15,14,20-2,26-3,25,1,27-13-17-14-17-14Z\"/>" +
|
||||
"<path class=\"cls-29-2\" d=\"M116.92,125.8s-15.42,2.7-16.42,12.7,15.5,13,24.25,10.5A97.37,97.37," +
|
||||
"0,0,1,150,145.44c6.5.06,16.78-3.69,16.64-11.31S157.5,122.5,149.5,122.5s-21.12,1.13-21.12,1.13Z\"/>" +
|
||||
"<path class=\"cls-29-2\" d=\"M130.5,123.5l-8,25.5c1.6-.06,5.38-.65,9-1.2l7-24.8A47.26,47.26,0,0,1," +
|
||||
"130.5,123.5Z\"/>" +
|
||||
"<polygon class=\"cls-29-2\" points=\"120.77 124.91 113 150 118 150 125.41 124.06 120.77 124.91\"/>" +
|
||||
"<path class=\"cls-29-3\" d=\"M129.5,123.5s-30,3-31,15,8,13,15,14,20-2,26-3,25,1,27-13-17-14-17-14Z\"/>" +
|
||||
"<path class=\"cls-29-4\" d=\"M106.61,129.46s-6.11,3-6.11,9,5,13,20,11,23-4,28-4,17.29-2.5," +
|
||||
"18.15-10.25c0,0,.3,10.92-14.42,13.09s-16.25,1.2-21,2.68-28.06,4.23-32.4-7.15C98.84,143.87," +
|
||||
"95.71,134.43,106.61,129.46Z\"/><g><g>" +
|
||||
"<path class=\"cls-fill-1\" d=\"M122,180s1,10,2,14,1.5,6.5,1.5,6.5,3,0,4-1-2-17-2-18v-2s-1.49,0-3,.11A12,12,0,0,0,122,180Z\"/>" +
|
||||
"<path class=\"cls-fill-1\" d=\"M131,179s1,10,2,14,1.5,6.5,1.5,6.5,3,0,4-1-2-17-2-18v-2s-1.49,0-3,.11A12,12,0,0,0,131,179Z\"/>" +
|
||||
"<path class=\"cls-fill-1\" d=\"M141,179s1,10,2,14,1.5,6.5,1.5,6.5,3,0,4-1-2-17-2-18v-2s-1.49,0-3,.11A12,12,0,0,0,141,179Z\"/>" +
|
||||
"<path class=\"cls-fill-1\" d=\"M149,178s1,10,2,14,1.5,6.5,1.5,6.5,3,0,4-1-2-17-2-18v-2s-1.49,0-3,.11A12,12,0,0,0,149,178Z\"/>" +
|
||||
"</g>" +
|
||||
"<path class=\"cls-46-2\" d=\"M122,180s1,10,2,14,1.5,6.5,1.5,6.5,3,0,4-1-2-17-2-18v-2s-1.49,0-3,.11A12,12,0,0,0,122,180Z\"/>" +
|
||||
"<path class=\"cls-46-3\" d=\"M122,180s1,10,2,14,1.5,6.5,1.5,6.5,3,0,4-1-2-17-2-18v-2s-1.49,0-3,.11A12,12,0,0,0,122,180Z\"/>" +
|
||||
"<path class=\"cls-46-4\" d=\"M124.5,180.5s1,11,2,14a15.77,15.77,0,0,1,1,4s2.34-.11,2.17.44a31,31,0,0,0-.82-8.63,59,59,0,0,1-1.35-10.07v-.75h-3Z\"/>" +
|
||||
"<line class=\"cls-46-4\" x1=\"125.85\" y1=\"200.49\" x2=\"127.5\" y2=\"198.5\"/>" +
|
||||
"<path class=\"cls-46-2\" d=\"M131,179s1,10,2,14,1.5,6.5,1.5,6.5,3,0,4-1-2-17-2-18v-2s-1.49,0-3,.11A12,12,0,0,0,131,179Z\"/>" +
|
||||
"<path class=\"cls-46-3\" d=\"M131,179s1,10,2,14,1.5,6.5,1.5,6.5,3,0,4-1-2-17-2-18v-2s-1.49,0-3,.11A12,12,0,0,0,131,179Z\"/>" +
|
||||
"<path class=\"cls-46-4\" d=\"M133.5,179.5s1,11,2,14a15.77,15.77,0,0,1,1,4s2.34-.11,2.17.44a31,31,0,0,0-.82-8.63,59,59,0,0,1-1.35-10.07v-.75h-3Z\"/>" +
|
||||
"<line class=\"cls-46-4\" x1=\"134.85\" y1=\"199.49\" x2=\"136.5\" y2=\"197.5\"/>" +
|
||||
"<path class=\"cls-46-2\" d=\"M141,179s1,10,2,14,1.5,6.5,1.5,6.5,3,0,4-1-2-17-2-18v-2s-1.49,0-3,.11A12,12,0,0,0,141,179Z\"/>" +
|
||||
"<path class=\"cls-46-3\" d=\"M141,179s1,10,2,14,1.5,6.5,1.5,6.5,3,0,4-1-2-17-2-18v-2s-1.49,0-3,.11A12,12,0,0,0,141,179Z\"/>" +
|
||||
"<path class=\"cls-46-4\" d=\"M143.5,179.5s1,11,2,14a15.77,15.77,0,0,1,1,4s2.34-.11,2.17.44a31,31,0,0,0-.82-8.63,59,59,0,0,1-1.35-10.07v-.75h-3Z\"/>" +
|
||||
"<line class=\"cls-46-4\" x1=\"144.85\" y1=\"199.49\" x2=\"146.5\" y2=\"197.5\"/>" +
|
||||
"<path class=\"cls-46-2\" d=\"M149,178s1,10,2,14,1.5,6.5,1.5,6.5,3,0,4-1-2-17-2-18v-2s-1.49,0-3,.11A12,12,0,0,0,149,178Z\"/>" +
|
||||
"<path class=\"cls-46-3\" d=\"M149,178s1,10,2,14,1.5,6.5,1.5,6.5,3,0,4-1-2-17-2-18v-2s-1.49,0-3,.11A12,12,0,0,0,149,178Z\"/>" +
|
||||
"<path class=\"cls-46-4\" d=\"M151.5,178.5s1,11,2,14a15.77,15.77,0,0,1,1,4s2.34-.11,2.17.44a31,31,0,0,0-.82-8.63,59,59,0,0,1-1.35-10.07v-.75h-3Z\"/>" +
|
||||
"<line class=\"cls-46-4\" x1=\"152.85\" y1=\"198.49\" x2=\"154.5\" y2=\"196.5\"/></g><g><g>" +
|
||||
"<path class=\"cls-fill-1\" d=\"M128.5,86.5a3.49,3.49,0,0,0-1,2v3s3,3,9,3,12-4,12-4v-5s-1-1-6-1S131.5,84.5,128.5,86.5Z\"/>" +
|
||||
"<path class=\"cls-fill-1\" d=\"M173.5,21.5l-35,17s-.57,2.41.22,3.71l.78,1.29,37-18S178.5,20.5,173.5,21.5Z\"/>" +
|
||||
"<path class=\"cls-fill-1\" d=\"M96.5,58.5s-2,2-1,3,3,0,3,0l33.66-15.9a6.44,6.44,0,0,1-.66-3.1Z\"/>" +
|
||||
"<path class=\"cls-fill-1\" d=\"M134.5,47.5l-1,37a4.33,4.33,0,0,0,4,2,7.65,7.65,0,0,0,5-2l-2-40S135.5,44.5,134.5,47.5Z\"/>" +
|
||||
"<path class=\"cls-fill-1\" d=\"M136.5,38.5l-4,2a3.76,3.76,0,0,0-.81,1.55,5.34,5.34,0,0,0-.19,1.45c0," +
|
||||
"2,2,4,3,4,0,0-.17-.54,1.42-1.77a8.26,8.26,0,0,1,4.32-1.22h.26s-2-2-2-3v-3Z\"/></g>" +
|
||||
"<path class=\"cls-07-2\" d=\"M134.5,47.5l-1,37a4.33,4.33,0,0,0,4,2,7.65,7.65,0,0,0,5-2l-2-40S135.5,44.5,134.5,47.5Z\"/>" +
|
||||
"<path class=\"cls-07-3\" d=\"M128.5,87.5s0,2,6,2,11-1,13-3c.48-.55.5-1.75-2.25-1.87-1,0-3.15,0-3.15,0a6.77," +
|
||||
"6.77,0,0,1-4.1,1.8c-3.5.1-4.31-1.6-4.31-1.6S128.5,85.5,128.5,87.5Z\"/>" +
|
||||
"<path class=\"cls-07-2\" d=\"M128.5,86.5a3.49,3.49,0,0,0-1,2v3s3,3,9,3,12-4,12-4v-5s-.8-1-5.8-1a7.15,7.15," +
|
||||
"0,0,1-4.57,2c-1.63,0-4.17,0-4.63-1.72A10.71,10.71,0,0,0,128.5,86.5Z\"/>" +
|
||||
"<path class=\"cls-07-4\" d=\"M128.5,86.5a3.49,3.49,0,0,0-1,2v3s3,3,9,3,12-4,12-4v-5c-.63-.65-1.9-1.15-6-1a6.16," +
|
||||
"6.16,0,0,1-4.17,1.8c-3.83.2-4.41-1.46-4.41-1.46S129.5,85.5,128.5,86.5Z\"/>" +
|
||||
"<path class=\"cls-07-2\" d=\"M136.5,38.5l-4,2a3.76,3.76,0,0,0-.81,1.55,5.34,5.34,0,0,0-.19,1.45c0,2," +
|
||||
"2,4,3,4,0,0-.17-.54,1.42-1.77a8.26,8.26,0,0,1,4.32-1.22h.26s-2-2-2-3v-3Z\"/>" +
|
||||
"<path class=\"cls-07-5\" d=\"M96.5,58.5s-2,2-1,3,3,0,3,0l33.8-15.6a7.45,7.45,0,0,1-.8-3.4Z\"/>" +
|
||||
"<path class=\"cls-07-5\" d=\"M173.5,21.5l-35,17s-.57,2.41.22,3.71l.78,1.29,37-18C177.52,25.52,179.49,20.53,173.5,21.5Z\"/>" +
|
||||
"<circle class=\"cls-07-6\" cx=\"175.5\" cy=\"23.5\" r=\"2\"/><path d=\"M137.5,5.5s-2,0,1,2,32,15,32,15l2-1-33-15Z\"/>" +
|
||||
"<path d=\"M56.72,44a1.7,1.7,0,0,0,1.2,1.19L96.29,58.83l1.89-1.2L58.81,44.1S56.44,43,56.72,44Z\"/>" +
|
||||
"<path d=\"M114.5,17.5s-2,0,1,2,32,15,32,15l2-1-33-15Z\"/>" +
|
||||
"<path d=\"M102,26.53s-2,.12,1.12,1.94S133,40.2,133,40.2l1.91-.77-30.83-12Z\"/>" +
|
||||
"<path d=\"M177.5,24.19,212,41c1,1,.39,1.37-2,1L176.5,25.5S177,25.38,177.5,24.19Z\"/>" +
|
||||
"<path d=\"M154.91,35.41l35.6,14.34S192,51,188.58,50.88L154,36.79Z\"/>" +
|
||||
"<polygon points=\"102.89 59.02 134.34 68.69 133.65 69.98 101 59.98 102.89 59.02\"/>" +
|
||||
"<path d=\"M142,42.54l35.55,13c2.4.9.47,2.47-2,1.19L140.2,43.79Z\"/>" +
|
||||
"<path class=\"cls-07-7\" d=\"M136,38.75a5.37,5.37,0,0,0-.5,2.75c0,2,2.22,3.37,2.22,3.37l1.8,40.84L144," +
|
||||
"88.34v4l4.46-1.89v-5a35.36,35.36,0,0,0-6-1l-2-40a3.7,3.7,0,0,1-2-3v-3Z\"/>" +
|
||||
"<path class=\"cls-07-8\" d=\"M119.5,47.5l-32-12s-3-1-4,1,0,3,2,4,27,10,27,10\"/>" +
|
||||
"<line class=\"cls-07-8\" x1=\"116.05\" y1=\"49.09\" x2=\"83.95\" y2=\"37.51\"/>" +
|
||||
"<line class=\"cls-07-9\" x1=\"125.5\" y1=\"49.2\" x2=\"134.36\" y2=\"52.57\"/>" +
|
||||
"<line class=\"cls-07-10\" x1=\"117.9\" y1=\"52.66\" x2=\"134\" y2=\"59\"/>" +
|
||||
"<line class=\"cls-07-10\" x1=\"121.42\" y1=\"50.93\" x2=\"134.27\" y2=\"55.83\"/>" +
|
||||
"<path class=\"cls-07-10\" d=\"M141,54.57,158,62s4,2,3,4-5,1-6,1-13.65-5.5-13.65-5.5\"/>" +
|
||||
"<line class=\"cls-07-9\" x1=\"141.18\" y1=\"58.12\" x2=\"160.5\" y2=\"66.5\"/>" +
|
||||
"</g>" +
|
||||
"</svg>"
|
||||
|
||||
@Test
|
||||
fun createSVG() {
|
||||
fun createSVGInString() {
|
||||
// warm up
|
||||
Robohash.assemble(warmHex, true)
|
||||
benchmarkRule.measureRepeated {
|
||||
val result = Robohash.assemble(testHex, true)
|
||||
assertEquals(expectedTestSVG, result)
|
||||
Robohash.assemble(testHex, true)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun createSVGFromPaths() {
|
||||
// warm up
|
||||
benchmarkRule.measureRepeated {
|
||||
RobohashAssembler().build(testHex, true)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+403
@@ -0,0 +1,403 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.benchmark
|
||||
|
||||
import androidx.benchmark.junit4.BenchmarkRule
|
||||
import androidx.benchmark.junit4.measureRepeated
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.accessory0Seven
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.accessory1Nose
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.accessory2HornRed
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.accessory3Button
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.accessory4Satellite
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.accessory5Mustache
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.accessory6Hat
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.accessory7Antenna
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.accessory8Brush
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.accessory9Horn
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.body0Trooper
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.body1Thin
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.body2Thinnest
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.body3Front
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.body4Round
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.body5Neck
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.body6IronMan
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.body7NeckThinner
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.body8Big
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.body9Huge
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.eyes0Squint
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.eyes1Round
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.eyes2Single
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.eyes3Scott
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.eyes4RoundSingle
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.eyes5RoundSmall
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.eyes6WallE
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.eyes7Bar
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.eyes8SmallBar
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.eyes9Shield
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.face0C3po
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.face1Rock
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.face2Long
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.face3Oval
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.face4Cylinder
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.face5Baloon
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.face6Triangle
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.face7Bent
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.face8TriangleInv
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.face9Square
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.mouth0Horz
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.mouth1Cylinder
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.mouth2Teeth
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.mouth3Grid
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.mouth4Vert
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.mouth5MidOpen
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.mouth6Cell
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.mouth7Happy
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.mouth8Buttons
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.mouth9Closed
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
/**
|
||||
* Benchmark, which will execute on an Android device.
|
||||
*
|
||||
* The body of [test] is measured in a loop, and Studio will output the
|
||||
* result. Modify your code to see how it affects performance.
|
||||
*/
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class RobohashPartsBenchmark {
|
||||
@get:Rule val benchmarkRule = BenchmarkRule()
|
||||
|
||||
val fgColor: SolidColor = Black
|
||||
|
||||
fun test(function: (builder: ImageVector.Builder) -> Unit) {
|
||||
benchmarkRule.measureRepeated {
|
||||
roboBuilder("Test") {
|
||||
function(this)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun body0Trooper(): Unit =
|
||||
test {
|
||||
body0Trooper(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun body1Thin(): Unit =
|
||||
test {
|
||||
body1Thin(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun body2Thinnest(): Unit =
|
||||
test {
|
||||
body2Thinnest(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun body3Front(): Unit =
|
||||
test {
|
||||
body3Front(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun body4Round(): Unit =
|
||||
test {
|
||||
body4Round(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun body5Neck(): Unit =
|
||||
test {
|
||||
body5Neck(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun body6IronMan(): Unit =
|
||||
test {
|
||||
body6IronMan(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun body7NeckThinner(): Unit =
|
||||
test {
|
||||
body7NeckThinner(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun body8Big(): Unit =
|
||||
test {
|
||||
body8Big(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun body9Huge(): Unit =
|
||||
test {
|
||||
body9Huge(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun face0C3po(): Unit =
|
||||
test {
|
||||
face0C3po(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun face1Rock(): Unit =
|
||||
test {
|
||||
face1Rock(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun face2Long(): Unit =
|
||||
test {
|
||||
face2Long(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun face3Oval(): Unit =
|
||||
test {
|
||||
face3Oval(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun face4Cylinder(): Unit =
|
||||
test {
|
||||
face4Cylinder(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun face5Baloon(): Unit =
|
||||
test {
|
||||
face5Baloon(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun face6Triangle(): Unit =
|
||||
test {
|
||||
face6Triangle(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun face7Bent(): Unit =
|
||||
test {
|
||||
face7Bent(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun face8TriangleInv(): Unit =
|
||||
test {
|
||||
face8TriangleInv(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun face9Square(): Unit =
|
||||
test {
|
||||
face9Square(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun eyes0Squint(): Unit =
|
||||
test {
|
||||
eyes0Squint(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun eyes1Round(): Unit =
|
||||
test {
|
||||
eyes1Round(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun eyes2Single(): Unit =
|
||||
test {
|
||||
eyes2Single(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun eyes3Scott(): Unit =
|
||||
test {
|
||||
eyes3Scott(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun eyes4RoundSingle(): Unit =
|
||||
test {
|
||||
eyes4RoundSingle(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun eyes5RoundSmall(): Unit =
|
||||
test {
|
||||
eyes5RoundSmall(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun eyes6WallE(): Unit =
|
||||
test {
|
||||
eyes6WallE(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun eyes7Bar(): Unit =
|
||||
test {
|
||||
eyes7Bar(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun eyes8SmallBar(): Unit =
|
||||
test {
|
||||
eyes8SmallBar(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun eyes9Shield(): Unit =
|
||||
test {
|
||||
eyes9Shield(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun mouth0Horz(): Unit =
|
||||
test {
|
||||
mouth0Horz(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun mouth1Cylinder(): Unit =
|
||||
test {
|
||||
mouth1Cylinder(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun mouth2Teeth(): Unit =
|
||||
test {
|
||||
mouth2Teeth(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun mouth3Grid(): Unit =
|
||||
test {
|
||||
mouth3Grid(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun mouth4Vert(): Unit =
|
||||
test {
|
||||
mouth4Vert(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun mouth5MidOpen(): Unit =
|
||||
test {
|
||||
mouth5MidOpen(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun mouth6Cell(): Unit =
|
||||
test {
|
||||
mouth6Cell(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun mouth7Happy(): Unit =
|
||||
test {
|
||||
mouth7Happy(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun mouth8Buttons(): Unit =
|
||||
test {
|
||||
mouth8Buttons(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun mouth9Closed(): Unit =
|
||||
test {
|
||||
mouth9Closed(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun accessory0Seven(): Unit =
|
||||
test {
|
||||
accessory0Seven(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun accessory1Nose(): Unit =
|
||||
test {
|
||||
accessory1Nose(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun accessory2HornRed(): Unit =
|
||||
test {
|
||||
accessory2HornRed(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun accessory3Button(): Unit =
|
||||
test {
|
||||
accessory3Button(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun accessory4Satellite(): Unit =
|
||||
test {
|
||||
accessory4Satellite(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun accessory5Mustache(): Unit =
|
||||
test {
|
||||
accessory5Mustache(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun accessory6Hat(): Unit =
|
||||
test {
|
||||
accessory6Hat(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun accessory7Antenna(): Unit =
|
||||
test {
|
||||
accessory7Antenna(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun accessory8Brush(): Unit =
|
||||
test {
|
||||
accessory8Brush(fgColor, it)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun accessory9Horn(): Unit =
|
||||
test {
|
||||
accessory9Horn(fgColor, it)
|
||||
}
|
||||
}
|
||||
@@ -32,6 +32,14 @@ android {
|
||||
jvmTarget = '17'
|
||||
freeCompilerArgs += "-Xstring-concat=inline"
|
||||
}
|
||||
|
||||
buildFeatures {
|
||||
compose true
|
||||
}
|
||||
composeOptions {
|
||||
// Should match compose version : https://developer.android.com/jetpack/androidx/releases/compose-kotlin
|
||||
kotlinCompilerExtensionVersion "1.5.8"
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
@@ -40,6 +48,10 @@ dependencies {
|
||||
// Import @Immutable and @Stable
|
||||
implementation platform(libs.androidx.compose.bom)
|
||||
implementation libs.androidx.ui
|
||||
implementation libs.androidx.compose.foundation
|
||||
|
||||
debugImplementation libs.androidx.ui.tooling
|
||||
implementation libs.androidx.ui.tooling.preview
|
||||
|
||||
// immutable collections to avoid recomposition
|
||||
api libs.kotlinx.collections.immutable
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons
|
||||
|
||||
import android.util.LruCache
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
|
||||
object CachedRobohash {
|
||||
var cacheIsForLightTheme: Boolean? = null
|
||||
val cache = LruCache<String, ImageVector>(100)
|
||||
val assembler = RobohashAssembler()
|
||||
|
||||
fun cached(
|
||||
msg: String,
|
||||
isLightTheme: Boolean,
|
||||
): ImageVector? {
|
||||
// resets cache on theme change
|
||||
if (cacheIsForLightTheme != null && cacheIsForLightTheme != isLightTheme) {
|
||||
cache.evictAll()
|
||||
}
|
||||
|
||||
return cache[msg]
|
||||
}
|
||||
|
||||
fun get(
|
||||
msg: String,
|
||||
isLightTheme: Boolean,
|
||||
): ImageVector {
|
||||
// resets cache on theme change
|
||||
if (cacheIsForLightTheme == null) {
|
||||
cacheIsForLightTheme = isLightTheme
|
||||
} else if (cacheIsForLightTheme != isLightTheme) {
|
||||
cacheIsForLightTheme = isLightTheme
|
||||
cache.evictAll()
|
||||
}
|
||||
|
||||
cache[msg]?.let { return it }
|
||||
|
||||
val vector = assembler.build(msg, isLightTheme)
|
||||
|
||||
cache.put(msg, vector)
|
||||
|
||||
return vector
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,280 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons
|
||||
|
||||
import android.util.Log
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
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.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.accessory0Seven
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.accessory1Nose
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.accessory2HornRed
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.accessory3Button
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.accessory4Satellite
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.accessory5Mustache
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.accessory6Hat
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.accessory7Antenna
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.accessory8Brush
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.accessory9Horn
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.body0Trooper
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.body1Thin
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.body2Thinnest
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.body3Front
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.body4Round
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.body5Neck
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.body6IronMan
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.body7NeckThinner
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.body8Big
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.body9Huge
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.eyes0Squint
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.eyes1Round
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.eyes2Single
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.eyes3Scott
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.eyes4RoundSingle
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.eyes5RoundSmall
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.eyes6WallE
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.eyes7Bar
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.eyes8SmallBar
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.eyes9Shield
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.face0C3po
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.face1Rock
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.face2Long
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.face3Oval
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.face4Cylinder
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.face5Baloon
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.face6Triangle
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.face7Bent
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.face8TriangleInv
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.face9Square
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.mouth0Horz
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.mouth1Cylinder
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.mouth2Teeth
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.mouth3Grid
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.mouth4Vert
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.mouth5MidOpen
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.mouth6Cell
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.mouth7Happy
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.mouth8Buttons
|
||||
import com.vitorpamplona.amethyst.commons.robohashparts.mouth9Closed
|
||||
import com.vitorpamplona.quartz.crypto.CryptoUtils
|
||||
import com.vitorpamplona.quartz.encoders.Hex
|
||||
import com.vitorpamplona.quartz.encoders.HexValidator
|
||||
|
||||
val Black = SolidColor(Color.Black)
|
||||
val Gray = SolidColor(Color(0xFF6d6e70))
|
||||
val Yellow = SolidColor(Color(0xFFf9ec31))
|
||||
val LightYellow = SolidColor(Color(0xFFfff100))
|
||||
val Brown = SolidColor(Color(0xFF461917))
|
||||
val DarkYellow = SolidColor(Color(0xFFfaaf40))
|
||||
val OrangeThree = SolidColor(Color(0xFFf6921e))
|
||||
|
||||
val LightRed = SolidColor(Color(0xFFec1c24))
|
||||
val OrangeOne = SolidColor(Color(0xFFee4036))
|
||||
val OrangeTwo = SolidColor(Color(0xFFf05a28))
|
||||
|
||||
val LightBrown = SolidColor(Color(0xFFbe1e2d))
|
||||
val LightGray = SolidColor(Color(0xFFe6e7e8))
|
||||
val MediumGray = SolidColor(Color(0xFFd0d2d3))
|
||||
|
||||
val DefaultSize = 55.dp
|
||||
const val VIEWPORT_SIZE = 300f
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun RobohashPreview() {
|
||||
val assembler = RobohashAssembler()
|
||||
Row {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
assembler.build(
|
||||
msg = "460c25e682fda7832b52d1f22d3d22b3176d972f60dcdc3212ed8c92ef85065c",
|
||||
isLightTheme = false,
|
||||
),
|
||||
),
|
||||
contentDescription = "",
|
||||
modifier = Modifier.padding(5.dp).clip(CircleShape),
|
||||
)
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
assembler.build(
|
||||
msg = "460c25e682fda7832b52d1f22d3d22b3176d972f60dcdc3212ed8c92ef85065c",
|
||||
isLightTheme = true,
|
||||
),
|
||||
),
|
||||
contentDescription = "",
|
||||
modifier = Modifier.padding(5.dp).clip(CircleShape),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
class RobohashAssembler {
|
||||
private fun byteMod10(byte: Byte): Int {
|
||||
return byte.toUByte().toInt() % 10
|
||||
}
|
||||
|
||||
private fun reduce(
|
||||
start: Int,
|
||||
channel: Byte,
|
||||
) = (start + (channel.toUByte().toInt() * 0.3906f)).toInt()
|
||||
|
||||
private fun bytesToColor(
|
||||
r: Byte,
|
||||
g: Byte,
|
||||
b: Byte,
|
||||
makeLight: Boolean,
|
||||
): Color {
|
||||
return if (makeLight) {
|
||||
// > 150-256 color channels
|
||||
Color(reduce(150, r), reduce(150, g), reduce(150, b))
|
||||
} else {
|
||||
// < 50-100 color channels
|
||||
Color(reduce(50, r), reduce(50, g), reduce(50, b))
|
||||
}
|
||||
}
|
||||
|
||||
fun build(
|
||||
msg: String,
|
||||
isLightTheme: Boolean,
|
||||
): ImageVector {
|
||||
val hash =
|
||||
if (HexValidator.isHex(msg)) {
|
||||
Hex.decode(msg)
|
||||
} else {
|
||||
Log.w("Robohash", "$msg is not a hex")
|
||||
CryptoUtils.sha256(msg.toByteArray())
|
||||
}
|
||||
|
||||
val bgColor = SolidColor(bytesToColor(hash[0], hash[1], hash[2], isLightTheme))
|
||||
val fgColor = SolidColor(bytesToColor(hash[3], hash[4], hash[5], !isLightTheme))
|
||||
|
||||
return roboBuilder(msg) {
|
||||
// Background
|
||||
addPath(
|
||||
fill = bgColor,
|
||||
pathData = BACKGROUND,
|
||||
)
|
||||
|
||||
when (byteMod10(hash[6])) {
|
||||
0 -> body0Trooper(fgColor, this)
|
||||
1 -> body1Thin(fgColor, this)
|
||||
2 -> body2Thinnest(fgColor, this)
|
||||
3 -> body3Front(fgColor, this)
|
||||
4 -> body4Round(fgColor, this)
|
||||
5 -> body5Neck(fgColor, this)
|
||||
6 -> body6IronMan(fgColor, this)
|
||||
7 -> body7NeckThinner(fgColor, this)
|
||||
8 -> body8Big(fgColor, this)
|
||||
9 -> body9Huge(fgColor, this)
|
||||
}
|
||||
|
||||
when (byteMod10(hash[7])) {
|
||||
0 -> face0C3po(fgColor, this)
|
||||
1 -> face1Rock(fgColor, this)
|
||||
2 -> face2Long(fgColor, this)
|
||||
3 -> face3Oval(fgColor, this)
|
||||
4 -> face4Cylinder(fgColor, this)
|
||||
5 -> face5Baloon(fgColor, this)
|
||||
6 -> face6Triangle(fgColor, this)
|
||||
7 -> face7Bent(fgColor, this)
|
||||
8 -> face8TriangleInv(fgColor, this)
|
||||
9 -> face9Square(fgColor, this)
|
||||
}
|
||||
|
||||
when (byteMod10(hash[8])) {
|
||||
0 -> eyes0Squint(fgColor, this)
|
||||
1 -> eyes1Round(fgColor, this)
|
||||
2 -> eyes2Single(fgColor, this)
|
||||
3 -> eyes3Scott(fgColor, this)
|
||||
4 -> eyes4RoundSingle(fgColor, this)
|
||||
5 -> eyes5RoundSmall(fgColor, this)
|
||||
6 -> eyes6WallE(fgColor, this)
|
||||
7 -> eyes7Bar(fgColor, this)
|
||||
8 -> eyes8SmallBar(fgColor, this)
|
||||
9 -> eyes9Shield(fgColor, this)
|
||||
}
|
||||
|
||||
when (byteMod10(hash[9])) {
|
||||
0 -> mouth0Horz(fgColor, this)
|
||||
1 -> mouth1Cylinder(fgColor, this)
|
||||
2 -> mouth2Teeth(fgColor, this)
|
||||
3 -> mouth3Grid(fgColor, this)
|
||||
4 -> mouth4Vert(fgColor, this)
|
||||
5 -> mouth5MidOpen(fgColor, this)
|
||||
6 -> mouth6Cell(fgColor, this)
|
||||
7 -> mouth7Happy(fgColor, this)
|
||||
8 -> mouth8Buttons(fgColor, this)
|
||||
9 -> mouth9Closed(fgColor, this)
|
||||
}
|
||||
|
||||
when (byteMod10(hash[10])) {
|
||||
0 -> accessory0Seven(fgColor, this)
|
||||
1 -> accessory1Nose(fgColor, this)
|
||||
2 -> accessory2HornRed(fgColor, this)
|
||||
3 -> accessory3Button(fgColor, this)
|
||||
4 -> accessory4Satellite(fgColor, this)
|
||||
5 -> accessory5Mustache(fgColor, this)
|
||||
6 -> accessory6Hat(fgColor, this)
|
||||
7 -> accessory7Antenna(fgColor, this)
|
||||
8 -> accessory8Brush(fgColor, this)
|
||||
9 -> accessory9Horn(fgColor, this)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
val BACKGROUND =
|
||||
PathData {
|
||||
moveTo(0.0f, 0.0f)
|
||||
horizontalLineToRelative(VIEWPORT_SIZE)
|
||||
verticalLineToRelative(VIEWPORT_SIZE)
|
||||
horizontalLineToRelative(-VIEWPORT_SIZE)
|
||||
close()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
inline fun roboBuilder(
|
||||
name: String = "",
|
||||
autoMirror: Boolean = false,
|
||||
block: ImageVector.Builder.() -> Unit,
|
||||
) = ImageVector.Builder(
|
||||
name = name,
|
||||
defaultWidth = DefaultSize,
|
||||
defaultHeight = DefaultSize,
|
||||
viewportWidth = VIEWPORT_SIZE,
|
||||
viewportHeight = VIEWPORT_SIZE,
|
||||
autoMirror = autoMirror,
|
||||
).apply {
|
||||
block()
|
||||
}.build()
|
||||
+96
@@ -0,0 +1,96 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Accessory0SevenPreview() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
accessory0Seven(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun accessory0Seven(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData3, fill = Black, stroke = Black, fillAlpha = 0.4f, strokeLineWidth = 0.75f)
|
||||
builder.addPath(pathData7, fill = Black, stroke = Black, fillAlpha = 0.2f, strokeLineWidth = 0.5f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(141.5f, 79.5f)
|
||||
reflectiveCurveToRelative(-1.0f, 11.0f, -1.0f, 17.0f)
|
||||
verticalLineToRelative(8.0f)
|
||||
reflectiveCurveToRelative(-11.0f, 3.0f, -15.0f, 3.0f)
|
||||
horizontalLineToRelative(-10.0f)
|
||||
reflectiveCurveToRelative(-1.0f, -11.0f, -1.0f, -15.0f)
|
||||
reflectiveCurveToRelative(-2.0f, -10.0f, 6.0f, -13.0f)
|
||||
arcToRelative(138.0f, 138.0f, 0.0f, false, true, 14.0f, -1.0f)
|
||||
curveTo(140.5f, 78.5f, 141.5f, 79.5f, 141.5f, 79.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(116.5f, 106.5f)
|
||||
reflectiveCurveToRelative(22.0f, -2.67f, 24.0f, -3.33f)
|
||||
verticalLineToRelative(1.33f)
|
||||
reflectiveCurveToRelative(-11.42f, 2.74f, -13.21f, 2.87f)
|
||||
reflectiveCurveToRelative(-11.79f, 0.13f, -11.79f, 0.13f)
|
||||
verticalLineToRelative(-0.94f)
|
||||
lineToRelative(1.0f, -0.06f)
|
||||
}
|
||||
private val pathData7 =
|
||||
PathData {
|
||||
moveTo(117.0f, 88.0f)
|
||||
horizontalLineToRelative(3.0f)
|
||||
arcToRelative(3.49f, 3.49f, 0.0f, false, true, 2.0f, -1.0f)
|
||||
curveToRelative(1.0f, 0.0f, 9.5f, -1.5f, 9.5f, -1.5f)
|
||||
reflectiveCurveToRelative(-9.0f, 7.0f, -10.0f, 13.0f)
|
||||
verticalLineToRelative(4.0f)
|
||||
lineToRelative(7.0f, -1.0f)
|
||||
reflectiveCurveToRelative(-1.0f, -6.0f, 2.0f, -10.0f)
|
||||
arcToRelative(22.28f, 22.28f, 0.0f, false, true, 7.0f, -6.0f)
|
||||
verticalLineToRelative(-3.0f)
|
||||
lineToRelative(-1.0f, -1.0f)
|
||||
lineToRelative(-18.0f, 2.0f)
|
||||
lineToRelative(-1.0f, 1.0f)
|
||||
close()
|
||||
}
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Accessory1NosePreview() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
accessory1Nose(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun accessory1Nose(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData2, fill = Black, fillAlpha = 0.2f)
|
||||
builder.addPath(pathData4, stroke = Black, strokeLineWidth = 0.75f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(103.5f, 165.5f)
|
||||
reflectiveCurveToRelative(11.0f, -4.0f, 15.0f, -6.0f)
|
||||
arcToRelative(59.46f, 59.46f, 0.0f, false, true, 7.0f, -3.0f)
|
||||
reflectiveCurveToRelative(5.0f, 0.0f, 6.0f, 3.0f)
|
||||
reflectiveCurveToRelative(0.0f, 5.0f, -1.0f, 6.0f)
|
||||
reflectiveCurveToRelative(-23.0f, 8.0f, -23.0f, 8.0f)
|
||||
arcToRelative(4.45f, 4.45f, 0.0f, false, true, -5.0f, -2.0f)
|
||||
curveTo(99.5f, 166.5f, 103.5f, 165.5f, 103.5f, 165.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(102.0f, 167.0f)
|
||||
curveToRelative(-1.07f, 1.3f, 1.29f, 6.38f, 2.64f, 6.19f)
|
||||
reflectiveCurveToRelative(6.07f, 0.81f, 4.36f, -4.12f)
|
||||
curveTo(107.18f, 165.0f, 103.05f, 165.72f, 102.0f, 167.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(106.5f, 173.5f)
|
||||
curveToRelative(3.0f, -1.0f, 3.0f, -3.0f, 2.0f, -5.0f)
|
||||
curveToRelative(-3.0f, -4.0f, -6.0f, -2.0f, -6.0f, -2.24f)
|
||||
moveTo(109.1f, 163.4f)
|
||||
reflectiveCurveToRelative(4.4f, 0.1f, 5.4f, 3.1f)
|
||||
arcToRelative(5.22f, 5.22f, 0.0f, false, true, -0.78f, 5.0f)
|
||||
}
|
||||
+180
@@ -0,0 +1,180 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.Brown
|
||||
import com.vitorpamplona.amethyst.commons.LightBrown
|
||||
import com.vitorpamplona.amethyst.commons.LightGray
|
||||
import com.vitorpamplona.amethyst.commons.LightRed
|
||||
import com.vitorpamplona.amethyst.commons.MediumGray
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Accessory2HornRedPreview() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
accessory2HornRed(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun accessory2HornRed(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData2, fill = LightBrown, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData3, fill = Brown)
|
||||
builder.addPath(pathData4, fill = LightRed)
|
||||
builder.addPath(pathData6, fill = Black, stroke = Black, fillAlpha = 0.2f, strokeLineWidth = 0.75f)
|
||||
builder.addPath(pathData8, fill = Black, fillAlpha = 0.2f)
|
||||
builder.addPath(pathData9, fill = LightGray, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData10, fill = MediumGray)
|
||||
builder.addPath(pathData11, stroke = Black, strokeLineWidth = 1.0f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(122.5f, 94.5f)
|
||||
reflectiveCurveToRelative(4.0f, 3.0f, 13.0f, 3.0f)
|
||||
reflectiveCurveToRelative(16.0f, -6.0f, 16.0f, -6.0f)
|
||||
arcToRelative(26.39f, 26.39f, 0.0f, false, false, -1.0f, -7.0f)
|
||||
curveToRelative(-1.0f, -3.0f, -10.49f, -2.87f, -15.74f, -1.93f)
|
||||
reflectiveCurveToRelative(-11.26f, 0.93f, -12.26f, 3.93f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(125.5f, 26.0f)
|
||||
arcToRelative(7.5f, 6.5f, 0.0f, true, false, 15.0f, 0.0f)
|
||||
arcToRelative(7.5f, 6.5f, 0.0f, true, false, -15.0f, 0.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(140.0f, 25.0f)
|
||||
curveToRelative(0.19f, 0.68f, -5.51f, 8.12f, -11.57f, 6.27f)
|
||||
arcToRelative(8.65f, 8.65f, 0.0f, false, false, 7.91f, 0.53f)
|
||||
curveTo(141.0f, 30.0f, 140.0f, 25.0f, 140.0f, 25.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(126.856f, 25.249f)
|
||||
arcToRelative(2.238f, 4.475f, 60.113f, true, false, 7.76f, -4.46f)
|
||||
arcToRelative(2.238f, 4.475f, 60.113f, true, false, -7.76f, 4.46f)
|
||||
close()
|
||||
}
|
||||
private val pathData5 =
|
||||
PathData {
|
||||
moveTo(125.5f, 26.0f)
|
||||
arcToRelative(7.5f, 6.5f, 0.0f, true, false, 15.0f, 0.0f)
|
||||
arcToRelative(7.5f, 6.5f, 0.0f, true, false, -15.0f, 0.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData6 =
|
||||
PathData {
|
||||
moveTo(135.5f, 82.5f)
|
||||
reflectiveCurveToRelative(-13.0f, 1.0f, -13.0f, 4.0f)
|
||||
reflectiveCurveToRelative(9.0f, 4.0f, 13.0f, 4.0f)
|
||||
reflectiveCurveToRelative(15.0f, -2.0f, 15.0f, -6.0f)
|
||||
reflectiveCurveTo(135.5f, 82.5f, 135.5f, 82.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData7 =
|
||||
PathData {
|
||||
moveTo(122.5f, 94.5f)
|
||||
reflectiveCurveToRelative(4.0f, 3.0f, 13.0f, 3.0f)
|
||||
reflectiveCurveToRelative(16.0f, -6.0f, 16.0f, -6.0f)
|
||||
arcToRelative(26.39f, 26.39f, 0.0f, false, false, -1.0f, -7.0f)
|
||||
curveToRelative(-1.0f, -3.0f, -10.49f, -2.87f, -15.74f, -1.93f)
|
||||
reflectiveCurveToRelative(-11.26f, 0.93f, -12.26f, 3.93f)
|
||||
close()
|
||||
}
|
||||
private val pathData8 =
|
||||
PathData {
|
||||
moveTo(148.19f, 93.77f)
|
||||
curveToRelative(0.31f, -1.27f, -0.69f, -6.27f, -0.69f, -6.27f)
|
||||
reflectiveCurveToRelative(-7.41f, -2.59f, -8.2f, -2.3f)
|
||||
reflectiveCurveToRelative(1.86f, -0.8f, 2.0f, -1.75f)
|
||||
reflectiveCurveToRelative(0.23f, -1.43f, 0.23f, -1.43f)
|
||||
reflectiveCurveToRelative(3.12f, 0.0f, 5.53f, 0.25f)
|
||||
reflectiveCurveToRelative(3.41f, 1.47f, 3.41f, 2.35f)
|
||||
lineToRelative(0.64f, 2.58f)
|
||||
lineToRelative(0.36f, 4.29f)
|
||||
lineToRelative(-3.0f, 2.0f)
|
||||
}
|
||||
private val pathData9 =
|
||||
PathData {
|
||||
moveTo(133.0f, 29.24f)
|
||||
reflectiveCurveToRelative(-7.5f, 13.21f, -6.5f, 28.88f)
|
||||
arcToRelative(245.78f, 245.78f, 0.0f, false, false, 3.0f, 26.43f)
|
||||
reflectiveCurveToRelative(0.0f, 2.0f, 4.0f, 2.0f)
|
||||
arcToRelative(14.0f, 14.0f, 0.0f, false, false, 7.0f, -2.0f)
|
||||
arcToRelative(3.4f, 3.4f, 0.0f, false, false, 1.0f, -2.0f)
|
||||
curveToRelative(0.0f, -1.0f, -11.0f, -18.6f, -8.0f, -48.94f)
|
||||
curveTo(133.5f, 33.64f, 134.5f, 27.77f, 133.0f, 29.24f)
|
||||
close()
|
||||
}
|
||||
private val pathData10 =
|
||||
PathData {
|
||||
moveTo(130.5f, 46.5f)
|
||||
arcToRelative(94.41f, 94.41f, 0.0f, false, false, 2.0f, 18.0f)
|
||||
arcToRelative(145.29f, 145.29f, 0.0f, false, false, 6.0f, 19.0f)
|
||||
lineToRelative(0.52f, 1.8f)
|
||||
reflectiveCurveToRelative(2.48f, -0.8f, 2.48f, -2.8f)
|
||||
curveToRelative(0.0f, 0.0f, -6.45f, -14.41f, -7.23f, -22.71f)
|
||||
reflectiveCurveTo(132.5f, 39.5f, 133.5f, 33.5f)
|
||||
curveToRelative(0.0f, 0.0f, -0.08f, -3.33f, 0.21f, -2.91f)
|
||||
reflectiveCurveTo(130.0f, 38.0f, 130.5f, 46.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData11 =
|
||||
PathData {
|
||||
moveTo(133.0f, 29.24f)
|
||||
reflectiveCurveToRelative(-7.5f, 13.21f, -6.5f, 28.88f)
|
||||
arcToRelative(245.78f, 245.78f, 0.0f, false, false, 3.0f, 26.43f)
|
||||
reflectiveCurveToRelative(0.0f, 2.0f, 4.0f, 2.0f)
|
||||
arcToRelative(14.0f, 14.0f, 0.0f, false, false, 7.0f, -2.0f)
|
||||
arcToRelative(3.4f, 3.4f, 0.0f, false, false, 1.0f, -2.0f)
|
||||
curveToRelative(0.0f, -1.0f, -11.0f, -18.6f, -8.0f, -48.94f)
|
||||
curveTo(133.5f, 33.64f, 134.5f, 27.77f, 133.0f, 29.24f)
|
||||
close()
|
||||
moveTo(126.0f, 46.0f)
|
||||
reflectiveCurveToRelative(-9.0f, 1.0f, -9.0f, 6.0f)
|
||||
reflectiveCurveToRelative(10.0f, 5.0f, 13.0f, 5.0f)
|
||||
reflectiveCurveToRelative(12.0f, -1.0f, 12.0f, -6.0f)
|
||||
reflectiveCurveToRelative(-8.0f, -5.0f, -8.0f, -5.0f)
|
||||
}
|
||||
+150
@@ -0,0 +1,150 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.LightRed
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Accessory3ButtonPreview() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
accessory3Button(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun accessory3Button(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData2, fill = Black, stroke = Black, fillAlpha = 0.2f, strokeLineWidth = 0.75f)
|
||||
builder.addPath(pathData3, fill = Black, fillAlpha = 0.2f)
|
||||
builder.addPath(pathData5, fill = LightRed, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData6, fill = Black, fillAlpha = 0.1f)
|
||||
builder.addPath(pathData9, fill = Black, fillAlpha = 0.4f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(136.5f, 83.5f)
|
||||
curveToRelative(-3.39f, 0.31f, -11.0f, 2.0f, -13.0f, 4.0f)
|
||||
arcToRelative(4.38f, 4.38f, 0.0f, false, false, -1.0f, 3.0f)
|
||||
verticalLineToRelative(5.0f)
|
||||
arcToRelative(18.26f, 18.26f, 0.0f, false, false, 13.0f, 3.0f)
|
||||
curveToRelative(8.0f, -1.0f, 16.0f, -6.0f, 16.0f, -6.0f)
|
||||
reflectiveCurveToRelative(0.0f, -6.0f, -1.0f, -7.0f)
|
||||
reflectiveCurveToRelative(-1.0f, -2.0f, -5.0f, -2.0f)
|
||||
reflectiveCurveTo(138.74f, 83.3f, 136.5f, 83.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(125.7f, 86.16f)
|
||||
reflectiveCurveToRelative(-2.2f, 1.34f, -1.2f, 3.34f)
|
||||
reflectiveCurveToRelative(7.0f, 3.0f, 12.0f, 2.0f)
|
||||
arcToRelative(53.37f, 53.37f, 0.0f, false, false, 11.0f, -4.0f)
|
||||
reflectiveCurveToRelative(3.57f, -2.09f, 1.29f, -3.54f)
|
||||
reflectiveCurveTo(131.89f, 82.83f, 125.7f, 86.16f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(125.7f, 86.16f)
|
||||
reflectiveCurveToRelative(-2.2f, 1.34f, -1.2f, 3.34f)
|
||||
reflectiveCurveToRelative(7.0f, 3.0f, 12.0f, 2.0f)
|
||||
arcTo(55.23f, 55.23f, 0.0f, false, false, 145.11f, 89.0f)
|
||||
curveToRelative(-1.11f, -2.0f, -8.42f, -5.89f, -8.42f, -5.89f)
|
||||
reflectiveCurveTo(129.47f, 84.13f, 125.7f, 86.16f)
|
||||
close()
|
||||
moveTo(144.5f, 88.5f)
|
||||
curveToRelative(1.0f, 1.0f, 0.0f, 7.3f, 0.0f, 7.3f)
|
||||
lineToRelative(7.0f, -3.3f)
|
||||
reflectiveCurveToRelative(0.0f, -6.14f, -1.5f, -7.57f)
|
||||
curveTo(148.0f, 88.0f, 147.0f, 88.0f, 144.5f, 88.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(136.5f, 83.5f)
|
||||
curveToRelative(-3.39f, 0.31f, -11.0f, 2.0f, -13.0f, 4.0f)
|
||||
arcToRelative(4.38f, 4.38f, 0.0f, false, false, -1.0f, 3.0f)
|
||||
verticalLineToRelative(5.0f)
|
||||
arcToRelative(18.26f, 18.26f, 0.0f, false, false, 13.0f, 3.0f)
|
||||
curveToRelative(8.0f, -1.0f, 16.0f, -6.0f, 16.0f, -6.0f)
|
||||
reflectiveCurveToRelative(0.0f, -6.0f, -1.0f, -7.0f)
|
||||
reflectiveCurveToRelative(-1.0f, -2.0f, -5.0f, -2.0f)
|
||||
reflectiveCurveTo(138.74f, 83.3f, 136.5f, 83.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData5 =
|
||||
PathData {
|
||||
moveTo(134.5f, 73.5f)
|
||||
reflectiveCurveToRelative(-5.0f, 1.0f, -5.0f, 6.0f)
|
||||
reflectiveCurveToRelative(1.0f, 7.0f, 1.0f, 7.0f)
|
||||
arcToRelative(18.58f, 18.58f, 0.0f, false, false, 8.0f, 0.0f)
|
||||
curveToRelative(4.0f, -1.0f, 5.0f, -3.0f, 5.0f, -3.0f)
|
||||
reflectiveCurveTo(142.5f, 73.5f, 134.5f, 73.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData6 =
|
||||
PathData {
|
||||
moveTo(139.5f, 75.5f)
|
||||
reflectiveCurveToRelative(2.0f, 3.0f, 1.0f, 6.0f)
|
||||
reflectiveCurveToRelative(-6.0f, 5.0f, -6.0f, 5.0f)
|
||||
reflectiveCurveToRelative(8.0f, -1.0f, 9.0f, -3.0f)
|
||||
reflectiveCurveTo(140.5f, 76.5f, 139.5f, 75.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData7 =
|
||||
PathData {
|
||||
moveTo(134.5f, 73.5f)
|
||||
reflectiveCurveToRelative(-5.0f, 1.0f, -5.0f, 6.0f)
|
||||
reflectiveCurveToRelative(1.0f, 7.0f, 1.0f, 7.0f)
|
||||
arcToRelative(18.58f, 18.58f, 0.0f, false, false, 8.0f, 0.0f)
|
||||
curveToRelative(4.0f, -1.0f, 5.0f, -3.0f, 5.0f, -3.0f)
|
||||
reflectiveCurveTo(142.5f, 73.5f, 134.5f, 73.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData9 =
|
||||
PathData {
|
||||
moveTo(133.5f, 75.5f)
|
||||
arcToRelative(1.0f, 1.0f, 0.0f, false, true, 1.0f, 1.0f)
|
||||
curveToRelative(0.0f, 1.0f, 0.0f, 6.0f, -2.0f, 6.0f)
|
||||
reflectiveCurveToRelative(-3.0f, 0.0f, -2.0f, -4.0f)
|
||||
reflectiveCurveTo(133.5f, 75.5f, 133.5f, 75.5f)
|
||||
close()
|
||||
}
|
||||
+141
@@ -0,0 +1,141 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.LightRed
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Accessory4SatellitePreview() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
accessory4Satellite(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun accessory4Satellite(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData3, stroke = Black, strokeLineWidth = 0.75f)
|
||||
builder.addPath(pathData4, fill = Black, fillAlpha = 0.4f)
|
||||
builder.addPath(pathData6, fill = LightRed, stroke = Black, strokeLineWidth = 0.75f)
|
||||
builder.addPath(pathData9, fill = Black, fillAlpha = 0.4f)
|
||||
builder.addPath(pathData7, fill = Black, fillAlpha = 0.2f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(139.5f, 51.5f)
|
||||
reflectiveCurveToRelative(-24.0f, -2.0f, -32.0f, 33.0f)
|
||||
curveToRelative(0.0f, 0.0f, -6.0f, 25.0f, 20.0f, 25.0f)
|
||||
reflectiveCurveToRelative(32.0f, -17.0f, 34.0f, -32.0f)
|
||||
reflectiveCurveTo(149.5f, 51.5f, 139.5f, 51.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(139.5f, 51.5f)
|
||||
curveToRelative(-15.88f, 0.08f, -26.77f, 10.62f, -32.0f, 33.0f)
|
||||
curveToRelative(0.0f, 0.0f, -5.0f, 26.0f, 20.0f, 25.0f)
|
||||
reflectiveCurveToRelative(34.0f, -18.0f, 34.0f, -32.0f)
|
||||
curveTo(161.5f, 60.5f, 149.5f, 51.5f, 139.5f, 51.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(143.5f, 53.5f)
|
||||
reflectiveCurveToRelative(14.0f, 7.0f, 10.0f, 29.0f)
|
||||
reflectiveCurveToRelative(-26.0f, 25.0f, -33.0f, 24.0f)
|
||||
reflectiveCurveToRelative(-18.0f, -7.0f, -10.34f, -30.84f)
|
||||
curveTo(114.5f, 59.5f, 130.5f, 47.5f, 143.5f, 53.5f)
|
||||
close()
|
||||
moveTo(130.09f, 76.5f)
|
||||
lineToRelative(4.46f, 2.0f)
|
||||
reflectiveCurveToRelative(0.89f, 2.0f, 0.0f, 3.0f)
|
||||
arcToRelative(4.07f, 4.07f, 0.0f, false, true, -2.67f, 1.0f)
|
||||
lineTo(129.0f, 80.79f)
|
||||
arcTo(5.22f, 5.22f, 0.0f, false, false, 130.09f, 76.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(121.5f, 63.5f)
|
||||
curveToRelative(-3.0f, 1.87f, -8.0f, 6.0f, -9.0f, 11.0f)
|
||||
reflectiveCurveToRelative(-1.0f, 14.0f, 0.0f, 16.0f)
|
||||
reflectiveCurveToRelative(4.0f, 1.0f, 4.0f, -2.0f)
|
||||
reflectiveCurveToRelative(0.0f, -17.0f, 5.0f, -21.0f)
|
||||
reflectiveCurveTo(123.4f, 62.32f, 121.5f, 63.5f)
|
||||
close()
|
||||
moveTo(128.5f, 57.5f)
|
||||
reflectiveCurveToRelative(-6.0f, 4.0f, -3.0f, 5.0f)
|
||||
reflectiveCurveToRelative(6.0f, -3.0f, 6.0f, -3.0f)
|
||||
reflectiveCurveTo(133.5f, 56.5f, 128.5f, 57.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData6 =
|
||||
PathData {
|
||||
moveTo(125.5f, 71.5f)
|
||||
reflectiveCurveToRelative(-7.0f, -2.0f, -10.0f, 1.0f)
|
||||
curveToRelative(-1.88f, 2.07f, 0.0f, 8.0f, 5.0f, 10.0f)
|
||||
reflectiveCurveToRelative(8.0f, -1.0f, 9.0f, -4.0f)
|
||||
reflectiveCurveTo(127.5f, 71.5f, 125.5f, 71.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData7 =
|
||||
PathData {
|
||||
moveTo(131.0f, 79.0f)
|
||||
lineToRelative(4.0f, 2.0f)
|
||||
lineToRelative(-0.38f, -2.33f)
|
||||
lineToRelative(-4.24f, -2.04f)
|
||||
lineToRelative(-0.32f, 1.97f)
|
||||
lineToRelative(0.94f, 0.4f)
|
||||
close()
|
||||
moveTo(123.5f, 71.5f)
|
||||
reflectiveCurveToRelative(5.0f, 2.0f, 4.0f, 6.0f)
|
||||
reflectiveCurveToRelative(-6.49f, 4.82f, -8.25f, 4.41f)
|
||||
reflectiveCurveToRelative(7.54f, 3.33f, 9.89f, -2.54f)
|
||||
reflectiveCurveTo(127.0f, 72.0f, 123.5f, 71.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData9 =
|
||||
PathData {
|
||||
moveTo(117.5f, 75.5f)
|
||||
arcToRelative(2.5f, 2.0f, 0.0f, true, false, 5.0f, 0.0f)
|
||||
arcToRelative(2.5f, 2.0f, 0.0f, true, false, -5.0f, 0.0f)
|
||||
close()
|
||||
}
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Accessory5MustachePreview() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
accessory5Mustache(SolidColor(Color.Yellow), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun accessory5Mustache(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor)
|
||||
builder.addPath(pathData2, fill = Black, stroke = Black, fillAlpha = 0.4f, strokeLineWidth = 1.0f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(125.5f, 157.5f)
|
||||
reflectiveCurveToRelative(8.0f, -4.0f, 15.0f, -3.0f)
|
||||
reflectiveCurveToRelative(20.0f, 8.0f, 26.0f, 5.0f)
|
||||
lineToRelative(8.0f, -4.0f)
|
||||
reflectiveCurveToRelative(-3.0f, 13.0f, -14.0f, 14.0f)
|
||||
reflectiveCurveToRelative(-29.0f, -3.0f, -35.0f, -2.0f)
|
||||
reflectiveCurveToRelative(-25.0f, 7.0f, -30.0f, 6.0f)
|
||||
reflectiveCurveToRelative(-10.0f, -1.0f, -12.0f, -11.0f)
|
||||
curveToRelative(0.0f, 0.0f, -1.0f, -3.0f, 3.0f, 0.0f)
|
||||
reflectiveCurveToRelative(11.0f, 4.0f, 18.0f, -1.0f)
|
||||
reflectiveCurveTo(119.5f, 153.5f, 125.5f, 157.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(125.5f, 157.5f)
|
||||
reflectiveCurveToRelative(8.0f, -4.0f, 15.0f, -3.0f)
|
||||
reflectiveCurveToRelative(20.0f, 8.0f, 26.0f, 5.0f)
|
||||
lineToRelative(8.0f, -4.0f)
|
||||
reflectiveCurveToRelative(-3.0f, 13.0f, -14.0f, 14.0f)
|
||||
reflectiveCurveToRelative(-29.0f, -3.0f, -35.0f, -2.0f)
|
||||
reflectiveCurveToRelative(-25.0f, 7.0f, -30.0f, 6.0f)
|
||||
reflectiveCurveToRelative(-10.0f, -1.0f, -12.0f, -11.0f)
|
||||
curveToRelative(0.0f, 0.0f, -1.0f, -3.0f, 3.0f, 0.0f)
|
||||
reflectiveCurveToRelative(11.0f, 4.0f, 18.0f, -1.0f)
|
||||
reflectiveCurveTo(119.5f, 153.5f, 125.5f, 157.5f)
|
||||
close()
|
||||
}
|
||||
+139
@@ -0,0 +1,139 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.LightRed
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Accessory6Hat() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
accessory6Hat(SolidColor(Color.Yellow), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun accessory6Hat(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData2, fill = Black, fillAlpha = 0.2f)
|
||||
builder.addPath(pathData6, fill = LightRed, stroke = Black, strokeLineWidth = 0.75f)
|
||||
builder.addPath(pathData9, stroke = Black, strokeLineWidth = 1.0f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(131.0f, 59.0f)
|
||||
reflectiveCurveToRelative(-13.0f, 1.0f, -14.0f, 6.0f)
|
||||
arcToRelative(2.62f, 2.62f, 0.0f, false, false, 0.5f, 2.5f)
|
||||
curveToRelative(1.0f, 1.0f, 3.0f, 5.0f, 4.0f, 8.0f)
|
||||
reflectiveCurveToRelative(2.0f, 5.0f, 0.0f, 5.0f)
|
||||
reflectiveCurveToRelative(-8.0f, 2.0f, -10.0f, 4.0f)
|
||||
reflectiveCurveToRelative(-1.0f, 5.0f, -1.0f, 5.0f)
|
||||
lineToRelative(1.0f, 9.0f)
|
||||
arcToRelative(33.15f, 33.15f, 0.0f, false, false, 18.0f, 5.0f)
|
||||
curveToRelative(16.5f, 0.5f, 34.0f, -9.0f, 35.0f, -10.0f)
|
||||
reflectiveCurveToRelative(-1.0f, -11.0f, -1.0f, -11.0f)
|
||||
curveToRelative(0.16f, -0.17f, -2.84f, -5.17f, -4.0f, -5.0f)
|
||||
curveToRelative(-1.0f, 0.14f, -12.0f, 0.0f, -12.0f, 0.0f)
|
||||
reflectiveCurveToRelative(0.0f, -15.0f, -1.0f, -16.0f)
|
||||
reflectiveCurveTo(141.5f, 58.5f, 131.0f, 59.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(151.5f, 88.5f)
|
||||
reflectiveCurveToRelative(1.14f, 9.54f, 0.57f, 10.77f)
|
||||
curveToRelative(0.0f, 0.0f, 12.43f, -4.77f, 12.43f, -5.77f)
|
||||
reflectiveCurveToRelative(0.0f, -9.0f, -1.0f, -11.0f)
|
||||
arcToRelative(27.36f, 27.36f, 0.0f, false, false, -4.0f, -5.0f)
|
||||
reflectiveCurveToRelative(1.59f, 1.44f, -0.21f, 3.72f)
|
||||
reflectiveCurveToRelative(-5.36f, 6.31f, -8.08f, 6.3f)
|
||||
close()
|
||||
moveTo(121.5f, 80.5f)
|
||||
reflectiveCurveToRelative(-7.3f, 1.22f, -8.65f, 3.11f)
|
||||
reflectiveCurveToRelative(0.21f, 5.68f, 3.93f, 6.29f)
|
||||
reflectiveCurveToRelative(12.31f, 2.13f, 27.0f, -0.63f)
|
||||
lineToRelative(7.42f, -1.75f)
|
||||
lineToRelative(-10.71f, -4.0f)
|
||||
arcTo(38.39f, 38.39f, 0.0f, false, false, 121.5f, 80.5f)
|
||||
close()
|
||||
moveTo(137.0f, 67.0f)
|
||||
lineToRelative(3.87f, 16.18f)
|
||||
reflectiveCurveTo(147.0f, 80.0f, 147.0f, 77.0f)
|
||||
reflectiveCurveToRelative(0.0f, -13.73f, 0.0f, -13.73f)
|
||||
reflectiveCurveTo(145.09f, 67.0f, 137.0f, 67.0f)
|
||||
close()
|
||||
moveTo(136.18f, 59.0f)
|
||||
lineToRelative(0.82f, 8.0f)
|
||||
reflectiveCurveToRelative(-18.0f, 2.0f, -20.0f, -2.0f)
|
||||
reflectiveCurveTo(130.36f, 58.0f, 136.18f, 59.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData6 =
|
||||
PathData {
|
||||
moveTo(121.5f, 75.5f)
|
||||
reflectiveCurveToRelative(0.0f, 2.0f, 6.0f, 3.0f)
|
||||
reflectiveCurveToRelative(13.0f, -2.0f, 16.0f, -4.0f)
|
||||
reflectiveCurveToRelative(3.33f, -3.41f, 3.33f, -3.41f)
|
||||
lineToRelative(0.67f, 6.41f)
|
||||
arcToRelative(10.67f, 10.67f, 0.0f, false, true, -8.0f, 6.0f)
|
||||
curveToRelative(-13.0f, 3.0f, -16.91f, -3.58f, -16.91f, -3.58f)
|
||||
close()
|
||||
}
|
||||
private val pathData9 =
|
||||
PathData {
|
||||
moveTo(132.5f, 67.5f)
|
||||
reflectiveCurveToRelative(15.0f, -1.0f, 14.0f, -5.0f)
|
||||
reflectiveCurveToRelative(-14.0f, -3.56f, -14.0f, -3.56f)
|
||||
reflectiveCurveTo(118.0f, 60.0f, 117.26f, 64.25f)
|
||||
reflectiveCurveTo(132.5f, 67.5f, 132.5f, 67.5f)
|
||||
close()
|
||||
|
||||
moveTo(113.16f, 83.3f)
|
||||
reflectiveCurveToRelative(-6.66f, 9.2f, 23.18f, 7.0f)
|
||||
curveToRelative(25.17f, -1.75f, 23.8f, -12.39f, 23.8f, -12.39f)
|
||||
lineToRelative(3.36f, 4.64f)
|
||||
reflectiveCurveToRelative(2.0f, 10.0f, 1.0f, 11.0f)
|
||||
reflectiveCurveToRelative(-18.0f, 10.0f, -33.68f, 10.0f)
|
||||
arcToRelative(45.47f, 45.47f, 0.0f, false, true, -16.46f, -3.35f)
|
||||
arcToRelative(7.75f, 7.75f, 0.0f, false, true, -2.86f, -1.61f)
|
||||
lineToRelative(-1.2f, -10.0f)
|
||||
arcTo(5.34f, 5.34f, 0.0f, false, true, 113.16f, 83.3f)
|
||||
close()
|
||||
}
|
||||
+263
@@ -0,0 +1,263 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Accessory7Antenna() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
accessory7Antenna(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun accessory7Antenna(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
// Blye support
|
||||
builder.addPath(pathData1, fill = fgColor)
|
||||
|
||||
// Blue Countour
|
||||
builder.addPath(pathData8, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// Column Contour
|
||||
builder.addPath(pathData11, fill = Black, stroke = Black, fillAlpha = 0.2f, strokeLineWidth = 1.0f)
|
||||
|
||||
// Stickts
|
||||
builder.addPath(pathData14, fill = Black)
|
||||
|
||||
// Curved Stick
|
||||
builder.addPath(pathData23, stroke = Black, strokeLineWidth = 1.5f)
|
||||
|
||||
// Shades
|
||||
builder.addPath(pathData22, fill = Black, fillAlpha = 0.2f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(128.5f, 86.5f)
|
||||
arcToRelative(3.49f, 3.49f, 0.0f, false, false, -1.0f, 2.0f)
|
||||
verticalLineToRelative(3.0f)
|
||||
reflectiveCurveToRelative(3.0f, 3.0f, 9.0f, 3.0f)
|
||||
reflectiveCurveToRelative(12.0f, -4.0f, 12.0f, -4.0f)
|
||||
verticalLineToRelative(-5.0f)
|
||||
reflectiveCurveToRelative(-1.0f, -1.0f, -6.0f, -1.0f)
|
||||
reflectiveCurveTo(131.5f, 84.5f, 128.5f, 86.5f)
|
||||
close()
|
||||
moveTo(173.5f, 21.5f)
|
||||
lineToRelative(-35.0f, 17.0f)
|
||||
reflectiveCurveToRelative(-0.57f, 2.41f, 0.22f, 3.71f)
|
||||
lineToRelative(0.78f, 1.29f)
|
||||
lineToRelative(37.0f, -18.0f)
|
||||
reflectiveCurveTo(178.5f, 20.5f, 173.5f, 21.5f)
|
||||
close()
|
||||
moveTo(96.5f, 58.5f)
|
||||
reflectiveCurveToRelative(-2.0f, 2.0f, -1.0f, 3.0f)
|
||||
reflectiveCurveToRelative(3.0f, 0.0f, 3.0f, 0.0f)
|
||||
lineToRelative(33.66f, -15.9f)
|
||||
arcToRelative(6.44f, 6.44f, 0.0f, false, true, -0.66f, -3.1f)
|
||||
close()
|
||||
moveTo(134.5f, 47.5f)
|
||||
lineToRelative(-1.0f, 37.0f)
|
||||
arcToRelative(4.33f, 4.33f, 0.0f, false, false, 4.0f, 2.0f)
|
||||
arcToRelative(7.65f, 7.65f, 0.0f, false, false, 5.0f, -2.0f)
|
||||
lineToRelative(-2.0f, -40.0f)
|
||||
reflectiveCurveTo(135.5f, 44.5f, 134.5f, 47.5f)
|
||||
close()
|
||||
moveTo(136.5f, 38.5f)
|
||||
lineToRelative(-4.0f, 2.0f)
|
||||
arcToRelative(3.76f, 3.76f, 0.0f, false, false, -0.81f, 1.55f)
|
||||
arcToRelative(5.34f, 5.34f, 0.0f, false, false, -0.19f, 1.45f)
|
||||
curveToRelative(0.0f, 2.0f, 2.0f, 4.0f, 3.0f, 4.0f)
|
||||
curveToRelative(0.0f, 0.0f, -0.17f, -0.54f, 1.42f, -1.77f)
|
||||
arcToRelative(8.26f, 8.26f, 0.0f, false, true, 4.32f, -1.22f)
|
||||
horizontalLineToRelative(0.26f)
|
||||
reflectiveCurveToRelative(-2.0f, -2.0f, -2.0f, -3.0f)
|
||||
verticalLineToRelative(-3.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData8 =
|
||||
PathData {
|
||||
moveTo(134.5f, 47.5f)
|
||||
lineToRelative(-1.0f, 37.0f)
|
||||
arcToRelative(4.33f, 4.33f, 0.0f, false, false, 4.0f, 2.0f)
|
||||
arcToRelative(7.65f, 7.65f, 0.0f, false, false, 5.0f, -2.0f)
|
||||
lineToRelative(-2.0f, -40.0f)
|
||||
reflectiveCurveTo(135.5f, 44.5f, 134.5f, 47.5f)
|
||||
close()
|
||||
moveTo(128.5f, 86.5f)
|
||||
arcToRelative(3.49f, 3.49f, 0.0f, false, false, -1.0f, 2.0f)
|
||||
verticalLineToRelative(3.0f)
|
||||
reflectiveCurveToRelative(3.0f, 3.0f, 9.0f, 3.0f)
|
||||
reflectiveCurveToRelative(12.0f, -4.0f, 12.0f, -4.0f)
|
||||
verticalLineToRelative(-5.0f)
|
||||
reflectiveCurveToRelative(-0.8f, -1.0f, -5.8f, -1.0f)
|
||||
arcToRelative(7.15f, 7.15f, 0.0f, false, true, -4.57f, 2.0f)
|
||||
curveToRelative(-1.63f, 0.0f, -4.17f, 0.0f, -4.63f, -1.72f)
|
||||
arcTo(10.71f, 10.71f, 0.0f, false, false, 128.5f, 86.5f)
|
||||
close()
|
||||
moveTo(136.5f, 38.5f)
|
||||
lineToRelative(-4.0f, 2.0f)
|
||||
arcToRelative(3.76f, 3.76f, 0.0f, false, false, -0.81f, 1.55f)
|
||||
arcToRelative(5.34f, 5.34f, 0.0f, false, false, -0.19f, 1.45f)
|
||||
curveToRelative(0.0f, 2.0f, 2.0f, 4.0f, 3.0f, 4.0f)
|
||||
curveToRelative(0.0f, 0.0f, -0.17f, -0.54f, 1.42f, -1.77f)
|
||||
arcToRelative(8.26f, 8.26f, 0.0f, false, true, 4.32f, -1.22f)
|
||||
horizontalLineToRelative(0.26f)
|
||||
reflectiveCurveToRelative(-2.0f, -2.0f, -2.0f, -3.0f)
|
||||
verticalLineToRelative(-3.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData11 =
|
||||
PathData {
|
||||
moveTo(128.5f, 87.5f)
|
||||
reflectiveCurveToRelative(0.0f, 2.0f, 6.0f, 2.0f)
|
||||
reflectiveCurveToRelative(11.0f, -1.0f, 13.0f, -3.0f)
|
||||
curveToRelative(0.48f, -0.55f, 0.5f, -1.75f, -2.25f, -1.87f)
|
||||
curveToRelative(-1.0f, 0.0f, -3.15f, 0.0f, -3.15f, 0.0f)
|
||||
arcToRelative(6.77f, 6.77f, 0.0f, false, true, -4.1f, 1.8f)
|
||||
curveToRelative(-3.5f, 0.1f, -4.31f, -1.6f, -4.31f, -1.6f)
|
||||
reflectiveCurveTo(128.5f, 85.5f, 128.5f, 87.5f)
|
||||
close()
|
||||
moveTo(96.5f, 58.5f)
|
||||
reflectiveCurveToRelative(-2.0f, 2.0f, -1.0f, 3.0f)
|
||||
reflectiveCurveToRelative(3.0f, 0.0f, 3.0f, 0.0f)
|
||||
lineToRelative(33.8f, -15.6f)
|
||||
arcToRelative(7.45f, 7.45f, 0.0f, false, true, -0.8f, -3.4f)
|
||||
close()
|
||||
moveTo(173.5f, 21.5f)
|
||||
lineToRelative(-35.0f, 17.0f)
|
||||
reflectiveCurveToRelative(-0.57f, 2.41f, 0.22f, 3.71f)
|
||||
lineToRelative(0.78f, 1.29f)
|
||||
lineToRelative(37.0f, -18.0f)
|
||||
curveTo(177.52f, 25.52f, 179.49f, 20.53f, 173.5f, 21.5f)
|
||||
close()
|
||||
moveTo(175.5f, 23.5f)
|
||||
moveToRelative(-2.0f, 0.0f)
|
||||
arcToRelative(2.0f, 2.0f, 0.0f, true, true, 4.0f, 0.0f)
|
||||
arcToRelative(2.0f, 2.0f, 0.0f, true, true, -4.0f, 0.0f)
|
||||
}
|
||||
private val pathData14 =
|
||||
PathData {
|
||||
moveTo(137.5f, 5.5f)
|
||||
reflectiveCurveToRelative(-2.0f, 0.0f, 1.0f, 2.0f)
|
||||
reflectiveCurveToRelative(32.0f, 15.0f, 32.0f, 15.0f)
|
||||
lineToRelative(2.0f, -1.0f)
|
||||
lineToRelative(-33.0f, -15.0f)
|
||||
close()
|
||||
moveTo(56.72f, 44.0f)
|
||||
arcToRelative(1.7f, 1.7f, 0.0f, false, false, 1.2f, 1.19f)
|
||||
lineTo(96.29f, 58.83f)
|
||||
lineToRelative(1.89f, -1.2f)
|
||||
lineTo(58.81f, 44.1f)
|
||||
reflectiveCurveTo(56.44f, 43.0f, 56.72f, 44.0f)
|
||||
close()
|
||||
moveTo(114.5f, 17.5f)
|
||||
reflectiveCurveToRelative(-2.0f, 0.0f, 1.0f, 2.0f)
|
||||
reflectiveCurveToRelative(32.0f, 15.0f, 32.0f, 15.0f)
|
||||
lineToRelative(2.0f, -1.0f)
|
||||
lineToRelative(-33.0f, -15.0f)
|
||||
close()
|
||||
moveTo(102.0f, 26.53f)
|
||||
reflectiveCurveToRelative(-2.0f, 0.12f, 1.12f, 1.94f)
|
||||
reflectiveCurveTo(133.0f, 40.2f, 133.0f, 40.2f)
|
||||
lineToRelative(1.91f, -0.77f)
|
||||
lineToRelative(-30.83f, -12.0f)
|
||||
close()
|
||||
moveTo(177.5f, 24.19f)
|
||||
lineTo(212.0f, 41.0f)
|
||||
curveToRelative(1.0f, 1.0f, 0.39f, 1.37f, -2.0f, 1.0f)
|
||||
lineTo(176.5f, 25.5f)
|
||||
reflectiveCurveTo(177.0f, 25.38f, 177.5f, 24.19f)
|
||||
close()
|
||||
moveTo(154.91f, 35.41f)
|
||||
lineToRelative(35.6f, 14.34f)
|
||||
reflectiveCurveTo(192.0f, 51.0f, 188.58f, 50.88f)
|
||||
lineTo(154.0f, 36.79f)
|
||||
close()
|
||||
moveTo(102.89f, 59.02f)
|
||||
lineToRelative(31.45f, 9.67f)
|
||||
lineToRelative(-0.69f, 1.29f)
|
||||
lineToRelative(-32.65f, -10.0f)
|
||||
lineToRelative(1.89f, -0.96f)
|
||||
close()
|
||||
moveTo(142.0f, 42.54f)
|
||||
lineToRelative(35.55f, 13.0f)
|
||||
curveToRelative(2.4f, 0.9f, 0.47f, 2.47f, -2.0f, 1.19f)
|
||||
lineTo(140.2f, 43.79f)
|
||||
close()
|
||||
}
|
||||
private val pathData22 =
|
||||
PathData {
|
||||
moveTo(136.0f, 38.75f)
|
||||
arcToRelative(5.37f, 5.37f, 0.0f, false, false, -0.5f, 2.75f)
|
||||
curveToRelative(0.0f, 2.0f, 2.22f, 3.37f, 2.22f, 3.37f)
|
||||
lineToRelative(1.8f, 40.84f)
|
||||
lineTo(144.0f, 88.34f)
|
||||
verticalLineToRelative(4.0f)
|
||||
lineToRelative(4.46f, -1.89f)
|
||||
verticalLineToRelative(-5.0f)
|
||||
arcToRelative(35.36f, 35.36f, 0.0f, false, false, -6.0f, -1.0f)
|
||||
lineToRelative(-2.0f, -40.0f)
|
||||
arcToRelative(3.7f, 3.7f, 0.0f, false, true, -2.0f, -3.0f)
|
||||
verticalLineToRelative(-3.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData23 =
|
||||
PathData {
|
||||
moveTo(119.5f, 47.5f)
|
||||
lineToRelative(-32.0f, -12.0f)
|
||||
reflectiveCurveToRelative(-3.0f, -1.0f, -4.0f, 1.0f)
|
||||
reflectiveCurveToRelative(0.0f, 3.0f, 2.0f, 4.0f)
|
||||
reflectiveCurveToRelative(27.0f, 10.0f, 27.0f, 10.0f)
|
||||
moveTo(116.05f, 49.09f)
|
||||
lineTo(83.95f, 37.51f)
|
||||
moveTo(125.5f, 49.2f)
|
||||
lineTo(134.36f, 52.57f)
|
||||
moveTo(117.9f, 52.66f)
|
||||
lineTo(134.0f, 59.0f)
|
||||
moveTo(121.42f, 50.93f)
|
||||
lineTo(134.27f, 55.83f)
|
||||
moveTo(141.0f, 54.57f)
|
||||
lineTo(158.0f, 62.0f)
|
||||
reflectiveCurveToRelative(4.0f, 2.0f, 3.0f, 4.0f)
|
||||
reflectiveCurveToRelative(-5.0f, 1.0f, -6.0f, 1.0f)
|
||||
reflectiveCurveToRelative(-13.65f, -5.5f, -13.65f, -5.5f)
|
||||
moveTo(141.18f, 58.12f)
|
||||
lineTo(160.5f, 66.5f)
|
||||
}
|
||||
+176
@@ -0,0 +1,176 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Accessory8Brush() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
accessory8Brush(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun accessory8Brush(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor)
|
||||
builder.addPath(pathData2, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData3, fill = Black, stroke = Black, fillAlpha = 0.2f, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData4, fill = Black, fillAlpha = 0.2f)
|
||||
builder.addPath(pathData5, fill = SolidColor(Color(0xFF716558)), stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData6, fill = SolidColor(Color(0xFF9a8479)), stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData7, fill = SolidColor(Color(0xFF716558)), stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData8, fill = SolidColor(Color(0xFFc1b49a)), stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData9, fill = SolidColor(Color(0xFFc1b49a)), stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData10, fill = Black, fillAlpha = 0.2f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(135.0f, 83.0f)
|
||||
reflectiveCurveToRelative(-13.0f, 2.0f, -13.0f, 5.0f)
|
||||
arcToRelative(54.33f, 54.33f, 0.0f, false, false, 0.5f, 6.5f)
|
||||
reflectiveCurveToRelative(4.0f, 4.0f, 13.0f, 3.0f)
|
||||
arcToRelative(37.83f, 37.83f, 0.0f, false, false, 16.0f, -6.0f)
|
||||
verticalLineToRelative(-5.0f)
|
||||
lineToRelative(-3.0f, -4.0f)
|
||||
reflectiveCurveTo(143.5f, 81.5f, 135.0f, 83.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(135.0f, 83.0f)
|
||||
reflectiveCurveToRelative(-13.0f, 2.0f, -13.0f, 5.0f)
|
||||
arcToRelative(54.33f, 54.33f, 0.0f, false, false, 0.5f, 6.5f)
|
||||
reflectiveCurveToRelative(4.0f, 4.0f, 13.0f, 3.0f)
|
||||
arcToRelative(37.83f, 37.83f, 0.0f, false, false, 16.0f, -6.0f)
|
||||
verticalLineToRelative(-5.0f)
|
||||
lineToRelative(-3.0f, -4.0f)
|
||||
reflectiveCurveTo(143.5f, 81.5f, 135.0f, 83.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(123.5f, 88.5f)
|
||||
reflectiveCurveToRelative(2.0f, 3.0f, 10.0f, 2.0f)
|
||||
reflectiveCurveToRelative(14.0f, -3.0f, 15.0f, -5.0f)
|
||||
reflectiveCurveToRelative(1.19f, -2.37f, -1.41f, -3.18f)
|
||||
reflectiveCurveToRelative(-13.22f, 0.86f, -16.41f, 1.52f)
|
||||
reflectiveCurveTo(122.5f, 85.5f, 123.5f, 88.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(123.5f, 88.5f)
|
||||
reflectiveCurveToRelative(2.0f, 3.0f, 10.0f, 2.0f)
|
||||
arcToRelative(47.41f, 47.41f, 0.0f, false, false, 11.86f, -2.78f)
|
||||
curveToRelative(-0.38f, 0.16f, -4.11f, -2.4f, -4.11f, -2.4f)
|
||||
reflectiveCurveToRelative(1.43f, -3.14f, 2.0f, -3.18f)
|
||||
arcToRelative(105.65f, 105.65f, 0.0f, false, false, -12.56f, 1.69f)
|
||||
curveTo(127.5f, 84.5f, 122.5f, 85.5f, 123.5f, 88.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData5 =
|
||||
PathData {
|
||||
moveTo(139.5f, 66.5f)
|
||||
reflectiveCurveToRelative(-4.0f, -16.0f, 3.0f, -27.0f)
|
||||
curveToRelative(0.0f, 0.0f, -2.0f, -7.0f, -6.0f, -3.0f)
|
||||
curveToRelative(0.0f, 0.0f, -4.0f, 3.0f, -5.0f, 15.0f)
|
||||
arcToRelative(66.0f, 66.0f, 0.0f, false, false, 2.0f, 22.0f)
|
||||
reflectiveCurveTo(138.5f, 73.5f, 139.5f, 66.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData6 =
|
||||
PathData {
|
||||
moveTo(119.5f, 36.5f)
|
||||
reflectiveCurveToRelative(1.0f, 13.0f, 3.0f, 19.0f)
|
||||
reflectiveCurveToRelative(4.0f, 11.0f, 6.0f, 16.0f)
|
||||
reflectiveCurveToRelative(5.0f, 7.0f, 6.0f, 5.0f)
|
||||
reflectiveCurveToRelative(0.0f, -3.0f, -2.0f, -10.0f)
|
||||
reflectiveCurveToRelative(-5.0f, -18.0f, -5.0f, -25.0f)
|
||||
verticalLineToRelative(-7.0f)
|
||||
arcToRelative(10.34f, 10.34f, 0.0f, false, false, -4.0f, -1.0f)
|
||||
curveTo(121.5f, 33.5f, 119.5f, 34.5f, 119.5f, 36.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData7 =
|
||||
PathData {
|
||||
moveTo(110.5f, 50.5f)
|
||||
reflectiveCurveToRelative(8.0f, 8.0f, 10.0f, 13.0f)
|
||||
reflectiveCurveToRelative(5.0f, 13.0f, 6.0f, 10.0f)
|
||||
reflectiveCurveToRelative(-3.0f, -18.0f, -6.0f, -22.0f)
|
||||
arcToRelative(61.22f, 61.22f, 0.0f, false, false, -5.0f, -6.0f)
|
||||
reflectiveCurveTo(110.5f, 45.5f, 110.5f, 50.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData8 =
|
||||
PathData {
|
||||
moveTo(136.5f, 86.5f)
|
||||
reflectiveCurveToRelative(-5.0f, -19.0f, -19.0f, -28.0f)
|
||||
reflectiveCurveToRelative(-20.0f, -7.0f, -20.0f, -7.0f)
|
||||
reflectiveCurveToRelative(-4.0f, 3.0f, 1.0f, 6.0f)
|
||||
reflectiveCurveToRelative(12.0f, 5.0f, 18.0f, 10.0f)
|
||||
reflectiveCurveToRelative(12.0f, 14.0f, 12.0f, 16.0f)
|
||||
reflectiveCurveTo(131.5f, 88.5f, 136.5f, 86.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData9 =
|
||||
PathData {
|
||||
moveTo(134.5f, 73.5f)
|
||||
reflectiveCurveToRelative(6.0f, -25.0f, 16.0f, -32.0f)
|
||||
reflectiveCurveToRelative(9.0f, 2.0f, 9.0f, 2.0f)
|
||||
verticalLineToRelative(4.0f)
|
||||
reflectiveCurveToRelative(-4.0f, -2.0f, -8.0f, 5.0f)
|
||||
reflectiveCurveToRelative(-9.0f, 19.0f, -9.0f, 23.0f)
|
||||
verticalLineToRelative(8.0f)
|
||||
reflectiveCurveToRelative(-4.0f, 5.0f, -6.0f, 3.0f)
|
||||
curveToRelative(0.0f, 0.0f, -3.24f, -7.59f, -3.12f, -8.3f)
|
||||
reflectiveCurveTo(134.5f, 73.5f, 134.5f, 73.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData10 =
|
||||
PathData {
|
||||
moveTo(144.36f, 88.12f)
|
||||
verticalLineToRelative(7.11f)
|
||||
lineToRelative(7.14f, -3.73f)
|
||||
lineToRelative(0.07f, -4.64f)
|
||||
lineTo(150.0f, 84.0f)
|
||||
arcTo(11.59f, 11.59f, 0.0f, false, true, 144.36f, 88.12f)
|
||||
close()
|
||||
}
|
||||
+143
@@ -0,0 +1,143 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.MediumGray
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Accessory9Horn() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
accessory9Horn(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun accessory9Horn(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData3, fill = Black, fillAlpha = 0.2f)
|
||||
builder.addPath(pathData4, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData5, fill = Black, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData6, fill = MediumGray)
|
||||
builder.addPath(pathData7, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData8, fill = Black, fillAlpha = 0.4f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(122.5f, 88.5f)
|
||||
verticalLineToRelative(6.0f)
|
||||
reflectiveCurveToRelative(3.0f, 4.0f, 13.0f, 3.0f)
|
||||
curveToRelative(12.5f, -0.5f, 16.0f, -5.0f, 16.0f, -5.0f)
|
||||
verticalLineToRelative(-6.0f)
|
||||
lineToRelative(-2.0f, -3.0f)
|
||||
arcToRelative(63.26f, 63.26f, 0.0f, false, false, -15.0f, 0.0f)
|
||||
curveTo(126.5f, 84.5f, 122.5f, 85.5f, 122.5f, 88.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(122.5f, 88.5f)
|
||||
verticalLineToRelative(6.0f)
|
||||
reflectiveCurveToRelative(2.0f, 3.0f, 13.0f, 3.0f)
|
||||
reflectiveCurveToRelative(16.0f, -5.0f, 16.0f, -5.0f)
|
||||
verticalLineToRelative(-6.0f)
|
||||
lineToRelative(-2.0f, -3.0f)
|
||||
arcToRelative(63.26f, 63.26f, 0.0f, false, false, -15.0f, 0.0f)
|
||||
curveTo(126.5f, 84.5f, 122.5f, 85.5f, 122.5f, 88.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(142.5f, 89.5f)
|
||||
curveToRelative(0.2f, -0.05f, 1.28f, -0.44f, 1.5f, -0.5f)
|
||||
curveToRelative(-0.63f, -1.83f, -4.53f, -5.64f, -5.5f, -5.7f)
|
||||
curveToRelative(-7.0f, -0.41f, -11.66f, 1.0f, -13.22f, 2.0f)
|
||||
curveToRelative(-1.78f, 1.16f, -3.78f, 2.16f, 1.22f, 4.16f)
|
||||
curveTo(129.5f, 90.5f, 138.5f, 90.5f, 142.5f, 89.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(142.5f, 89.5f)
|
||||
curveToRelative(4.0f, -1.0f, 10.83f, -4.83f, 3.92f, -5.92f)
|
||||
reflectiveCurveToRelative(-19.36f, 0.59f, -21.14f, 1.75f)
|
||||
reflectiveCurveToRelative(-3.78f, 2.16f, 1.22f, 4.16f)
|
||||
curveTo(129.5f, 90.5f, 138.5f, 90.5f, 142.5f, 89.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData5 =
|
||||
PathData {
|
||||
moveTo(130.5f, 52.5f)
|
||||
lineTo(128.24f, 84.0f)
|
||||
reflectiveCurveToRelative(1.26f, 3.47f, 7.26f, 2.47f)
|
||||
reflectiveCurveToRelative(7.33f, -3.44f, 7.33f, -3.44f)
|
||||
lineTo(132.5f, 54.5f)
|
||||
reflectiveCurveTo(131.5f, 51.5f, 130.5f, 52.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData6 =
|
||||
PathData {
|
||||
moveTo(131.5f, 55.5f)
|
||||
lineToRelative(7.06f, 30.26f)
|
||||
reflectiveCurveToRelative(3.94f, -0.26f, 3.94f, -2.26f)
|
||||
reflectiveCurveToRelative(-10.0f, -29.0f, -10.0f, -29.0f)
|
||||
reflectiveCurveTo(130.5f, 50.5f, 131.5f, 55.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData7 =
|
||||
PathData {
|
||||
moveTo(130.5f, 52.5f)
|
||||
lineTo(128.24f, 84.0f)
|
||||
reflectiveCurveToRelative(1.26f, 3.47f, 7.26f, 2.47f)
|
||||
reflectiveCurveToRelative(7.33f, -3.44f, 7.33f, -3.44f)
|
||||
lineTo(132.5f, 54.5f)
|
||||
reflectiveCurveTo(131.5f, 51.5f, 130.5f, 52.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData8 =
|
||||
PathData {
|
||||
moveTo(144.09f, 88.72f)
|
||||
verticalLineToRelative(8.0f)
|
||||
lineToRelative(7.41f, -4.26f)
|
||||
verticalLineToRelative(-6.0f)
|
||||
lineToRelative(-2.0f, -3.0f)
|
||||
curveTo(150.0f, 85.88f, 147.82f, 87.51f, 144.09f, 88.72f)
|
||||
close()
|
||||
}
|
||||
+174
@@ -0,0 +1,174 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.Gray
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Body0TropperPreview() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
body0Trooper(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun body0Trooper(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
// body
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.2f)
|
||||
|
||||
// body shades
|
||||
builder.addPath(pathData4, fill = Black, fillAlpha = 0.4f)
|
||||
builder.addPath(pathData6, fill = Black, stroke = Black, fillAlpha = 0.2f, strokeLineWidth = 1.0f)
|
||||
|
||||
// neck Circle
|
||||
builder.addPath(pathData12, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// neck
|
||||
builder.addPath(pathData13, fill = Gray, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// Joints
|
||||
builder.addPath(pathData14, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// Joint shade
|
||||
builder.addPath(pathData25, fill = Black, fillAlpha = 0.2f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(106.0f, 247.52f)
|
||||
reflectiveCurveToRelative(-34.47f, 3.0f, -50.47f, 32.0f)
|
||||
curveToRelative(0.0f, 0.0f, -5.0f, 9.0f, -6.0f, 23.0f)
|
||||
horizontalLineToRelative(27.0f)
|
||||
reflectiveCurveTo(77.43f, 272.54f, 106.0f, 247.52f)
|
||||
close()
|
||||
moveTo(226.5f, 236.5f)
|
||||
reflectiveCurveToRelative(-6.0f, -10.0f, -26.0f, -12.0f)
|
||||
reflectiveCurveToRelative(-56.0f, -2.0f, -81.0f, 13.0f)
|
||||
reflectiveCurveToRelative(-43.0f, 44.0f, -43.0f, 65.0f)
|
||||
horizontalLineToRelative(115.0f)
|
||||
reflectiveCurveToRelative(3.0f, -31.0f, 22.0f, -53.0f)
|
||||
curveToRelative(0.0f, 0.0f, 8.88f, -7.45f, 14.44f, -9.22f)
|
||||
curveTo(227.94f, 240.28f, 228.5f, 239.5f, 226.5f, 236.5f)
|
||||
close()
|
||||
moveTo(286.5f, 302.5f)
|
||||
reflectiveCurveToRelative(4.0f, -50.0f, -16.0f, -59.0f)
|
||||
reflectiveCurveToRelative(-44.0f, -8.0f, -57.0f, 6.0f)
|
||||
reflectiveCurveToRelative(-22.0f, 43.0f, -22.0f, 53.0f)
|
||||
close()
|
||||
}
|
||||
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(91.18f, 264.0f)
|
||||
reflectiveCurveToRelative(5.32f, 0.48f, 3.32f, 9.48f)
|
||||
reflectiveCurveToRelative(-5.0f, 7.0f, -7.0f, 17.0f)
|
||||
reflectiveCurveToRelative(-2.5f, 12.0f, -2.5f, 12.0f)
|
||||
horizontalLineTo(76.5f)
|
||||
reflectiveCurveTo(75.85f, 285.54f, 91.18f, 264.0f)
|
||||
close()
|
||||
moveTo(80.61f, 255.48f)
|
||||
reflectiveCurveToRelative(2.89f, 2.0f, -6.11f, 12.0f)
|
||||
arcToRelative(94.0f, 94.0f, 0.0f, false, false, -17.0f, 26.0f)
|
||||
curveToRelative(-3.0f, 7.0f, -1.75f, 9.0f, -1.75f, 9.0f)
|
||||
horizontalLineTo(49.5f)
|
||||
reflectiveCurveTo(50.73f, 270.47f, 80.61f, 255.48f)
|
||||
close()
|
||||
}
|
||||
private val pathData6 =
|
||||
PathData {
|
||||
moveTo(268.5f, 247.5f)
|
||||
reflectiveCurveToRelative(-8.0f, 8.0f, -11.0f, 26.0f)
|
||||
reflectiveCurveToRelative(-2.25f, 29.0f, -2.25f, 29.0f)
|
||||
horizontalLineTo(286.5f)
|
||||
reflectiveCurveToRelative(3.84f, -41.79f, -12.58f, -56.9f)
|
||||
curveTo(273.92f, 245.6f, 271.5f, 244.5f, 268.5f, 247.5f)
|
||||
close()
|
||||
moveTo(218.22f, 229.55f)
|
||||
reflectiveCurveToRelative(-18.72f, 0.95f, -31.72f, 20.95f)
|
||||
reflectiveCurveToRelative(-17.0f, 37.0f, -17.5f, 52.0f)
|
||||
horizontalLineToRelative(22.5f)
|
||||
curveToRelative(-1.42f, 0.12f, 8.08f, -36.84f, 16.0f, -45.5f)
|
||||
curveToRelative(10.0f, -15.5f, 21.0f, -16.5f, 21.0f, -16.5f)
|
||||
reflectiveCurveTo(228.93f, 235.6f, 218.22f, 229.55f)
|
||||
close()
|
||||
}
|
||||
private val pathData12 =
|
||||
PathData {
|
||||
moveTo(153.5f, 251.5f)
|
||||
curveToRelative(7.6f, -0.12f, 26.0f, -2.0f, 27.0f, -14.0f)
|
||||
reflectiveCurveToRelative(-27.0f, -8.0f, -27.0f, -8.0f)
|
||||
reflectiveCurveToRelative(-22.0f, 1.0f, -22.0f, 11.0f)
|
||||
reflectiveCurveTo(147.35f, 251.6f, 153.5f, 251.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData13 =
|
||||
PathData {
|
||||
moveTo(138.5f, 166.5f)
|
||||
reflectiveCurveToRelative(12.0f, 33.0f, 4.0f, 72.0f)
|
||||
curveToRelative(0.0f, 0.0f, 1.0f, 6.0f, 12.0f, 5.0f)
|
||||
reflectiveCurveToRelative(12.0f, -5.0f, 12.0f, -5.0f)
|
||||
reflectiveCurveToRelative(6.0f, -37.0f, -10.0f, -75.0f)
|
||||
curveTo(156.5f, 163.5f, 145.5f, 166.5f, 138.5f, 166.5f)
|
||||
close()
|
||||
}
|
||||
|
||||
private val pathData14 =
|
||||
PathData {
|
||||
moveTo(161.0f, 176.0f)
|
||||
arcToRelative(15.59f, 15.59f, 0.0f, false, true, -7.53f, 3.51f)
|
||||
curveToRelative(-5.0f, 1.0f, -9.0f, 1.0f, -11.52f, 0.0f)
|
||||
moveTo(163.66f, 185.38f)
|
||||
curveToRelative(-1.18f, 2.51f, -2.36f, 7.71f, -20.0f, 5.42f)
|
||||
moveTo(166.32f, 200.74f)
|
||||
reflectiveCurveToRelative(-4.63f, 7.77f, -21.23f, 3.27f)
|
||||
moveTo(167.42f, 213.41f)
|
||||
reflectiveCurveToRelative(-3.73f, 9.13f, -22.33f, 4.11f)
|
||||
moveTo(167.42f, 227.17f)
|
||||
reflectiveCurveToRelative(-7.75f, 9.36f, -23.34f, 1.85f)
|
||||
}
|
||||
private val pathData25 =
|
||||
PathData {
|
||||
moveTo(150.5f, 164.5f)
|
||||
reflectiveCurveToRelative(10.5f, 29.5f, 11.0f, 45.0f)
|
||||
arcToRelative(328.75f, 328.75f, 0.0f, false, true, -1.0f, 33.0f)
|
||||
lineToRelative(6.0f, -3.0f)
|
||||
curveToRelative(3.29f, -1.87f, 0.5f, -61.5f, -10.0f, -76.0f)
|
||||
close()
|
||||
}
|
||||
@@ -0,0 +1,204 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.Gray
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Body1ThinPreview() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
body1Thin(SolidColor(Color.Yellow), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun body1Thin(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
// Body
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// Body shade, must stay before grays
|
||||
builder.addPath(pathData2, fill = Black, fillAlpha = 0.4f)
|
||||
builder.addPath(pathData13, fill = Black, fillAlpha = 0.2f)
|
||||
|
||||
// Gray legs and neck
|
||||
builder.addPath(pathData6, fill = Gray, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// Shades Legs and neck
|
||||
builder.addPath(pathData15, fill = Black, fillAlpha = 0.2f)
|
||||
|
||||
// Joints
|
||||
builder.addPath(pathData16, stroke = Black, strokeLineWidth = 1.0f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(160.5f, 246.5f)
|
||||
reflectiveCurveToRelative(-14.0f, -3.0f, -27.0f, 13.0f)
|
||||
reflectiveCurveToRelative(-22.0f, 45.0f, -22.0f, 45.0f)
|
||||
horizontalLineToRelative(108.0f)
|
||||
reflectiveCurveToRelative(-20.0f, -35.0f, -25.0f, -40.0f)
|
||||
reflectiveCurveTo(176.5f, 247.5f, 160.5f, 246.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(121.5f, 303.5f)
|
||||
reflectiveCurveToRelative(5.0f, -24.0f, 10.0f, -33.0f)
|
||||
reflectiveCurveToRelative(3.28f, -8.07f, 7.64f, -8.53f)
|
||||
reflectiveCurveToRelative(15.13f, -1.22f, 23.75f, 2.66f)
|
||||
reflectiveCurveToRelative(8.18f, 3.25f, 8.18f, 3.25f)
|
||||
lineToRelative(13.12f, -12.15f)
|
||||
reflectiveCurveToRelative(-12.68f, -9.66f, -26.18f, -9.44f)
|
||||
reflectiveCurveToRelative(-23.5f, 12.22f, -26.5f, 15.22f)
|
||||
reflectiveCurveToRelative(-14.17f, 23.45f, -19.09f, 40.22f)
|
||||
close()
|
||||
}
|
||||
private val pathData6 =
|
||||
PathData {
|
||||
moveTo(149.0f, 192.0f)
|
||||
reflectiveCurveToRelative(1.0f, 62.0f, 2.0f, 64.0f)
|
||||
arcToRelative(11.16f, 11.16f, 0.0f, false, false, 9.06f, 3.21f)
|
||||
curveToRelative(5.44f, -0.71f, 6.44f, -2.71f, 6.94f, -5.21f)
|
||||
curveToRelative(0.0f, 0.0f, -2.5f, -48.5f, -2.5f, -62.5f)
|
||||
close()
|
||||
moveTo(193.5f, 272.5f)
|
||||
arcToRelative(6.85f, 6.85f, 0.0f, false, false, -2.0f, 8.0f)
|
||||
curveToRelative(2.0f, 5.0f, 8.0f, 6.0f, 8.0f, 6.0f)
|
||||
reflectiveCurveToRelative(7.0f, -6.0f, 15.0f, -2.0f)
|
||||
reflectiveCurveToRelative(9.0f, 7.0f, 9.0f, 15.0f)
|
||||
reflectiveCurveToRelative(14.0f, 3.0f, 14.0f, 3.0f)
|
||||
lineToRelative(2.0f, -2.0f)
|
||||
reflectiveCurveToRelative(4.0f, -21.0f, -19.0f, -31.0f)
|
||||
curveTo(220.5f, 269.5f, 209.5f, 265.5f, 193.5f, 272.5f)
|
||||
close()
|
||||
moveTo(127.07f, 268.36f)
|
||||
reflectiveCurveTo(108.5f, 263.5f, 98.5f, 279.5f)
|
||||
curveToRelative(0.0f, 0.0f, -5.0f, 9.0f, 1.0f, 20.0f)
|
||||
reflectiveCurveToRelative(7.0f, 4.0f, 7.0f, 4.0f)
|
||||
lineToRelative(7.0f, -5.25f)
|
||||
reflectiveCurveToRelative(-6.0f, -7.75f, -2.0f, -13.75f)
|
||||
curveToRelative(0.0f, 0.0f, 2.75f, -4.25f, 8.88f, -3.12f)
|
||||
close()
|
||||
}
|
||||
private val pathData7 =
|
||||
PathData {
|
||||
}
|
||||
private val pathData13 =
|
||||
PathData {
|
||||
moveTo(195.58f, 301.91f)
|
||||
horizontalLineTo(218.0f)
|
||||
reflectiveCurveTo(203.0f, 275.78f, 198.73f, 270.14f)
|
||||
reflectiveCurveTo(186.5f, 256.5f, 184.5f, 255.5f)
|
||||
lineToRelative(-13.0f, 12.0f)
|
||||
reflectiveCurveToRelative(8.0f, 4.69f, 10.48f, 8.84f)
|
||||
reflectiveCurveTo(192.66f, 293.32f, 195.58f, 301.91f)
|
||||
close()
|
||||
}
|
||||
|
||||
private val pathData15 =
|
||||
PathData {
|
||||
moveTo(159.5f, 191.5f)
|
||||
reflectiveCurveToRelative(3.0f, 36.0f, 3.0f, 40.0f)
|
||||
reflectiveCurveToRelative(1.0f, 27.0f, 1.0f, 27.0f)
|
||||
lineToRelative(3.0f, -1.0f)
|
||||
lineToRelative(-2.0f, -66.0f)
|
||||
close()
|
||||
moveTo(196.5f, 284.5f)
|
||||
arcToRelative(25.68f, 25.68f, 0.0f, false, true, 18.0f, -5.0f)
|
||||
curveToRelative(11.0f, 1.0f, 16.0f, 9.0f, 18.0f, 17.0f)
|
||||
reflectiveCurveToRelative(-4.0f, 10.0f, -4.0f, 10.0f)
|
||||
lineToRelative(-5.0f, -7.0f)
|
||||
reflectiveCurveToRelative(0.05f, -13.88f, -10.0f, -15.44f)
|
||||
reflectiveCurveToRelative(-14.0f, 2.44f, -14.0f, 2.44f)
|
||||
reflectiveCurveTo(195.5f, 286.5f, 196.5f, 284.5f)
|
||||
close()
|
||||
moveTo(123.53f, 274.89f)
|
||||
reflectiveCurveToRelative(-7.0f, -2.39f, -13.0f, 0.61f)
|
||||
reflectiveCurveToRelative(-9.0f, 7.0f, -9.0f, 12.0f)
|
||||
reflectiveCurveToRelative(5.0f, 12.0f, 7.0f, 14.0f)
|
||||
reflectiveCurveToRelative(4.83f, -3.86f, 4.83f, -3.86f)
|
||||
reflectiveCurveToRelative(-3.83f, -5.14f, -2.83f, -11.14f)
|
||||
curveToRelative(0.0f, 0.0f, 1.0f, -6.0f, 10.0f, -5.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData16 =
|
||||
PathData {
|
||||
moveTo(145.5f, 261.5f)
|
||||
reflectiveCurveToRelative(28.0f, 1.0f, 38.0f, 17.0f)
|
||||
reflectiveCurveToRelative(13.0f, 26.0f, 13.0f, 26.0f)
|
||||
horizontalLineToRelative(-86.0f)
|
||||
reflectiveCurveToRelative(13.77f, -34.15f, 18.39f, -38.57f)
|
||||
reflectiveCurveTo(144.5f, 261.5f, 145.5f, 261.5f)
|
||||
close()
|
||||
|
||||
moveTo(166.0f, 234.5f)
|
||||
reflectiveCurveToRelative(-0.5f, 3.0f, -5.5f, 3.0f)
|
||||
arcToRelative(64.39f, 64.39f, 0.0f, false, true, -10.3f, -1.0f)
|
||||
moveTo(165.8f, 225.5f)
|
||||
arcToRelative(10.11f, 10.11f, 0.0f, false, true, -6.3f, 2.0f)
|
||||
curveToRelative(-4.0f, 0.0f, -7.65f, -0.2f, -9.82f, -2.1f)
|
||||
moveTo(165.5f, 214.5f)
|
||||
arcToRelative(12.68f, 12.68f, 0.0f, false, true, -6.0f, 2.0f)
|
||||
curveToRelative(-3.0f, 0.0f, -7.0f, 0.25f, -10.0f, -1.37f)
|
||||
moveTo(164.5f, 203.5f)
|
||||
arcToRelative(8.76f, 8.76f, 0.0f, false, true, -6.0f, 2.0f)
|
||||
curveToRelative(-4.0f, 0.0f, -8.0f, 0.0f, -9.0f, -1.0f)
|
||||
moveTo(166.5f, 245.5f)
|
||||
reflectiveCurveToRelative(-1.0f, 3.0f, -6.0f, 3.0f)
|
||||
arcToRelative(21.51f, 21.51f, 0.0f, false, true, -10.0f, -2.0f)
|
||||
moveTo(206.0f, 268.82f)
|
||||
arcToRelative(2.89f, 2.89f, 0.0f, false, false, -1.5f, 2.68f)
|
||||
curveToRelative(0.0f, 2.0f, 0.1f, 8.87f, 7.0f, 11.94f)
|
||||
moveTo(229.44f, 274.89f)
|
||||
reflectiveCurveToRelative(-3.94f, -1.39f, -5.94f, 1.61f)
|
||||
reflectiveCurveToRelative(-3.62f, 9.25f, -2.81f, 12.13f)
|
||||
moveTo(223.56f, 300.34f)
|
||||
curveToRelative(-0.06f, 0.16f, 0.94f, -2.84f, 5.94f, -2.84f)
|
||||
arcToRelative(21.66f, 21.66f, 0.0f, false, true, 10.09f, 2.37f)
|
||||
moveTo(119.5f, 281.5f)
|
||||
reflectiveCurveToRelative(2.0f, -7.0f, 1.0f, -10.0f)
|
||||
arcToRelative(5.45f, 5.45f, 0.0f, false, false, -3.56f, -3.62f)
|
||||
moveTo(111.5f, 284.5f)
|
||||
arcToRelative(14.54f, 14.54f, 0.0f, false, false, -8.0f, -5.0f)
|
||||
curveToRelative(-5.0f, -1.0f, -5.44f, 0.94f, -5.44f, 0.94f)
|
||||
moveTo(111.0f, 293.56f)
|
||||
arcToRelative(10.89f, 10.89f, 0.0f, false, false, -7.48f, 0.94f)
|
||||
curveToRelative(-4.0f, 2.0f, -4.0f, 5.0f, -4.0f, 5.0f)
|
||||
}
|
||||
+209
@@ -0,0 +1,209 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.Gray
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Body2ThinnestPreview() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
body2Thinnest(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun body2Thinnest(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
// blue
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// Gray arms and legs
|
||||
builder.addPath(pathData8, fill = Gray, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// right side shade
|
||||
builder.addPath(pathData11, fill = Black, stroke = Black, fillAlpha = 0.2f, strokeLineWidth = 1.0f)
|
||||
|
||||
// Joints
|
||||
builder.addPath(pathData18, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// Shades
|
||||
builder.addPath(pathData4, fill = Black, fillAlpha = 0.4f)
|
||||
builder.addPath(pathData6, fill = Black, fillAlpha = 0.2f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(180.45f, 252.21f)
|
||||
reflectiveCurveToRelative(-17.95f, -2.71f, -29.95f, 2.29f)
|
||||
reflectiveCurveToRelative(-15.0f, 8.0f, -16.0f, 24.0f)
|
||||
curveToRelative(0.0f, 0.0f, 1.0f, 27.0f, 1.0f, 28.0f)
|
||||
reflectiveCurveToRelative(49.0f, 1.0f, 49.0f, 1.0f)
|
||||
verticalLineToRelative(-9.0f)
|
||||
arcToRelative(27.15f, 27.15f, 0.0f, false, true, -3.0f, -13.0f)
|
||||
curveToRelative(0.0f, -8.0f, 7.0f, -6.16f, 7.0f, -6.16f)
|
||||
reflectiveCurveTo(177.0f, 279.0f, 177.24f, 263.25f)
|
||||
arcTo(16.2f, 16.2f, 0.0f, false, true, 180.45f, 252.21f)
|
||||
close()
|
||||
moveTo(133.5f, 277.5f)
|
||||
reflectiveCurveToRelative(-6.92f, -1.5f, -8.0f, -5.25f)
|
||||
lineToRelative(-0.68f, -1.62f)
|
||||
curveToRelative(-0.37f, -6.66f, 1.07f, -12.0f, 5.72f, -15.0f)
|
||||
curveToRelative(0.0f, 0.0f, 5.17f, -4.37f, 11.55f, -4.24f)
|
||||
curveToRelative(0.0f, 0.0f, 5.37f, 0.13f, 7.37f, 3.13f)
|
||||
curveToRelative(0.0f, 0.0f, -9.0f, 3.6f, -12.0f, 9.3f)
|
||||
reflectiveCurveToRelative(-3.09f, 13.32f, -3.0f, 14.0f)
|
||||
close()
|
||||
moveTo(188.5f, 247.5f)
|
||||
reflectiveCurveToRelative(-8.0f, 2.0f, -10.0f, 8.0f)
|
||||
reflectiveCurveToRelative(-3.0f, 19.0f, 8.0f, 23.0f)
|
||||
reflectiveCurveToRelative(19.0f, -7.0f, 19.0f, -17.0f)
|
||||
reflectiveCurveTo(201.5f, 245.5f, 188.5f, 247.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(134.5f, 254.5f)
|
||||
reflectiveCurveToRelative(3.0f, -1.0f, 3.0f, 0.0f)
|
||||
reflectiveCurveToRelative(-6.0f, 5.0f, -7.0f, 10.0f)
|
||||
reflectiveCurveToRelative(0.0f, 8.0f, -2.0f, 8.0f)
|
||||
reflectiveCurveToRelative(-4.67f, 0.09f, -2.84f, -10.45f)
|
||||
arcTo(13.0f, 13.0f, 0.0f, false, true, 134.5f, 254.5f)
|
||||
close()
|
||||
moveTo(142.5f, 259.5f)
|
||||
arcToRelative(2.19f, 2.19f, 0.0f, false, true, 3.0f, 1.0f)
|
||||
quadToRelative(1.5f, 3.0f, -3.0f, 9.0f)
|
||||
curveToRelative(-3.0f, 4.0f, -3.0f, 14.0f, -2.0f, 19.0f)
|
||||
reflectiveCurveToRelative(2.0f, 10.0f, 2.0f, 13.0f)
|
||||
horizontalLineToRelative(-7.16f)
|
||||
reflectiveCurveTo(134.0f, 284.0f, 134.75f, 275.26f)
|
||||
reflectiveCurveToRelative(2.49f, -12.37f, 6.12f, -15.56f)
|
||||
close()
|
||||
}
|
||||
private val pathData6 =
|
||||
PathData {
|
||||
moveTo(189.5f, 248.5f)
|
||||
reflectiveCurveToRelative(9.0f, 0.0f, 9.0f, 10.0f)
|
||||
reflectiveCurveToRelative(-4.0f, 16.0f, -9.0f, 17.0f)
|
||||
reflectiveCurveToRelative(-7.0f, 0.77f, -7.0f, 0.77f)
|
||||
arcToRelative(12.77f, 12.77f, 0.0f, false, false, 8.0f, 3.07f)
|
||||
curveToRelative(5.0f, 0.16f, 15.0f, -4.84f, 15.0f, -17.84f)
|
||||
reflectiveCurveToRelative(-7.26f, -14.64f, -14.13f, -14.32f)
|
||||
reflectiveCurveTo(188.5f, 248.5f, 189.5f, 248.5f)
|
||||
close()
|
||||
moveTo(197.5f, 279.5f)
|
||||
reflectiveCurveToRelative(5.0f, 8.0f, 6.0f, 15.0f)
|
||||
reflectiveCurveToRelative(0.0f, 9.0f, 0.0f, 9.0f)
|
||||
horizontalLineToRelative(8.0f)
|
||||
reflectiveCurveTo(213.0f, 293.0f, 206.76f, 280.74f)
|
||||
curveToRelative(0.0f, 0.0f, -3.26f, -6.24f, -5.26f, -7.24f)
|
||||
arcToRelative(22.0f, 22.0f, 0.0f, false, true, -4.74f, 4.65f)
|
||||
close()
|
||||
moveTo(159.0f, 191.5f)
|
||||
horizontalLineToRelative(6.5f)
|
||||
verticalLineToRelative(10.0f)
|
||||
reflectiveCurveToRelative(1.0f, 20.0f, 0.89f, 29.33f)
|
||||
arcTo(182.26f, 182.26f, 0.0f, false, false, 168.0f, 252.75f)
|
||||
horizontalLineToRelative(0.0f)
|
||||
curveToRelative(-0.5f, 4.25f, -5.5f, 5.75f, -5.5f, 5.75f)
|
||||
verticalLineToRelative(-2.0f)
|
||||
curveToRelative(0.0f, -2.0f, 1.0f, -15.0f, 1.0f, -23.0f)
|
||||
reflectiveCurveToRelative(-4.0f, -40.0f, -4.0f, -40.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData8 =
|
||||
PathData {
|
||||
moveTo(201.86f, 273.17f)
|
||||
reflectiveCurveToRelative(9.64f, 10.33f, 9.64f, 28.33f)
|
||||
horizontalLineToRelative(-13.0f)
|
||||
reflectiveCurveToRelative(2.74f, -14.31f, -7.13f, -22.15f)
|
||||
arcTo(11.59f, 11.59f, 0.0f, false, false, 201.86f, 273.17f)
|
||||
close()
|
||||
moveTo(130.17f, 276.81f)
|
||||
arcToRelative(64.62f, 64.62f, 0.0f, false, true, -1.51f, 10.87f)
|
||||
curveToRelative(-1.2f, 5.22f, -3.35f, 11.0f, -7.16f, 13.82f)
|
||||
lineToRelative(13.79f, -0.59f)
|
||||
reflectiveCurveToRelative(-0.79f, -21.41f, -0.79f, -22.41f)
|
||||
close()
|
||||
moveTo(150.0f, 192.0f)
|
||||
reflectiveCurveToRelative(1.0f, 61.0f, 2.0f, 64.0f)
|
||||
curveToRelative(0.0f, 0.0f, 2.0f, 5.0f, 10.0f, 3.0f)
|
||||
curveToRelative(0.0f, 0.0f, 6.0f, -1.0f, 6.0f, -7.0f)
|
||||
curveToRelative(0.0f, 0.0f, -3.5f, -40.5f, -2.5f, -60.5f)
|
||||
curveTo(165.5f, 191.5f, 152.5f, 191.5f, 150.0f, 192.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData11 =
|
||||
PathData {
|
||||
moveTo(169.5f, 304.5f)
|
||||
reflectiveCurveToRelative(-7.0f, -21.0f, 0.0f, -42.0f)
|
||||
curveToRelative(0.0f, 0.0f, 3.39f, -7.79f, 10.2f, -10.39f)
|
||||
lineToRelative(0.8f, 0.39f)
|
||||
reflectiveCurveToRelative(-3.64f, 3.11f, -3.32f, 10.06f)
|
||||
reflectiveCurveToRelative(2.16f, 14.4f, 9.74f, 16.17f)
|
||||
arcToRelative(5.19f, 5.19f, 0.0f, false, false, -5.0f, 3.77f)
|
||||
curveToRelative(-1.44f, 4.0f, 0.38f, 11.28f, 1.47f, 13.64f)
|
||||
arcTo(13.05f, 13.05f, 0.0f, false, true, 184.5f, 301.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData18 =
|
||||
PathData {
|
||||
moveTo(134.5f, 290.5f)
|
||||
reflectiveCurveToRelative(-2.86f, -2.88f, -5.93f, -2.44f)
|
||||
moveTo(124.0f, 299.0f)
|
||||
reflectiveCurveToRelative(5.55f, -1.48f, 9.0f, 2.0f)
|
||||
moveTo(164.5f, 202.5f)
|
||||
reflectiveCurveToRelative(0.0f, 3.0f, -5.0f, 3.0f)
|
||||
reflectiveCurveToRelative(-8.56f, -1.0f, -9.28f, -1.5f)
|
||||
moveTo(165.0f, 214.5f)
|
||||
reflectiveCurveToRelative(-1.0f, 2.0f, -5.18f, 2.0f)
|
||||
arcToRelative(39.35f, 39.35f, 0.0f, false, true, -9.38f, -1.58f)
|
||||
moveTo(166.0f, 224.5f)
|
||||
reflectiveCurveToRelative(0.0f, 2.0f, -4.62f, 3.0f)
|
||||
reflectiveCurveToRelative(-10.38f, -1.0f, -10.38f, -1.0f)
|
||||
moveTo(166.0f, 233.5f)
|
||||
reflectiveCurveToRelative(0.0f, 2.0f, -3.21f, 3.0f)
|
||||
arcToRelative(16.53f, 16.53f, 0.0f, false, true, -11.79f, -1.0f)
|
||||
moveTo(167.0f, 244.5f)
|
||||
arcToRelative(7.0f, 7.0f, 0.0f, false, true, -5.17f, 4.0f)
|
||||
curveToRelative(-4.13f, 1.0f, -10.48f, -1.51f, -10.48f, -1.51f)
|
||||
moveTo(207.0f, 281.6f)
|
||||
reflectiveCurveToRelative(-4.0f, -2.4f, -12.0f, 2.4f)
|
||||
moveTo(211.42f, 296.16f)
|
||||
reflectiveCurveToRelative(-2.24f, -4.33f, -12.58f, 1.51f)
|
||||
}
|
||||
@@ -0,0 +1,184 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.Gray
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Body3FrontPreview() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
body3Front(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun body3Front(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
// body
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// body shades
|
||||
builder.addPath(pathData3, fill = Black, fillAlpha = 0.4f)
|
||||
builder.addPath(pathData11, fill = Black, fillAlpha = 0.2f)
|
||||
|
||||
// Gray neck and arms
|
||||
builder.addPath(pathData13, fill = Gray, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// chest
|
||||
// Joints
|
||||
builder.addPath(pathData24, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// Shades
|
||||
builder.addPath(pathData25, fill = Black, fillAlpha = 0.2f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(148.46f, 242.82f)
|
||||
reflectiveCurveToRelative(-35.0f, 5.68f, -33.0f, 23.68f)
|
||||
curveToRelative(0.0f, 0.0f, -1.0f, 7.0f, 9.0f, 20.0f)
|
||||
reflectiveCurveToRelative(13.0f, 20.0f, 13.0f, 20.0f)
|
||||
lineToRelative(51.0f, -2.0f)
|
||||
reflectiveCurveToRelative(1.0f, -7.0f, 9.0f, -18.0f)
|
||||
reflectiveCurveToRelative(11.0f, -13.0f, 11.0f, -24.0f)
|
||||
reflectiveCurveToRelative(-13.09f, -25.36f, -60.0f, -19.68f)
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(131.83f, 247.83f)
|
||||
reflectiveCurveToRelative(-6.33f, 4.67f, -7.33f, 12.67f)
|
||||
curveToRelative(0.0f, 0.0f, -3.0f, 7.0f, 4.0f, 14.0f)
|
||||
reflectiveCurveToRelative(13.0f, 18.0f, 14.0f, 25.0f)
|
||||
reflectiveCurveToRelative(-7.56f, 2.2f, -7.56f, 2.2f)
|
||||
reflectiveCurveToRelative(-5.72f, -8.89f, -11.08f, -16.0f)
|
||||
reflectiveCurveToRelative(-10.81f, -14.18f, -7.58f, -25.17f)
|
||||
curveTo(116.28f, 260.49f, 118.17f, 254.17f, 131.83f, 247.83f)
|
||||
close()
|
||||
}
|
||||
private val pathData11 =
|
||||
PathData {
|
||||
moveTo(193.33f, 245.17f)
|
||||
reflectiveCurveToRelative(-1.83f, 5.33f, 1.17f, 8.33f)
|
||||
reflectiveCurveToRelative(4.0f, 4.0f, 2.0f, 8.0f)
|
||||
arcToRelative(21.05f, 21.05f, 0.0f, false, false, -3.72f, 4.0f)
|
||||
curveToRelative(-1.28f, 2.0f, 0.72f, 4.0f, -1.28f, 9.0f)
|
||||
reflectiveCurveToRelative(-15.0f, 28.0f, -15.0f, 28.0f)
|
||||
lineToRelative(12.74f, -0.81f)
|
||||
reflectiveCurveToRelative(-0.74f, -2.19f, 8.26f, -15.19f)
|
||||
reflectiveCurveToRelative(13.0f, -17.33f, 10.0f, -29.17f)
|
||||
curveTo(207.5f, 257.33f, 204.17f, 249.83f, 193.33f, 245.17f)
|
||||
close()
|
||||
}
|
||||
private val pathData13 =
|
||||
PathData {
|
||||
moveTo(166.5f, 205.5f)
|
||||
horizontalLineToRelative(-14.0f)
|
||||
arcToRelative(12.13f, 12.13f, 0.0f, false, false, -5.0f, 1.0f)
|
||||
lineToRelative(1.0f, 38.0f)
|
||||
reflectiveCurveToRelative(0.0f, 11.0f, 10.0f, 11.0f)
|
||||
reflectiveCurveToRelative(11.0f, -9.0f, 11.0f, -9.0f)
|
||||
reflectiveCurveToRelative(-3.0f, -17.0f, -3.0f, -27.0f)
|
||||
close()
|
||||
moveTo(197.5f, 286.5f)
|
||||
reflectiveCurveToRelative(12.0f, 3.0f, 14.0f, 13.0f)
|
||||
reflectiveCurveToRelative(16.0f, 4.0f, 16.0f, 4.0f)
|
||||
reflectiveCurveToRelative(4.0f, -1.0f, -2.0f, -15.0f)
|
||||
arcTo(31.19f, 31.19f, 0.0f, false, false, 207.19f, 271.0f)
|
||||
arcToRelative(29.16f, 29.16f, 0.0f, false, true, -5.19f, 9.56f)
|
||||
arcTo(32.56f, 32.56f, 0.0f, false, false, 197.5f, 286.5f)
|
||||
close()
|
||||
moveTo(117.31f, 275.57f)
|
||||
reflectiveCurveTo(103.5f, 282.5f, 100.5f, 301.5f)
|
||||
reflectiveCurveToRelative(17.0f, 0.0f, 17.0f, 0.0f)
|
||||
reflectiveCurveToRelative(1.85f, -8.67f, 8.92f, -12.34f)
|
||||
curveTo(126.42f, 289.16f, 118.13f, 278.64f, 117.31f, 275.57f)
|
||||
close()
|
||||
}
|
||||
private val pathData24 =
|
||||
PathData {
|
||||
// Chest
|
||||
moveTo(116.5f, 272.83f)
|
||||
reflectiveCurveToRelative(-2.0f, -6.33f, 6.0f, -8.33f)
|
||||
reflectiveCurveToRelative(19.0f, -5.0f, 40.0f, -5.0f)
|
||||
reflectiveCurveToRelative(41.0f, 6.0f, 40.0f, 18.0f)
|
||||
arcToRelative(10.0f, 10.0f, 0.0f, false, true, -2.17f, 5.0f)
|
||||
|
||||
// Joints
|
||||
moveTo(166.0f, 224.5f)
|
||||
reflectiveCurveToRelative(-2.06f, 3.0f, -9.25f, 3.0f)
|
||||
reflectiveCurveToRelative(-9.25f, -1.5f, -9.25f, -1.5f)
|
||||
moveTo(166.0f, 212.5f)
|
||||
reflectiveCurveToRelative(-2.06f, 3.0f, -9.25f, 3.0f)
|
||||
reflectiveCurveToRelative(-9.25f, -1.5f, -9.25f, -1.5f)
|
||||
moveTo(167.0f, 238.5f)
|
||||
reflectiveCurveToRelative(-2.06f, 3.0f, -9.25f, 3.0f)
|
||||
reflectiveCurveToRelative(-9.25f, -1.5f, -9.25f, -1.5f)
|
||||
moveTo(219.5f, 279.5f)
|
||||
reflectiveCurveToRelative(-11.86f, 4.53f, -11.93f, 12.76f)
|
||||
moveTo(228.5f, 296.5f)
|
||||
arcToRelative(15.7f, 15.7f, 0.0f, false, false, -17.0f, 4.0f)
|
||||
moveTo(109.0f, 283.0f)
|
||||
reflectiveCurveToRelative(7.48f, 11.61f, 11.58f, 11.55f)
|
||||
moveTo(102.0f, 296.0f)
|
||||
reflectiveCurveToRelative(6.9f, 7.76f, 11.5f, 6.47f)
|
||||
}
|
||||
private val pathData25 =
|
||||
PathData {
|
||||
moveTo(159.17f, 205.5f)
|
||||
reflectiveCurveToRelative(-0.67f, 9.0f, 1.33f, 15.0f)
|
||||
reflectiveCurveToRelative(4.0f, 15.0f, 3.0f, 21.0f)
|
||||
reflectiveCurveToRelative(-1.0f, 12.74f, -3.0f, 13.87f)
|
||||
reflectiveCurveToRelative(8.0f, -0.87f, 9.0f, -8.87f)
|
||||
arcToRelative(168.89f, 168.89f, 0.0f, false, true, -3.0f, -28.92f)
|
||||
verticalLineTo(205.5f)
|
||||
close()
|
||||
moveTo(224.0f, 304.64f)
|
||||
lineToRelative(4.82f, -4.14f)
|
||||
reflectiveCurveToRelative(-2.14f, -16.5f, -11.0f, -23.0f)
|
||||
reflectiveCurveToRelative(-10.33f, -6.0f, -10.33f, -6.0f)
|
||||
lineToRelative(-3.27f, 6.0f)
|
||||
reflectiveCurveTo(222.47f, 286.77f, 224.0f, 304.64f)
|
||||
close()
|
||||
moveTo(119.5f, 283.5f)
|
||||
reflectiveCurveToRelative(-13.0f, 7.0f, -12.0f, 21.0f)
|
||||
reflectiveCurveToRelative(10.64f, -5.12f, 10.64f, -5.12f)
|
||||
reflectiveCurveToRelative(6.36f, -8.88f, 8.36f, -9.88f)
|
||||
lineToRelative(-5.5f, -7.0f)
|
||||
close()
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.Gray
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Body4RoundPreview() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
body4Round(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun body4Round(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
// Blue
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// Gray arms and legs
|
||||
builder.addPath(pathData7, fill = Gray, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// Joints
|
||||
builder.addPath(pathData26, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// Shades
|
||||
builder.addPath(pathData11, fill = Black, fillAlpha = 0.2f)
|
||||
|
||||
// Stronger Shades
|
||||
builder.addPath(pathData9, fill = Black, fillAlpha = 0.4f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(137.41f, 252.15f)
|
||||
reflectiveCurveToRelative(-0.91f, -4.65f, -11.91f, -3.65f)
|
||||
reflectiveCurveToRelative(-13.0f, 12.0f, -13.0f, 18.0f)
|
||||
reflectiveCurveToRelative(4.0f, 13.0f, 12.0f, 14.0f)
|
||||
curveToRelative(0.0f, 0.0f, 3.0f, 0.0f, 3.0f, -1.0f)
|
||||
curveToRelative(0.0f, 0.0f, -3.17f, -6.44f, 0.41f, -16.72f)
|
||||
curveTo(127.91f, 262.78f, 133.33f, 254.8f, 137.41f, 252.15f)
|
||||
close()
|
||||
moveTo(194.5f, 244.5f)
|
||||
reflectiveCurveToRelative(-19.0f, 1.0f, -19.0f, 17.0f)
|
||||
reflectiveCurveToRelative(11.0f, 21.0f, 17.0f, 21.0f)
|
||||
reflectiveCurveToRelative(20.0f, -2.0f, 19.0f, -20.0f)
|
||||
reflectiveCurveTo(194.5f, 244.5f, 194.5f, 244.5f)
|
||||
close()
|
||||
moveTo(181.5f, 247.5f)
|
||||
arcToRelative(39.32f, 39.32f, 0.0f, false, false, -24.0f, -4.0f)
|
||||
curveToRelative(-14.0f, 2.0f, -28.0f, 14.0f, -30.0f, 19.0f)
|
||||
reflectiveCurveToRelative(-3.0f, 9.0f, 0.0f, 17.0f)
|
||||
reflectiveCurveToRelative(3.0f, 20.0f, 1.0f, 22.0f)
|
||||
horizontalLineToRelative(68.0f)
|
||||
reflectiveCurveToRelative(0.68f, -18.41f, -0.66f, -19.2f)
|
||||
curveToRelative(0.0f, 0.0f, -21.34f, 1.2f, -20.34f, -19.8f)
|
||||
arcToRelative(13.88f, 13.88f, 0.0f, false, true, 6.67f, -13.88f)
|
||||
close()
|
||||
}
|
||||
private val pathData7 =
|
||||
PathData {
|
||||
moveTo(195.5f, 282.5f)
|
||||
reflectiveCurveToRelative(7.0f, 11.0f, 6.0f, 19.0f)
|
||||
horizontalLineToRelative(12.0f)
|
||||
reflectiveCurveToRelative(2.5f, -15.0f, -7.25f, -23.5f)
|
||||
curveTo(206.25f, 278.0f, 203.5f, 282.5f, 195.5f, 282.5f)
|
||||
close()
|
||||
moveTo(119.36f, 278.79f)
|
||||
reflectiveCurveToRelative(-3.86f, 5.71f, -4.86f, 10.71f)
|
||||
reflectiveCurveToRelative(1.0f, 12.0f, 1.0f, 12.0f)
|
||||
horizontalLineToRelative(10.0f)
|
||||
reflectiveCurveToRelative(-1.0f, -7.0f, 1.0f, -12.0f)
|
||||
reflectiveCurveToRelative(2.48f, -4.68f, 2.48f, -4.68f)
|
||||
lineToRelative(-1.48f, -5.32f)
|
||||
reflectiveCurveToRelative(-1.27f, 1.4f, -4.63f, 0.7f)
|
||||
reflectiveCurveToRelative(-3.87f, -1.4f, -3.87f, -1.4f)
|
||||
moveTo(147.0f, 200.0f)
|
||||
reflectiveCurveToRelative(-1.0f, 42.0f, 2.0f, 50.0f)
|
||||
curveToRelative(0.0f, 0.0f, 12.0f, 9.0f, 20.0f, -2.0f)
|
||||
curveToRelative(0.0f, 0.0f, -3.5f, -26.5f, -3.5f, -48.5f)
|
||||
arcTo(77.11f, 77.11f, 0.0f, false, false, 147.0f, 200.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData9 =
|
||||
PathData {
|
||||
moveTo(136.5f, 260.5f)
|
||||
arcToRelative(3.1f, 3.1f, 0.0f, false, false, -2.0f, 1.0f)
|
||||
curveToRelative(-1.0f, 1.0f, -3.0f, 5.0f, 0.0f, 5.0f)
|
||||
reflectiveCurveToRelative(4.0f, -1.0f, 4.0f, -3.0f)
|
||||
reflectiveCurveTo(137.5f, 260.5f, 136.5f, 260.5f)
|
||||
close()
|
||||
moveTo(133.5f, 270.5f)
|
||||
arcToRelative(4.33f, 4.33f, 0.0f, false, false, -2.0f, 4.0f)
|
||||
curveToRelative(0.0f, 3.0f, 1.0f, 6.0f, 2.0f, 12.0f)
|
||||
reflectiveCurveToRelative(0.67f, 14.0f, -1.67f, 15.0f)
|
||||
reflectiveCurveToRelative(6.67f, 0.0f, 6.67f, 0.0f)
|
||||
reflectiveCurveToRelative(4.0f, -16.0f, 0.0f, -25.0f)
|
||||
curveTo(138.5f, 276.5f, 136.5f, 269.5f, 133.5f, 270.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData11 =
|
||||
PathData {
|
||||
moveTo(195.5f, 245.5f)
|
||||
reflectiveCurveToRelative(8.0f, 5.0f, 6.0f, 18.0f)
|
||||
reflectiveCurveToRelative(-9.78f, 17.77f, -14.39f, 17.89f)
|
||||
curveToRelative(0.0f, 0.0f, 21.41f, 6.8f, 24.4f, -15.54f)
|
||||
curveTo(211.51f, 265.84f, 212.5f, 245.5f, 195.5f, 245.5f)
|
||||
close()
|
||||
moveTo(161.5f, 253.5f)
|
||||
reflectiveCurveToRelative(9.0f, 2.0f, 11.0f, 10.0f)
|
||||
reflectiveCurveToRelative(2.0f, 28.0f, 2.0f, 28.0f)
|
||||
verticalLineToRelative(12.0f)
|
||||
lineToRelative(22.0f, 1.0f)
|
||||
verticalLineToRelative(-19.0f)
|
||||
arcToRelative(4.38f, 4.38f, 0.0f, false, false, -1.0f, -3.0f)
|
||||
reflectiveCurveToRelative(-22.0f, -1.0f, -20.0f, -21.0f)
|
||||
curveToRelative(0.0f, 0.0f, 0.0f, -9.0f, 7.0f, -13.0f)
|
||||
arcToRelative(35.0f, 35.0f, 0.0f, false, false, -14.06f, -5.07f)
|
||||
lineToRelative(0.06f, 5.07f)
|
||||
arcTo(10.39f, 10.39f, 0.0f, false, true, 161.5f, 253.5f)
|
||||
close()
|
||||
moveTo(118.5f, 252.5f)
|
||||
reflectiveCurveToRelative(5.0f, -3.0f, 3.0f, 1.0f)
|
||||
reflectiveCurveToRelative(-5.0f, 5.0f, -6.0f, 11.0f)
|
||||
reflectiveCurveToRelative(4.0f, 11.0f, 4.0f, 11.0f)
|
||||
reflectiveCurveToRelative(2.0f, 2.0f, -1.0f, 2.0f)
|
||||
reflectiveCurveToRelative(-7.7f, -8.0f, -5.35f, -17.0f)
|
||||
arcTo(16.51f, 16.51f, 0.0f, false, true, 118.5f, 252.5f)
|
||||
close()
|
||||
moveTo(125.0f, 280.39f)
|
||||
reflectiveCurveToRelative(-4.48f, 3.61f, -3.22f, 21.11f)
|
||||
horizontalLineTo(125.0f)
|
||||
reflectiveCurveToRelative(-1.0f, -11.5f, 4.0f, -16.5f)
|
||||
lineToRelative(-1.58f, -5.08f)
|
||||
close()
|
||||
moveTo(202.0f, 281.28f)
|
||||
reflectiveCurveTo(209.0f, 293.0f, 209.0f, 302.0f)
|
||||
reflectiveCurveToRelative(4.79f, -1.37f, 4.79f, -1.37f)
|
||||
reflectiveCurveTo(215.0f, 286.0f, 206.0f, 278.0f)
|
||||
arcTo(6.19f, 6.19f, 0.0f, false, true, 202.0f, 281.28f)
|
||||
close()
|
||||
moveTo(158.67f, 199.17f)
|
||||
reflectiveCurveToRelative(0.83f, 11.33f, 1.83f, 18.33f)
|
||||
reflectiveCurveToRelative(2.0f, 15.0f, 2.0f, 20.0f)
|
||||
reflectiveCurveToRelative(0.33f, 13.93f, -1.33f, 16.0f)
|
||||
curveToRelative(0.0f, 0.0f, 4.33f, 0.0f, 7.33f, -6.0f)
|
||||
curveToRelative(0.0f, 0.0f, -3.0f, -26.0f, -3.0f, -33.0f)
|
||||
verticalLineToRelative(-15.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData26 =
|
||||
PathData {
|
||||
moveTo(211.55f, 285.39f)
|
||||
reflectiveCurveToRelative(0.73f, 7.21f, -11.66f, 6.16f)
|
||||
moveTo(141.34f, 249.41f)
|
||||
reflectiveCurveToRelative(3.16f, 11.09f, 16.16f, 11.09f)
|
||||
reflectiveCurveToRelative(19.07f, -10.0f, 19.0f, -15.0f)
|
||||
moveTo(144.5f, 301.5f)
|
||||
reflectiveCurveToRelative(2.0f, -12.0f, 1.0f, -18.0f)
|
||||
lineToRelative(23.0f, -1.0f)
|
||||
reflectiveCurveToRelative(1.0f, 17.0f, 0.0f, 19.0f)
|
||||
moveTo(114.92f, 286.75f)
|
||||
reflectiveCurveToRelative(3.58f, 4.75f, 11.58f, 2.75f)
|
||||
moveTo(166.0f, 211.5f)
|
||||
reflectiveCurveToRelative(-1.08f, 3.0f, -8.68f, 3.0f)
|
||||
reflectiveCurveToRelative(-10.48f, -1.37f, -10.48f, -1.37f)
|
||||
moveTo(166.0f, 223.5f)
|
||||
reflectiveCurveToRelative(-1.08f, 3.0f, -8.68f, 3.0f)
|
||||
reflectiveCurveToRelative(-10.48f, -1.37f, -10.48f, -1.37f)
|
||||
moveTo(147.5f, 238.5f)
|
||||
arcToRelative(15.39f, 15.39f, 0.0f, false, false, 8.0f, 2.0f)
|
||||
curveToRelative(5.0f, 0.0f, 11.32f, -1.58f, 12.16f, -4.29f)
|
||||
}
|
||||
@@ -0,0 +1,154 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.Gray
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Body5NeckPreview() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
body5Neck(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun body5Neck(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
// Body
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// Neck circle
|
||||
builder.addPath(pathData2, fill = Black, stroke = Black, fillAlpha = 0.2f, strokeLineWidth = 1.0f)
|
||||
|
||||
// Neck
|
||||
builder.addPath(pathData9, fill = Gray, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// Shades
|
||||
builder.addPath(pathData4, fill = Black, fillAlpha = 0.2f)
|
||||
|
||||
// Joints
|
||||
builder.addPath(pathData11, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// Body shade
|
||||
builder.addPath(pathData17, fill = Black, fillAlpha = 0.2f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(145.5f, 301.5f)
|
||||
reflectiveCurveToRelative(-1.0f, -18.0f, -1.0f, -23.0f)
|
||||
curveToRelative(0.0f, 0.0f, 0.37f, -3.41f, 15.68f, -2.2f)
|
||||
reflectiveCurveToRelative(10.15f, -0.26f, 10.15f, -0.26f)
|
||||
reflectiveCurveToRelative(5.17f, -0.54f, 5.17f, 2.46f)
|
||||
reflectiveCurveToRelative(0.0f, 19.0f, 3.0f, 23.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(159.5f, 286.5f)
|
||||
reflectiveCurveToRelative(16.0f, -1.0f, 16.0f, -8.0f)
|
||||
curveToRelative(0.0f, 0.0f, 4.0f, -3.0f, -14.0f, -2.0f)
|
||||
horizontalLineToRelative(-12.0f)
|
||||
reflectiveCurveToRelative(-5.0f, 0.0f, -5.0f, 2.0f)
|
||||
reflectiveCurveTo(143.5f, 285.5f, 159.5f, 286.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(167.5f, 282.5f)
|
||||
lineToRelative(4.79f, 0.67f)
|
||||
lineToRelative(0.55f, 18.33f)
|
||||
horizontalLineToRelative(5.66f)
|
||||
reflectiveCurveToRelative(-2.64f, -3.0f, -2.82f, -15.0f)
|
||||
lineToRelative(-0.18f, -8.0f)
|
||||
reflectiveCurveToRelative(-1.0f, -3.0f, -4.0f, -2.5f)
|
||||
verticalLineToRelative(3.5f)
|
||||
arcTo(6.93f, 6.93f, 0.0f, false, true, 167.5f, 282.5f)
|
||||
close()
|
||||
moveTo(161.5f, 200.5f)
|
||||
reflectiveCurveToRelative(0.0f, 20.0f, 1.0f, 27.0f)
|
||||
reflectiveCurveToRelative(3.0f, 24.0f, 4.0f, 35.0f)
|
||||
arcToRelative(166.5f, 166.5f, 0.0f, false, true, 0.61f, 20.0f)
|
||||
reflectiveCurveToRelative(4.39f, -2.0f, 4.39f, -3.0f)
|
||||
reflectiveCurveToRelative(-1.38f, -41.67f, -1.69f, -48.33f)
|
||||
reflectiveCurveToRelative(-0.31f, -31.67f, -0.31f, -31.67f)
|
||||
horizontalLineToRelative(-8.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData9 =
|
||||
PathData {
|
||||
moveTo(146.0f, 200.0f)
|
||||
reflectiveCurveToRelative(3.0f, 68.0f, 2.0f, 79.0f)
|
||||
curveToRelative(0.0f, 0.0f, 2.0f, 6.0f, 12.0f, 5.0f)
|
||||
reflectiveCurveToRelative(11.5f, -4.5f, 11.5f, -4.5f)
|
||||
reflectiveCurveToRelative(-3.0f, -75.0f, -2.0f, -80.0f)
|
||||
curveTo(169.5f, 199.5f, 151.5f, 199.5f, 146.0f, 200.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData11 =
|
||||
PathData {
|
||||
moveTo(146.43f, 210.28f)
|
||||
arcToRelative(31.28f, 31.28f, 0.0f, false, false, 13.07f, 3.22f)
|
||||
curveToRelative(7.0f, 0.0f, 9.83f, -3.22f, 9.83f, -3.22f)
|
||||
moveTo(147.43f, 222.28f)
|
||||
arcToRelative(31.28f, 31.28f, 0.0f, false, false, 13.07f, 3.22f)
|
||||
curveToRelative(7.0f, 0.0f, 9.83f, -3.22f, 9.83f, -3.22f)
|
||||
moveTo(147.43f, 234.28f)
|
||||
arcToRelative(31.28f, 31.28f, 0.0f, false, false, 13.07f, 3.22f)
|
||||
curveToRelative(7.0f, 0.0f, 9.83f, -3.22f, 9.83f, -3.22f)
|
||||
moveTo(147.43f, 246.28f)
|
||||
arcToRelative(31.28f, 31.28f, 0.0f, false, false, 13.07f, 3.22f)
|
||||
curveToRelative(7.0f, 0.0f, 9.83f, -3.22f, 9.83f, -3.22f)
|
||||
moveTo(148.43f, 259.28f)
|
||||
arcToRelative(31.28f, 31.28f, 0.0f, false, false, 13.07f, 3.22f)
|
||||
curveToRelative(7.0f, 0.0f, 9.83f, -3.22f, 9.83f, -3.22f)
|
||||
moveTo(148.43f, 271.28f)
|
||||
arcToRelative(31.28f, 31.28f, 0.0f, false, false, 13.07f, 3.22f)
|
||||
curveToRelative(7.0f, 0.0f, 9.83f, -3.22f, 9.83f, -3.22f)
|
||||
}
|
||||
private val pathData17 =
|
||||
PathData {
|
||||
moveTo(144.5f, 281.5f)
|
||||
lineToRelative(2.0f, 21.0f)
|
||||
lineToRelative(33.0f, -1.0f)
|
||||
reflectiveCurveToRelative(-4.0f, -6.0f, -4.0f, -23.0f)
|
||||
curveToRelative(0.0f, 0.0f, -1.0f, 8.0f, -15.0f, 8.0f)
|
||||
reflectiveCurveTo(145.5f, 282.5f, 144.5f, 281.5f)
|
||||
close()
|
||||
}
|
||||
+184
@@ -0,0 +1,184 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.Gray
|
||||
import com.vitorpamplona.amethyst.commons.Yellow
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Body6IronManPreview() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
body6IronMan(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun body6IronMan(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// Body shades
|
||||
builder.addPath(pathData5, fill = Black, fillAlpha = 0.2f)
|
||||
builder.addPath(pathData7, fill = Black, fillAlpha = 0.4f)
|
||||
|
||||
// Iron man circle
|
||||
builder.addPath(pathData12, fill = Black, stroke = Black, fillAlpha = 0.2f, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData14, fill = Yellow, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// Gray neck
|
||||
builder.addPath(pathData19, fill = Gray, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// Neck Shades
|
||||
builder.addPath(pathData20, fill = Black, fillAlpha = 0.2f)
|
||||
|
||||
// Joints
|
||||
builder.addPath(pathData21, stroke = Black, strokeLineWidth = 1.0f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(158.5f, 234.5f)
|
||||
reflectiveCurveToRelative(-59.0f, 1.0f, -84.0f, 42.0f)
|
||||
reflectiveCurveToRelative(23.0f, 42.0f, 23.0f, 42.0f)
|
||||
lineToRelative(132.0f, -13.0f)
|
||||
reflectiveCurveToRelative(-5.0f, -16.0f, 5.0f, -27.0f)
|
||||
reflectiveCurveToRelative(19.0f, -6.0f, 19.0f, -6.0f)
|
||||
reflectiveCurveTo(219.5f, 231.5f, 158.5f, 234.5f)
|
||||
close()
|
||||
moveTo(277.5f, 301.5f)
|
||||
curveToRelative(-0.33f, -7.3f, -4.07f, -15.56f, -12.0f, -25.0f)
|
||||
curveToRelative(0.0f, 0.0f, -11.5f, -7.5f, -25.28f, -2.69f)
|
||||
curveToRelative(-7.72f, 4.69f, -13.72f, 11.69f, -11.72f, 28.69f)
|
||||
close()
|
||||
moveTo(74.5f, 276.5f)
|
||||
arcToRelative(29.05f, 29.05f, 0.0f, false, false, -26.0f, 16.0f)
|
||||
curveToRelative(-9.0f, 17.0f, 10.0f, 17.0f, 10.0f, 17.0f)
|
||||
lineToRelative(8.79f, -9.5f)
|
||||
reflectiveCurveTo(64.5f, 293.5f, 74.5f, 276.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData5 =
|
||||
PathData {
|
||||
moveTo(215.0f, 245.0f)
|
||||
reflectiveCurveToRelative(6.5f, 1.46f, -0.5f, 16.46f)
|
||||
reflectiveCurveToRelative(-13.0f, 26.0f, -10.0f, 41.0f)
|
||||
reflectiveCurveToRelative(24.32f, 0.0f, 24.32f, 0.0f)
|
||||
reflectiveCurveToRelative(-3.6f, -15.79f, 7.0f, -25.4f)
|
||||
curveToRelative(12.91f, -11.65f, 19.71f, -3.56f, 16.64f, -5.6f)
|
||||
curveTo(252.5f, 271.5f, 235.49f, 253.58f, 215.0f, 245.0f)
|
||||
close()
|
||||
moveTo(261.5f, 304.5f)
|
||||
reflectiveCurveToRelative(4.0f, -7.0f, 3.0f, -15.0f)
|
||||
reflectiveCurveToRelative(-8.36f, -16.57f, -8.36f, -16.57f)
|
||||
arcToRelative(25.86f, 25.86f, 0.0f, false, true, 18.77f, 16.29f)
|
||||
arcToRelative(27.17f, 27.17f, 0.0f, false, true, 2.58f, 15.29f)
|
||||
close()
|
||||
}
|
||||
private val pathData7 =
|
||||
PathData {
|
||||
moveTo(62.5f, 280.5f)
|
||||
reflectiveCurveToRelative(5.0f, 0.0f, 0.0f, 9.0f)
|
||||
reflectiveCurveToRelative(-8.0f, 11.0f, -9.0f, 14.0f)
|
||||
reflectiveCurveToRelative(-6.5f, -2.33f, -6.5f, -2.33f)
|
||||
reflectiveCurveToRelative(-3.23f, -4.81f, 5.63f, -14.74f)
|
||||
curveTo(52.63f, 286.43f, 57.5f, 280.5f, 62.5f, 280.5f)
|
||||
close()
|
||||
moveTo(77.5f, 301.5f)
|
||||
reflectiveCurveToRelative(0.0f, -19.0f, 13.0f, -30.0f)
|
||||
reflectiveCurveToRelative(16.0f, -5.0f, 15.0f, -2.0f)
|
||||
reflectiveCurveToRelative(-14.0f, 24.0f, -14.0f, 32.0f)
|
||||
reflectiveCurveTo(77.5f, 301.5f, 77.5f, 301.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData12 =
|
||||
PathData {
|
||||
moveTo(103.5f, 303.5f)
|
||||
reflectiveCurveToRelative(2.0f, -30.0f, 41.0f, -29.0f)
|
||||
reflectiveCurveToRelative(41.0f, 29.0f, 41.0f, 29.0f)
|
||||
horizontalLineTo(174.25f)
|
||||
curveToRelative(-0.75f, -2.0f, -12.12f, -18.58f, -30.75f, -18.0f)
|
||||
curveToRelative(-15.88f, -0.37f, -26.93f, 4.64f, -30.5f, 18.0f)
|
||||
close()
|
||||
|
||||
moveTo(113.5f, 301.5f)
|
||||
reflectiveCurveToRelative(3.0f, -16.0f, 28.0f, -16.0f)
|
||||
reflectiveCurveToRelative(32.0f, 17.0f, 32.0f, 17.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData14 =
|
||||
PathData {
|
||||
moveTo(118.5f, 300.5f)
|
||||
reflectiveCurveToRelative(9.0f, -12.0f, 24.0f, -11.0f)
|
||||
reflectiveCurveToRelative(24.0f, 12.0f, 24.0f, 12.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData19 =
|
||||
PathData {
|
||||
moveTo(147.0f, 200.0f)
|
||||
reflectiveCurveToRelative(0.0f, 44.0f, 1.0f, 45.0f)
|
||||
arcToRelative(14.41f, 14.41f, 0.0f, false, false, 14.0f, 4.0f)
|
||||
curveToRelative(8.0f, -2.0f, 7.0f, -7.0f, 7.0f, -7.0f)
|
||||
arcToRelative(144.32f, 144.32f, 0.0f, false, true, -2.5f, -24.5f)
|
||||
verticalLineToRelative(-19.0f)
|
||||
reflectiveCurveTo(148.5f, 198.5f, 147.0f, 200.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData20 =
|
||||
PathData {
|
||||
moveTo(159.5f, 202.5f)
|
||||
reflectiveCurveToRelative(1.0f, 17.0f, 2.0f, 23.0f)
|
||||
reflectiveCurveToRelative(2.0f, 22.83f, -2.0f, 23.91f)
|
||||
curveToRelative(0.0f, 0.0f, 9.62f, -0.9f, 9.31f, -8.41f)
|
||||
reflectiveCurveToRelative(-2.43f, -19.17f, -2.37f, -30.34f)
|
||||
reflectiveCurveToRelative(0.06f, -12.17f, 0.06f, -12.17f)
|
||||
lineToRelative(-7.0f, 0.11f)
|
||||
close()
|
||||
}
|
||||
private val pathData21 =
|
||||
PathData {
|
||||
moveTo(147.0f, 233.5f)
|
||||
reflectiveCurveToRelative(1.08f, 3.0f, 5.4f, 3.0f)
|
||||
reflectiveCurveToRelative(12.83f, -1.33f, 15.0f, -4.66f)
|
||||
moveTo(147.5f, 219.32f)
|
||||
reflectiveCurveToRelative(1.0f, 2.68f, 5.0f, 2.68f)
|
||||
reflectiveCurveToRelative(11.89f, -1.18f, 13.94f, -4.16f)
|
||||
moveTo(147.5f, 208.07f)
|
||||
reflectiveCurveToRelative(1.0f, 1.93f, 5.0f, 1.93f)
|
||||
reflectiveCurveToRelative(11.89f, -0.85f, 13.94f, -3.0f)
|
||||
}
|
||||
+172
@@ -0,0 +1,172 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.Gray
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Body7NeckThinnerPreview() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
body7NeckThinner(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun body7NeckThinner(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
// Body
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// Darker neck
|
||||
builder.addPath(pathData6, fill = Black, stroke = Black, fillAlpha = 0.4f, strokeLineWidth = 1.0f)
|
||||
|
||||
// Body shades
|
||||
builder.addPath(pathData9, fill = Black, fillAlpha = 0.4f)
|
||||
|
||||
// gray neck
|
||||
builder.addPath(pathData12, fill = Gray, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// neck shades
|
||||
builder.addPath(pathData13, fill = Black, fillAlpha = 0.2f)
|
||||
|
||||
// Joints
|
||||
builder.addPath(pathData14, stroke = Black, strokeLineWidth = 1.0f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(125.5f, 286.5f)
|
||||
reflectiveCurveToRelative(-5.0f, 5.0f, -4.0f, 15.0f)
|
||||
lineToRelative(83.0f, 1.0f)
|
||||
reflectiveCurveToRelative(-2.0f, -19.0f, -13.0f, -22.0f)
|
||||
reflectiveCurveToRelative(-16.0f, -1.95f, -16.0f, -1.95f)
|
||||
horizontalLineToRelative(-0.39f)
|
||||
lineToRelative(0.39f, 3.95f)
|
||||
reflectiveCurveToRelative(-4.64f, 7.17f, -15.82f, 7.08f)
|
||||
reflectiveCurveToRelative(-13.57f, -2.76f, -15.87f, -5.92f)
|
||||
curveToRelative(0.0f, 0.0f, -1.3f, -4.45f, -0.8f, -6.81f)
|
||||
curveTo(143.0f, 276.85f, 135.5f, 277.5f, 125.5f, 286.5f)
|
||||
close()
|
||||
moveTo(143.5f, 282.5f)
|
||||
reflectiveCurveToRelative(0.0f, 6.0f, 14.0f, 7.0f)
|
||||
reflectiveCurveToRelative(18.0f, -7.0f, 18.0f, -7.0f)
|
||||
lineToRelative(-1.0f, -10.0f)
|
||||
reflectiveCurveToRelative(-0.12f, -5.0f, -15.56f, -5.0f)
|
||||
reflectiveCurveToRelative(-14.44f, 4.0f, -15.44f, 6.0f)
|
||||
arcToRelative(10.07f, 10.07f, 0.0f, false, false, -0.43f, 4.0f)
|
||||
curveTo(143.14f, 280.0f, 143.5f, 282.5f, 143.5f, 282.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData6 =
|
||||
PathData {
|
||||
moveTo(143.5f, 272.5f)
|
||||
arcToRelative(4.87f, 4.87f, 0.0f, false, false, -0.19f, 1.41f)
|
||||
curveToRelative(0.0f, 2.53f, 1.69f, 7.59f, 15.19f, 7.59f)
|
||||
curveToRelative(18.0f, 0.0f, 16.0f, -9.0f, 16.0f, -9.0f)
|
||||
reflectiveCurveToRelative(-1.0f, -5.0f, -13.0f, -5.0f)
|
||||
reflectiveCurveTo(145.5f, 268.5f, 143.5f, 272.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData9 =
|
||||
PathData {
|
||||
moveTo(134.5f, 281.5f)
|
||||
reflectiveCurveToRelative(5.0f, -1.0f, 3.0f, 2.0f)
|
||||
reflectiveCurveToRelative(-7.0f, 4.0f, -9.0f, 9.0f)
|
||||
arcToRelative(17.55f, 17.55f, 0.0f, false, false, -1.2f, 9.07f)
|
||||
lineToRelative(-5.8f, -0.07f)
|
||||
reflectiveCurveTo(120.0f, 288.59f, 129.74f, 283.0f)
|
||||
arcTo(12.58f, 12.58f, 0.0f, false, true, 134.5f, 281.5f)
|
||||
close()
|
||||
moveTo(168.21f, 288.58f)
|
||||
reflectiveCurveToRelative(15.29f, -5.08f, 20.29f, -1.08f)
|
||||
reflectiveCurveToRelative(5.0f, 12.0f, 5.0f, 14.0f)
|
||||
reflectiveCurveToRelative(11.0f, 0.0f, 11.0f, 0.0f)
|
||||
reflectiveCurveToRelative(-2.7f, -17.32f, -10.85f, -20.16f)
|
||||
arcToRelative(50.64f, 50.64f, 0.0f, false, false, -18.15f, -2.84f)
|
||||
horizontalLineToRelative(0.0f)
|
||||
verticalLineToRelative(4.0f)
|
||||
reflectiveCurveTo(169.92f, 288.67f, 168.21f, 288.58f)
|
||||
close()
|
||||
moveTo(170.33f, 279.34f)
|
||||
verticalLineToRelative(7.9f)
|
||||
reflectiveCurveToRelative(5.17f, -3.74f, 5.17f, -4.74f)
|
||||
reflectiveCurveToRelative(-0.94f, -9.36f, -0.94f, -9.36f)
|
||||
reflectiveCurveTo(175.16f, 277.17f, 170.33f, 279.34f)
|
||||
close()
|
||||
}
|
||||
private val pathData12 =
|
||||
PathData {
|
||||
moveTo(143.0f, 201.0f)
|
||||
reflectiveCurveToRelative(8.0f, 21.0f, 7.0f, 38.0f)
|
||||
reflectiveCurveToRelative(-2.0f, 35.0f, -2.0f, 35.0f)
|
||||
reflectiveCurveToRelative(0.5f, 3.5f, 10.5f, 3.5f)
|
||||
reflectiveCurveToRelative(13.0f, -5.0f, 13.0f, -5.0f)
|
||||
reflectiveCurveToRelative(0.0f, -37.0f, -3.0f, -53.0f)
|
||||
reflectiveCurveToRelative(-8.0f, -22.0f, -8.0f, -22.0f)
|
||||
reflectiveCurveTo(147.5f, 200.5f, 143.0f, 201.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData13 =
|
||||
PathData {
|
||||
moveTo(153.89f, 199.0f)
|
||||
reflectiveCurveToRelative(6.61f, 15.53f, 8.61f, 28.53f)
|
||||
reflectiveCurveToRelative(4.0f, 24.0f, 4.0f, 33.0f)
|
||||
verticalLineToRelative(15.63f)
|
||||
reflectiveCurveToRelative(5.0f, -1.63f, 5.0f, -3.63f)
|
||||
reflectiveCurveToRelative(1.23f, -37.53f, -5.39f, -62.77f)
|
||||
curveToRelative(0.0f, 0.0f, -3.61f, -10.23f, -5.61f, -12.23f)
|
||||
close()
|
||||
}
|
||||
private val pathData14 =
|
||||
PathData {
|
||||
moveTo(150.0f, 226.5f)
|
||||
reflectiveCurveToRelative(14.89f, 2.35f, 18.24f, -8.32f)
|
||||
moveTo(150.5f, 237.5f)
|
||||
reflectiveCurveToRelative(1.0f, 4.0f, 8.0f, 3.0f)
|
||||
reflectiveCurveToRelative(11.0f, -4.0f, 12.0f, -6.0f)
|
||||
moveTo(149.63f, 250.63f)
|
||||
reflectiveCurveToRelative(0.88f, 3.88f, 6.88f, 3.88f)
|
||||
reflectiveCurveTo(170.0f, 251.0f, 171.24f, 248.74f)
|
||||
moveTo(147.5f, 213.5f)
|
||||
reflectiveCurveToRelative(1.0f, 2.0f, 6.0f, 2.0f)
|
||||
reflectiveCurveToRelative(12.85f, -4.58f, 12.43f, -6.29f)
|
||||
moveTo(149.0f, 262.5f)
|
||||
reflectiveCurveToRelative(0.0f, 5.0f, 8.18f, 4.0f)
|
||||
reflectiveCurveToRelative(12.77f, -3.62f, 14.06f, -6.31f)
|
||||
}
|
||||
@@ -0,0 +1,225 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.Gray
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Body8BigPreview() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
body8Big(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun body8Big(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
// body
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// neck base
|
||||
builder.addPath(pathData4, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData7, fill = Black, stroke = Black, fillAlpha = 0.4f, strokeLineWidth = 1.0f)
|
||||
|
||||
// Body shades
|
||||
builder.addPath(pathData5, fill = Black, fillAlpha = 0.4f)
|
||||
|
||||
// Neck and arms
|
||||
builder.addPath(pathData32, fill = Gray, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// Joints
|
||||
builder.addPath(pathData33, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// Shades
|
||||
builder.addPath(pathData20, fill = Black, fillAlpha = 0.2f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(95.13f, 227.69f)
|
||||
reflectiveCurveTo(74.5f, 232.5f, 73.5f, 248.5f)
|
||||
curveToRelative(-0.44f, 7.05f, 4.25f, 12.09f, 9.63f, 15.53f)
|
||||
arcToRelative(52.45f, 52.45f, 0.0f, false, false, 14.79f, 6.13f)
|
||||
reflectiveCurveToRelative(-3.16f, -18.66f, -2.79f, -30.66f)
|
||||
reflectiveCurveTo(95.13f, 227.69f, 95.13f, 227.69f)
|
||||
close()
|
||||
moveTo(97.5f, 301.5f)
|
||||
reflectiveCurveToRelative(2.0f, -21.0f, 0.0f, -35.0f)
|
||||
reflectiveCurveToRelative(-2.0f, -29.0f, -2.0f, -36.0f)
|
||||
reflectiveCurveToRelative(14.0f, -26.11f, 46.0f, -28.05f)
|
||||
reflectiveCurveToRelative(59.0f, -1.95f, 63.0f, 18.05f)
|
||||
reflectiveCurveToRelative(3.0f, 30.0f, 3.0f, 30.0f)
|
||||
reflectiveCurveToRelative(2.0f, 53.0f, 0.0f, 55.0f)
|
||||
reflectiveCurveTo(97.5f, 301.5f, 97.5f, 301.5f)
|
||||
close()
|
||||
moveTo(204.5f, 220.5f)
|
||||
reflectiveCurveToRelative(28.0f, 1.0f, 29.0f, 23.0f)
|
||||
reflectiveCurveTo(216.6f, 267.0f, 208.0f, 268.24f)
|
||||
curveTo(208.0f, 268.24f, 209.5f, 233.5f, 204.5f, 220.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(95.5f, 230.5f)
|
||||
reflectiveCurveToRelative(-7.0f, 20.0f, 40.0f, 23.0f)
|
||||
reflectiveCurveToRelative(69.0f, -15.69f, 69.51f, -30.35f)
|
||||
reflectiveCurveToRelative(-12.33f, -22.39f, -48.92f, -21.52f)
|
||||
reflectiveCurveTo(100.5f, 212.5f, 95.5f, 230.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData5 =
|
||||
PathData {
|
||||
moveTo(87.5f, 232.5f)
|
||||
reflectiveCurveToRelative(-9.0f, 9.0f, -9.0f, 14.0f)
|
||||
reflectiveCurveToRelative(6.0f, 16.0f, 2.0f, 15.0f)
|
||||
reflectiveCurveToRelative(-7.57f, -12.0f, -5.79f, -18.48f)
|
||||
reflectiveCurveTo(86.5f, 229.5f, 87.5f, 232.5f)
|
||||
close()
|
||||
moveTo(104.5f, 263.5f)
|
||||
arcToRelative(4.45f, 4.45f, 0.0f, false, false, 2.0f, 5.0f)
|
||||
curveToRelative(3.0f, 2.0f, 7.0f, 0.0f, 6.0f, -2.0f)
|
||||
reflectiveCurveTo(106.5f, 260.5f, 104.5f, 263.5f)
|
||||
close()
|
||||
moveTo(109.5f, 276.5f)
|
||||
reflectiveCurveToRelative(-5.0f, -1.0f, -5.0f, 9.0f)
|
||||
arcToRelative(161.75f, 161.75f, 0.0f, false, false, 1.0f, 18.0f)
|
||||
lineToRelative(11.0f, 1.0f)
|
||||
reflectiveCurveToRelative(-3.0f, -5.0f, -3.0f, -14.0f)
|
||||
reflectiveCurveTo(112.5f, 278.5f, 109.5f, 276.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData7 =
|
||||
PathData {
|
||||
moveTo(102.5f, 227.5f)
|
||||
reflectiveCurveToRelative(-4.0f, 22.0f, 38.0f, 21.0f)
|
||||
curveToRelative(0.0f, 0.0f, 56.0f, 2.0f, 57.0f, -26.0f)
|
||||
reflectiveCurveToRelative(-69.0f, -14.0f, -69.0f, -14.0f)
|
||||
reflectiveCurveTo(106.5f, 214.5f, 102.5f, 227.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData20 =
|
||||
PathData {
|
||||
moveTo(217.85f, 223.44f)
|
||||
reflectiveCurveToRelative(9.65f, 6.06f, 7.65f, 17.06f)
|
||||
reflectiveCurveToRelative(-8.0f, 16.09f, -17.0f, 18.54f)
|
||||
verticalLineToRelative(9.46f)
|
||||
reflectiveCurveToRelative(24.08f, -0.06f, 25.0f, -22.53f)
|
||||
curveTo(233.54f, 246.0f, 236.21f, 233.39f, 217.85f, 223.44f)
|
||||
close()
|
||||
moveTo(90.5f, 270.5f)
|
||||
reflectiveCurveToRelative(7.0f, 25.0f, 0.0f, 32.0f)
|
||||
lineToRelative(7.0f, -1.0f)
|
||||
verticalLineToRelative(-31.0f)
|
||||
lineToRelative(-8.76f, -3.76f)
|
||||
close()
|
||||
moveTo(85.5f, 273.5f)
|
||||
reflectiveCurveToRelative(5.0f, 22.0f, -2.0f, 29.0f)
|
||||
reflectiveCurveToRelative(-4.6f, -3.27f, -4.6f, -3.27f)
|
||||
reflectiveCurveToRelative(4.73f, -4.71f, 5.66f, -15.22f)
|
||||
lineToRelative(0.94f, -10.51f)
|
||||
moveTo(225.8f, 272.89f)
|
||||
reflectiveCurveToRelative(-12.3f, -6.39f, -12.3f, 0.61f)
|
||||
reflectiveCurveToRelative(11.0f, 28.0f, 14.0f, 31.0f)
|
||||
reflectiveCurveToRelative(-6.0f, 0.0f, -6.0f, 0.0f)
|
||||
reflectiveCurveToRelative(-10.71f, -12.76f, -12.36f, -19.88f)
|
||||
reflectiveCurveToRelative(-0.64f, -16.12f, -0.64f, -16.12f)
|
||||
lineToRelative(16.4f, -5.2f)
|
||||
close()
|
||||
moveTo(197.51f, 304.5f)
|
||||
reflectiveCurveToRelative(4.0f, -34.0f, 0.0f, -53.0f)
|
||||
curveToRelative(-2.39f, -11.36f, -2.58f, -11.5f, -2.55f, -11.32f)
|
||||
curveToRelative(0.0f, 0.0f, 8.57f, -4.37f, 10.06f, -17.0f)
|
||||
reflectiveCurveToRelative(3.49f, 45.35f, 3.49f, 45.35f)
|
||||
verticalLineToRelative(37.0f)
|
||||
close()
|
||||
|
||||
moveTo(151.5f, 183.5f)
|
||||
arcToRelative(14.82f, 14.82f, 0.0f, false, false, 0.0f, 10.0f)
|
||||
curveToRelative(2.0f, 5.0f, 5.0f, 18.0f, 4.0f, 24.0f)
|
||||
arcToRelative(61.38f, 61.38f, 0.0f, false, true, -2.35f, 9.74f)
|
||||
reflectiveCurveToRelative(9.35f, -4.74f, 8.35f, -9.74f)
|
||||
reflectiveCurveToRelative(-2.37f, -8.51f, -3.18f, -17.76f)
|
||||
arcToRelative(104.59f, 104.59f, 0.0f, false, true, 0.18f, -18.24f)
|
||||
horizontalLineToRelative(-6.4f)
|
||||
close()
|
||||
}
|
||||
private val pathData32 =
|
||||
PathData {
|
||||
moveTo(224.9f, 263.3f)
|
||||
reflectiveCurveToRelative(-1.4f, 20.2f, 16.6f, 39.2f)
|
||||
horizontalLineToRelative(-22.0f)
|
||||
reflectiveCurveToRelative(-7.35f, -6.33f, -11.18f, -20.67f)
|
||||
lineToRelative(0.18f, -13.33f)
|
||||
reflectiveCurveTo(218.3f, 268.1f, 224.9f, 263.3f)
|
||||
close()
|
||||
moveTo(76.5f, 302.5f)
|
||||
reflectiveCurveToRelative(9.0f, -10.0f, 8.0f, -24.0f)
|
||||
lineToRelative(-1.0f, -14.0f)
|
||||
lineToRelative(14.0f, 6.0f)
|
||||
reflectiveCurveToRelative(2.0f, 24.0f, 0.0f, 31.0f)
|
||||
reflectiveCurveTo(76.5f, 302.5f, 76.5f, 302.5f)
|
||||
close()
|
||||
moveTo(139.5f, 181.5f)
|
||||
lineToRelative(1.0f, 39.0f)
|
||||
reflectiveCurveToRelative(0.0f, 7.0f, 10.0f, 7.0f)
|
||||
reflectiveCurveToRelative(11.0f, -10.0f, 11.0f, -10.0f)
|
||||
arcToRelative(155.16f, 155.16f, 0.0f, false, true, -3.0f, -16.0f)
|
||||
curveToRelative(-1.0f, -8.0f, 0.0f, -20.0f, 0.0f, -20.0f)
|
||||
horizontalLineToRelative(-19.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData33 =
|
||||
PathData {
|
||||
moveTo(158.0f, 185.5f)
|
||||
reflectiveCurveToRelative(0.33f, 3.92f, -18.35f, 2.0f)
|
||||
moveTo(158.0f, 197.5f)
|
||||
reflectiveCurveToRelative(0.0f, 6.0f, -17.5f, 1.0f)
|
||||
moveTo(160.0f, 210.5f)
|
||||
reflectiveCurveToRelative(-2.35f, 7.0f, -20.0f, 2.0f)
|
||||
moveTo(215.68f, 298.0f)
|
||||
reflectiveCurveToRelative(4.82f, -4.52f, 10.82f, -4.52f)
|
||||
arcToRelative(18.1f, 18.1f, 0.0f, false, true, 9.41f, 2.26f)
|
||||
moveTo(208.5f, 281.5f)
|
||||
arcToRelative(10.58f, 10.58f, 0.0f, false, true, 11.0f, -6.0f)
|
||||
curveToRelative(8.0f, 1.0f, 7.71f, 3.0f, 7.71f, 3.0f)
|
||||
moveTo(97.5f, 298.5f)
|
||||
reflectiveCurveToRelative(-2.26f, -5.48f, -16.63f, -2.74f)
|
||||
moveTo(97.5f, 282.5f)
|
||||
reflectiveCurveToRelative(-3.87f, -3.0f, -12.94f, -1.0f)
|
||||
}
|
||||
@@ -0,0 +1,346 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.Gray
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Body9HugePreview() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
body9Huge(SolidColor(Color.Yellow), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun body9Huge(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
// body
|
||||
builder.addPath(pathData4, fill = fgColor)
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// base neck
|
||||
builder.addPath(pathData7, fill = Black, stroke = Black, fillAlpha = 0.6f, strokeLineWidth = 1.0f)
|
||||
|
||||
// neck
|
||||
builder.addPath(pathData11, fill = Gray, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData10, fill = SolidColor(Color.White), fillAlpha = 0.7f)
|
||||
|
||||
// neck base shade
|
||||
builder.addPath(pathData17, fill = Black, fillAlpha = 0.4f)
|
||||
|
||||
// left body shade
|
||||
builder.addPath(pathData18, fill = SolidColor(Color.White), fillAlpha = 0.7f)
|
||||
|
||||
// left arm shades
|
||||
builder.addPath(pathData20, fill = Black, fillAlpha = 0.4f)
|
||||
builder.addPath(pathData23, fill = Black, fillAlpha = 0.4f)
|
||||
builder.addPath(pathData22, fill = Black, fillAlpha = 0.2f, stroke = Black, strokeAlpha = 0.1f, strokeLineWidth = 1f)
|
||||
|
||||
// right arm shade
|
||||
builder.addPath(pathData24, fill = Black, fillAlpha = 0.4f, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// right body shade
|
||||
builder.addPath(pathData26, fill = Black, fillAlpha = 0.4f)
|
||||
|
||||
// Neck shade
|
||||
builder.addPath(pathData12, fill = SolidColor(Color(0xFF58595b)))
|
||||
|
||||
// Shoulder lines
|
||||
builder.addPath(pathData21, stroke = Black, strokeLineWidth = 0.75f)
|
||||
|
||||
// Joints and body divisions
|
||||
builder.addPath(pathData13, stroke = Black, strokeLineWidth = 1.0f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(222.5f, 301.5f)
|
||||
reflectiveCurveToRelative(-10.0f, -35.0f, 11.0f, -53.0f)
|
||||
reflectiveCurveToRelative(58.0f, -15.0f, 70.0f, 2.0f)
|
||||
reflectiveCurveToRelative(2.0f, 51.0f, 2.0f, 51.0f)
|
||||
close()
|
||||
moveTo(83.5f, 254.5f)
|
||||
reflectiveCurveToRelative(-6.0f, 28.0f, 67.0f, 26.0f)
|
||||
reflectiveCurveToRelative(77.0f, -30.0f, 76.0f, -36.0f)
|
||||
reflectiveCurveToRelative(-12.3f, -10.12f, -26.0f, -13.0f)
|
||||
curveToRelative(0.0f, 5.0f, 1.0f, 22.0f, 1.0f, 22.0f)
|
||||
reflectiveCurveToRelative(-8.0f, 13.0f, -46.0f, 17.0f)
|
||||
curveToRelative(-29.0f, 1.0f, -45.0f, -9.0f, -45.0f, -9.0f)
|
||||
reflectiveCurveToRelative(-1.5f, -16.0f, -2.5f, -23.13f)
|
||||
curveTo(96.5f, 241.75f, 85.5f, 247.5f, 83.5f, 254.5f)
|
||||
close()
|
||||
moveTo(110.5f, 261.5f)
|
||||
reflectiveCurveToRelative(20.0f, 11.0f, 44.0f, 9.0f)
|
||||
reflectiveCurveToRelative(36.0f, -7.0f, 47.0f, -17.0f)
|
||||
lineToRelative(-1.0f, -24.0f)
|
||||
arcToRelative(10.53f, 10.53f, 0.0f, false, true, -0.31f, 4.41f)
|
||||
curveToRelative(-0.69f, 1.59f, -4.63f, 16.78f, -42.16f, 19.68f)
|
||||
reflectiveCurveToRelative(-47.0f, -4.1f, -50.0f, -16.1f)
|
||||
close()
|
||||
moveTo(108.0f, 237.0f)
|
||||
reflectiveCurveToRelative(-1.0f, 20.0f, 45.0f, 17.0f)
|
||||
reflectiveCurveToRelative(48.5f, -20.5f, 47.5f, -24.5f)
|
||||
curveToRelative(-0.91f, -3.63f, -13.68f, -10.56f, -39.0f, -9.56f)
|
||||
curveToRelative(0.0f, 0.56f, 0.26f, 3.3f, 0.26f, 3.3f)
|
||||
curveToRelative(1.74f, 9.26f, 0.74f, 15.26f, -9.26f, 16.26f)
|
||||
curveToRelative(-3.41f, 0.33f, -10.0f, -5.0f, -10.0f, -5.0f)
|
||||
reflectiveCurveToRelative(-1.0f, -8.0f, -1.0f, -13.0f)
|
||||
curveTo(120.38f, 224.59f, 108.41f, 230.0f, 108.0f, 237.0f)
|
||||
close()
|
||||
|
||||
moveTo(87.5f, 247.5f)
|
||||
reflectiveCurveToRelative(-19.0f, -10.0f, -37.0f, -5.0f)
|
||||
reflectiveCurveToRelative(-29.0f, 20.0f, -32.0f, 37.0f)
|
||||
curveToRelative(-1.0f, 11.0f, 1.0f, 16.0f, 3.0f, 20.0f)
|
||||
horizontalLineToRelative(64.0f)
|
||||
reflectiveCurveToRelative(2.0f, -5.0f, 0.0f, -16.0f)
|
||||
reflectiveCurveToRelative(-3.0f, -23.0f, -2.0f, -29.0f)
|
||||
reflectiveCurveTo(87.5f, 247.5f, 87.5f, 247.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(83.5f, 250.0f)
|
||||
horizontalLineToRelative(143.5f)
|
||||
verticalLineToRelative(58.5f)
|
||||
horizontalLineToRelative(-143.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData7 =
|
||||
PathData {
|
||||
moveTo(108.0f, 237.0f)
|
||||
reflectiveCurveToRelative(-1.0f, 20.0f, 45.0f, 17.0f)
|
||||
reflectiveCurveToRelative(48.5f, -20.5f, 47.5f, -24.5f)
|
||||
curveToRelative(-0.91f, -3.63f, -13.68f, -10.56f, -39.0f, -9.56f)
|
||||
curveToRelative(0.0f, 0.56f, 0.26f, 3.3f, 0.26f, 3.3f)
|
||||
curveToRelative(1.74f, 9.26f, 0.74f, 15.26f, -9.26f, 16.26f)
|
||||
curveToRelative(-3.41f, 0.33f, -10.0f, -5.0f, -10.0f, -5.0f)
|
||||
reflectiveCurveToRelative(-1.0f, -8.0f, -1.0f, -13.0f)
|
||||
curveTo(120.38f, 224.59f, 108.41f, 230.0f, 108.0f, 237.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData9 =
|
||||
PathData {
|
||||
moveTo(193.37f, 260.15f)
|
||||
curveToRelative(-6.66f, 3.83f, -18.28f, 8.29f, -37.87f, 10.35f)
|
||||
curveToRelative(-29.0f, 1.0f, -45.0f, -9.0f, -45.0f, -9.0f)
|
||||
reflectiveCurveToRelative(-1.5f, -16.0f, -2.5f, -23.13f)
|
||||
curveToRelative(-11.5f, 3.38f, -22.5f, 9.13f, -24.5f, 16.13f)
|
||||
curveToRelative(0.0f, 0.0f, -6.0f, 28.0f, 67.0f, 26.0f)
|
||||
curveToRelative(29.58f, -0.81f, 47.84f, -5.89f, 59.0f, -12.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData10 =
|
||||
PathData {
|
||||
moveTo(83.5f, 254.5f)
|
||||
reflectiveCurveToRelative(-6.0f, 28.0f, 67.0f, 26.0f)
|
||||
curveToRelative(29.58f, -0.81f, 47.84f, -5.89f, 59.0f, -12.0f)
|
||||
curveToRelative(-5.5f, -2.5f, -10.5f, -5.5f, -16.13f, -8.35f)
|
||||
curveToRelative(-6.66f, 3.83f, -18.28f, 8.29f, -37.87f, 10.35f)
|
||||
curveToRelative(-29.0f, 1.0f, -45.0f, -9.0f, -45.0f, -9.0f)
|
||||
reflectiveCurveToRelative(-1.5f, -16.0f, -2.5f, -23.13f)
|
||||
curveTo(96.5f, 241.75f, 85.5f, 247.5f, 83.5f, 254.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData11 =
|
||||
PathData {
|
||||
moveTo(141.5f, 190.5f)
|
||||
verticalLineToRelative(29.0f)
|
||||
arcToRelative(142.25f, 142.25f, 0.0f, false, false, 1.0f, 15.0f)
|
||||
arcToRelative(9.78f, 9.78f, 0.0f, false, false, 10.0f, 5.0f)
|
||||
curveToRelative(7.0f, -1.0f, 11.0f, -4.0f, 10.0f, -11.0f)
|
||||
curveToRelative(-0.36f, -2.54f, -0.73f, -5.0f, -1.0f, -7.56f)
|
||||
arcToRelative(138.9f, 138.9f, 0.0f, false, true, -1.0f, -17.44f)
|
||||
verticalLineToRelative(-14.0f)
|
||||
arcTo(69.37f, 69.37f, 0.0f, false, false, 141.5f, 190.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData12 =
|
||||
PathData {
|
||||
moveTo(152.5f, 190.5f)
|
||||
reflectiveCurveToRelative(0.0f, 7.0f, 2.0f, 12.0f)
|
||||
arcToRelative(55.9f, 55.9f, 0.0f, false, true, 3.13f, 17.34f)
|
||||
curveToRelative(-0.12f, 3.66f, 0.88f, 15.66f, -3.12f, 17.66f)
|
||||
reflectiveCurveToRelative(-2.0f, 2.0f, -2.0f, 2.0f)
|
||||
reflectiveCurveToRelative(7.0f, -1.57f, 8.48f, -3.79f)
|
||||
reflectiveCurveToRelative(1.94f, -3.24f, 1.23f, -9.23f)
|
||||
arcToRelative(177.33f, 177.33f, 0.0f, false, true, -1.71f, -24.86f)
|
||||
verticalLineTo(189.5f)
|
||||
arcToRelative(37.46f, 37.46f, 0.0f, false, false, -6.17f, -0.25f)
|
||||
lineToRelative(-1.83f, 0.25f)
|
||||
close()
|
||||
}
|
||||
private val pathData13 =
|
||||
PathData {
|
||||
moveTo(141.5f, 190.5f)
|
||||
verticalLineToRelative(29.0f)
|
||||
arcToRelative(142.25f, 142.25f, 0.0f, false, false, 1.0f, 15.0f)
|
||||
arcToRelative(9.78f, 9.78f, 0.0f, false, false, 10.0f, 5.0f)
|
||||
curveToRelative(7.0f, -1.0f, 11.0f, -4.0f, 10.0f, -11.0f)
|
||||
curveToRelative(-0.36f, -2.54f, -0.73f, -5.0f, -1.0f, -7.56f)
|
||||
arcToRelative(138.9f, 138.9f, 0.0f, false, true, -1.0f, -17.44f)
|
||||
verticalLineToRelative(-14.0f)
|
||||
arcTo(69.37f, 69.37f, 0.0f, false, false, 141.5f, 190.5f)
|
||||
close()
|
||||
moveTo(161.25f, 222.25f)
|
||||
reflectiveCurveToRelative(-2.67f, 3.25f, -9.51f, 3.25f)
|
||||
reflectiveCurveToRelative(-10.13f, -2.0f, -10.13f, -2.0f)
|
||||
moveTo(160.0f, 208.5f)
|
||||
reflectiveCurveToRelative(-3.0f, 3.0f, -9.06f, 3.0f)
|
||||
reflectiveCurveTo(142.0f, 210.0f, 142.0f, 210.0f)
|
||||
moveTo(160.0f, 197.5f)
|
||||
reflectiveCurveToRelative(-2.0f, 2.0f, -8.06f, 2.0f)
|
||||
arcTo(86.48f, 86.48f, 0.0f, false, true, 142.0f, 199.0f)
|
||||
|
||||
// body
|
||||
moveTo(209.51f, 268.45f)
|
||||
reflectiveCurveToRelative(18.0f, -9.0f, 17.0f, -24.0f)
|
||||
lineToRelative(0.74f, 11.0f)
|
||||
arcToRelative(39.65f, 39.65f, 0.0f, false, false, -7.12f, 24.19f)
|
||||
curveToRelative(0.38f, 14.81f, 2.38f, 21.81f, 2.38f, 21.81f)
|
||||
horizontalLineToRelative(-12.0f)
|
||||
moveTo(83.5f, 254.5f)
|
||||
reflectiveCurveToRelative(-6.0f, 28.0f, 67.0f, 26.0f)
|
||||
reflectiveCurveToRelative(77.0f, -30.0f, 76.0f, -36.0f)
|
||||
reflectiveCurveToRelative(-12.3f, -10.12f, -26.0f, -13.0f)
|
||||
curveToRelative(0.0f, 5.0f, 1.0f, 22.0f, 1.0f, 22.0f)
|
||||
reflectiveCurveToRelative(-8.0f, 13.0f, -46.0f, 17.0f)
|
||||
curveToRelative(-29.0f, 1.0f, -45.0f, -9.0f, -45.0f, -9.0f)
|
||||
reflectiveCurveToRelative(-1.5f, -16.0f, -2.5f, -23.13f)
|
||||
curveTo(96.5f, 241.75f, 85.5f, 247.5f, 83.5f, 254.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData17 =
|
||||
PathData {
|
||||
moveTo(188.0f, 246.51f)
|
||||
lineTo(189.52f, 262.0f)
|
||||
reflectiveCurveToRelative(6.63f, -4.0f, 9.06f, -6.0f)
|
||||
lineToRelative(2.42f, -2.0f)
|
||||
reflectiveCurveToRelative(0.72f, 0.24f, 0.36f, -3.88f)
|
||||
reflectiveCurveToRelative(-0.79f, -17.93f, -0.79f, -17.93f)
|
||||
reflectiveCurveTo(200.0f, 240.0f, 188.0f, 246.51f)
|
||||
close()
|
||||
}
|
||||
private val pathData18 =
|
||||
PathData {
|
||||
moveTo(84.0f, 273.63f)
|
||||
reflectiveCurveTo(97.0f, 277.0f, 97.0f, 285.0f)
|
||||
reflectiveCurveToRelative(-1.0f, 9.0f, 0.0f, 14.0f)
|
||||
reflectiveCurveToRelative(0.0f, 4.0f, 0.0f, 4.0f)
|
||||
horizontalLineTo(84.0f)
|
||||
reflectiveCurveToRelative(3.32f, -3.0f, 2.41f, -11.26f)
|
||||
reflectiveCurveTo(85.0f, 279.5f, 85.0f, 279.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData19 =
|
||||
PathData {
|
||||
moveTo(87.5f, 247.5f)
|
||||
reflectiveCurveToRelative(-19.0f, -10.0f, -37.0f, -5.0f)
|
||||
reflectiveCurveToRelative(-29.0f, 20.0f, -32.0f, 37.0f)
|
||||
curveToRelative(-1.0f, 11.0f, 1.0f, 16.0f, 3.0f, 20.0f)
|
||||
horizontalLineToRelative(64.0f)
|
||||
reflectiveCurveToRelative(2.0f, -5.0f, 0.0f, -16.0f)
|
||||
reflectiveCurveToRelative(-3.0f, -23.0f, -2.0f, -29.0f)
|
||||
reflectiveCurveTo(87.5f, 247.5f, 87.5f, 247.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData20 =
|
||||
PathData {
|
||||
moveTo(87.5f, 247.5f)
|
||||
arcToRelative(63.65f, 63.65f, 0.0f, false, false, -25.06f, -6.39f)
|
||||
curveToRelative(7.06f, 2.39f, 3.06f, 8.39f, -8.94f, 13.39f)
|
||||
curveToRelative(-11.0f, 6.0f, -23.0f, 10.0f, -27.5f, 32.5f)
|
||||
curveToRelative(-0.67f, 7.37f, 0.84f, 13.18f, 1.5f, 14.5f)
|
||||
lineToRelative(58.0f, -2.0f)
|
||||
reflectiveCurveToRelative(2.0f, -5.0f, 0.0f, -16.0f)
|
||||
reflectiveCurveToRelative(-3.0f, -23.0f, -2.0f, -29.0f)
|
||||
reflectiveCurveTo(87.5f, 247.5f, 87.5f, 247.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData21 =
|
||||
PathData {
|
||||
moveTo(33.5f, 299.5f)
|
||||
reflectiveCurveToRelative(-7.0f, -19.0f, -3.0f, -35.0f)
|
||||
arcToRelative(28.63f, 28.63f, 0.0f, false, true, 17.0f, -21.06f)
|
||||
moveTo(292.5f, 241.5f)
|
||||
reflectiveCurveToRelative(-12.0f, -1.0f, -13.0f, 15.0f)
|
||||
curveToRelative(-1.0f, 14.0f, 4.0f, 41.0f, 7.0f, 45.0f)
|
||||
}
|
||||
private val pathData22 =
|
||||
PathData {
|
||||
moveTo(62.44f, 241.12f)
|
||||
arcToRelative(3.46f, 3.46f, 0.0f, false, true, 3.06f, 3.38f)
|
||||
curveToRelative(0.0f, 3.0f, 0.0f, 4.0f, -10.0f, 9.0f)
|
||||
reflectiveCurveToRelative(-21.45f, 10.0f, -26.22f, 21.0f)
|
||||
reflectiveCurveToRelative(-2.62f, 25.0f, -2.62f, 25.0f)
|
||||
horizontalLineTo(21.5f)
|
||||
lineToRelative(-3.0f, -20.0f)
|
||||
reflectiveCurveTo(27.38f, 241.73f, 62.44f, 241.12f)
|
||||
close()
|
||||
}
|
||||
private val pathData23 =
|
||||
PathData {
|
||||
moveTo(84.26f, 275.62f)
|
||||
arcTo(31.64f, 31.64f, 0.0f, false, true, 80.5f, 290.5f)
|
||||
arcToRelative(19.71f, 19.71f, 0.0f, false, true, -11.14f, 8.83f)
|
||||
lineToRelative(16.14f, 0.17f)
|
||||
reflectiveCurveToRelative(1.42f, -2.62f, 0.71f, -10.81f)
|
||||
arcTo(90.57f, 90.57f, 0.0f, false, false, 84.26f, 275.62f)
|
||||
close()
|
||||
}
|
||||
private val pathData24 =
|
||||
PathData {
|
||||
moveTo(222.5f, 301.5f)
|
||||
reflectiveCurveToRelative(-10.0f, -35.0f, 11.0f, -53.0f)
|
||||
reflectiveCurveToRelative(58.0f, -15.0f, 70.0f, 2.0f)
|
||||
reflectiveCurveToRelative(2.0f, 51.0f, 2.0f, 51.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData26 =
|
||||
PathData {
|
||||
moveTo(226.5f, 244.5f)
|
||||
lineToRelative(0.74f, 11.0f)
|
||||
arcToRelative(39.65f, 39.65f, 0.0f, false, false, -7.12f, 24.19f)
|
||||
curveToRelative(0.38f, 14.81f, 2.38f, 21.81f, 2.38f, 21.81f)
|
||||
horizontalLineToRelative(-12.0f)
|
||||
reflectiveCurveToRelative(1.0f, -9.0f, 0.5f, -14.5f)
|
||||
reflectiveCurveToRelative(-1.49f, -18.55f, -1.49f, -18.55f)
|
||||
reflectiveCurveTo(227.5f, 259.5f, 226.5f, 244.5f)
|
||||
close()
|
||||
}
|
||||
+115
@@ -0,0 +1,115 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.Brown
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Eyes0Squint() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
eyes0Squint(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun eyes0Squint(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor)
|
||||
builder.addPath(pathData3, fill = Black, stroke = Black, fillAlpha = 0.4f, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData4, fill = Brown, stroke = Black, strokeLineWidth = 0.5f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(144.5f, 141.5f)
|
||||
reflectiveCurveToRelative(5.0f, 9.0f, 9.0f, 7.0f)
|
||||
reflectiveCurveToRelative(13.0f, -9.0f, 13.0f, -9.0f)
|
||||
verticalLineToRelative(-9.0f)
|
||||
reflectiveCurveToRelative(-2.0f, -1.0f, -7.0f, 0.0f)
|
||||
reflectiveCurveToRelative(-14.0f, 5.0f, -14.0f, 5.0f)
|
||||
reflectiveCurveTo(142.5f, 137.5f, 144.5f, 141.5f)
|
||||
close()
|
||||
moveTo(118.0f, 141.0f)
|
||||
lineToRelative(-5.0f, 10.0f)
|
||||
reflectiveCurveToRelative(-7.5f, -2.5f, -10.5f, -4.5f)
|
||||
reflectiveCurveToRelative(-4.0f, -3.0f, -4.0f, -6.0f)
|
||||
lineToRelative(1.0f, -3.0f)
|
||||
arcToRelative(13.6f, 13.6f, 0.0f, false, true, 7.0f, 0.0f)
|
||||
curveToRelative(4.0f, 1.0f, 11.0f, 2.0f, 11.0f, 2.0f)
|
||||
reflectiveCurveTo(118.5f, 139.5f, 118.0f, 141.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(144.5f, 141.5f)
|
||||
reflectiveCurveToRelative(5.0f, 9.0f, 9.0f, 7.0f)
|
||||
reflectiveCurveToRelative(13.0f, -9.0f, 13.0f, -9.0f)
|
||||
verticalLineToRelative(-9.0f)
|
||||
reflectiveCurveToRelative(-2.0f, -1.0f, -7.0f, 0.0f)
|
||||
reflectiveCurveToRelative(-14.0f, 5.0f, -14.0f, 5.0f)
|
||||
reflectiveCurveTo(142.5f, 137.5f, 144.5f, 141.5f)
|
||||
close()
|
||||
moveTo(118.0f, 141.0f)
|
||||
lineToRelative(-5.0f, 10.0f)
|
||||
reflectiveCurveToRelative(-7.5f, -2.5f, -10.5f, -4.5f)
|
||||
reflectiveCurveToRelative(-4.0f, -3.0f, -4.0f, -6.0f)
|
||||
lineToRelative(1.0f, -3.0f)
|
||||
arcToRelative(13.6f, 13.6f, 0.0f, false, true, 7.0f, 0.0f)
|
||||
arcToRelative(37.46f, 37.46f, 0.0f, false, false, 8.0f, 1.0f)
|
||||
reflectiveCurveTo(118.5f, 139.5f, 118.0f, 141.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(144.5f, 139.5f)
|
||||
reflectiveCurveToRelative(2.0f, 2.0f, 6.0f, 1.0f)
|
||||
reflectiveCurveToRelative(10.0f, -6.0f, 12.0f, -7.0f)
|
||||
arcToRelative(18.66f, 18.66f, 0.0f, false, false, 4.0f, -3.0f)
|
||||
reflectiveCurveToRelative(-3.22f, -1.0f, -9.11f, 0.52f)
|
||||
arcToRelative(67.92f, 67.92f, 0.0f, false, false, -11.89f, 4.48f)
|
||||
reflectiveCurveTo(142.5f, 137.5f, 144.5f, 139.5f)
|
||||
close()
|
||||
moveTo(100.5f, 139.5f)
|
||||
lineToRelative(6.0f, 3.0f)
|
||||
curveToRelative(2.0f, 1.0f, 9.7f, 2.6f, 11.35f, -1.2f)
|
||||
reflectiveCurveToRelative(-11.6f, -4.69f, -16.0f, -4.24f)
|
||||
curveToRelative(0.0f, 0.0f, -3.0f, -0.17f, -2.67f, 0.94f)
|
||||
arcTo(2.3f, 2.3f, 0.0f, false, false, 100.5f, 139.5f)
|
||||
close()
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.Brown
|
||||
import com.vitorpamplona.amethyst.commons.DarkYellow
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Eyes1Round() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
eyes1Round(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun eyes1Round(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor)
|
||||
builder.addPath(pathData3, fill = Black, stroke = Black, fillAlpha = 0.2f, strokeLineWidth = 0.5f)
|
||||
builder.addPath(pathData4, fill = Black, stroke = Black, fillAlpha = 0.4f, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData7, fill = Brown, stroke = Black, strokeLineWidth = 0.5f)
|
||||
builder.addPath(pathData9, fill = DarkYellow)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(110.5f, 122.5f)
|
||||
curveToRelative(-4.0f, 0.0f, -17.0f, 2.0f, -17.0f, 17.0f)
|
||||
reflectiveCurveToRelative(10.0f, 17.0f, 17.0f, 17.0f)
|
||||
reflectiveCurveToRelative(15.0f, -5.0f, 15.0f, -18.0f)
|
||||
reflectiveCurveTo(114.5f, 122.5f, 110.5f, 122.5f)
|
||||
close()
|
||||
moveTo(153.5f, 121.5f)
|
||||
curveToRelative(-4.0f, 0.0f, -17.5f, 2.5f, -17.5f, 17.5f)
|
||||
reflectiveCurveToRelative(10.5f, 16.5f, 17.5f, 16.5f)
|
||||
reflectiveCurveToRelative(16.0f, -5.0f, 16.0f, -18.0f)
|
||||
curveTo(167.0f, 122.0f, 157.5f, 121.5f, 153.5f, 121.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(110.5f, 126.5f)
|
||||
reflectiveCurveToRelative(-13.0f, 0.0f, -13.0f, 12.0f)
|
||||
reflectiveCurveToRelative(10.0f, 13.0f, 13.0f, 13.0f)
|
||||
reflectiveCurveToRelative(12.0f, -2.0f, 12.0f, -14.52f)
|
||||
curveTo(122.5f, 137.0f, 121.5f, 127.5f, 110.5f, 126.5f)
|
||||
close()
|
||||
moveTo(140.1f, 137.73f)
|
||||
reflectiveCurveToRelative(-2.0f, 13.2f, 12.18f, 13.2f)
|
||||
reflectiveCurveToRelative(14.22f, -10.15f, 14.22f, -13.2f)
|
||||
reflectiveCurveToRelative(-3.0f, -12.18f, -12.18f, -12.18f)
|
||||
reflectiveCurveTo(140.1f, 132.65f, 140.1f, 137.73f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(154.5f, 121.5f)
|
||||
reflectiveCurveToRelative(-20.0f, 0.0f, -19.0f, 18.0f)
|
||||
reflectiveCurveToRelative(19.0f, 16.0f, 19.0f, 16.0f)
|
||||
reflectiveCurveToRelative(16.0f, -2.0f, 15.0f, -17.0f)
|
||||
reflectiveCurveTo(158.5f, 121.5f, 154.5f, 121.5f)
|
||||
close()
|
||||
moveTo(110.5f, 122.5f)
|
||||
curveToRelative(-4.0f, 0.0f, -17.0f, 2.0f, -17.0f, 17.0f)
|
||||
reflectiveCurveToRelative(10.0f, 17.0f, 17.0f, 17.0f)
|
||||
reflectiveCurveToRelative(15.0f, -5.0f, 15.0f, -18.0f)
|
||||
reflectiveCurveTo(114.5f, 122.5f, 110.5f, 122.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData7 =
|
||||
PathData {
|
||||
moveTo(109.0f, 127.0f)
|
||||
reflectiveCurveToRelative(-9.0f, 1.0f, -9.0f, 9.0f)
|
||||
reflectiveCurveToRelative(2.5f, 12.5f, 10.5f, 12.5f)
|
||||
reflectiveCurveToRelative(12.0f, -5.0f, 12.0f, -10.0f)
|
||||
reflectiveCurveTo(117.5f, 126.5f, 109.0f, 127.0f)
|
||||
close()
|
||||
moveTo(154.0f, 126.0f)
|
||||
reflectiveCurveToRelative(-10.5f, 0.52f, -11.0f, 9.4f)
|
||||
reflectiveCurveTo(147.0f, 149.0f, 154.0f, 149.0f)
|
||||
reflectiveCurveToRelative(12.0f, -6.26f, 12.0f, -11.49f)
|
||||
reflectiveCurveTo(161.5f, 125.51f, 154.0f, 126.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData9 =
|
||||
PathData {
|
||||
moveTo(110.26f, 134.06f)
|
||||
arcToRelative(0.92f, 0.92f, 0.0f, false, false, -0.24f, 0.05f)
|
||||
curveToRelative(-0.36f, 0.13f, -1.0f, 0.61f, -1.0f, 2.31f)
|
||||
curveToRelative(0.0f, 2.36f, 0.0f, 3.54f, 1.26f, 3.54f)
|
||||
reflectiveCurveToRelative(2.51f, 0.0f, 2.51f, -3.54f)
|
||||
curveTo(112.77f, 134.06f, 111.12f, 133.86f, 110.26f, 134.06f)
|
||||
close()
|
||||
moveTo(154.26f, 134.06f)
|
||||
arcToRelative(0.92f, 0.92f, 0.0f, false, false, -0.24f, 0.05f)
|
||||
curveToRelative(-0.36f, 0.13f, -1.0f, 0.61f, -1.0f, 2.31f)
|
||||
curveToRelative(0.0f, 2.36f, 0.0f, 3.54f, 1.26f, 3.54f)
|
||||
reflectiveCurveToRelative(2.51f, 0.0f, 2.51f, -3.54f)
|
||||
curveTo(156.77f, 134.06f, 155.12f, 133.86f, 154.26f, 134.06f)
|
||||
close()
|
||||
}
|
||||
+153
@@ -0,0 +1,153 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.Brown
|
||||
import com.vitorpamplona.amethyst.commons.LightRed
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Eyes2Single() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
eyes2Single(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun eyes2Single(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor)
|
||||
builder.addPath(pathData2, fill = Black, fillAlpha = 0.4f, strokeAlpha = 0.4f)
|
||||
builder.addPath(pathData3, fill = Black)
|
||||
builder.addPath(pathData4, fill = Brown, stroke = Black, strokeLineWidth = 0.5f)
|
||||
builder.addPath(pathData5, fill = LightRed, stroke = Black, strokeLineWidth = 0.5f)
|
||||
builder.addPath(pathData6, fill = Black)
|
||||
builder.addPath(pathData7, stroke = Black, strokeLineWidth = 0.75f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(135.5f, 123.5f)
|
||||
reflectiveCurveToRelative(-34.0f, 1.0f, -35.0f, 17.0f)
|
||||
reflectiveCurveToRelative(23.0f, 12.0f, 23.0f, 12.0f)
|
||||
reflectiveCurveToRelative(23.0f, -2.0f, 28.0f, -3.0f)
|
||||
reflectiveCurveToRelative(18.0f, -5.0f, 18.0f, -14.0f)
|
||||
reflectiveCurveToRelative(-8.0f, -13.0f, -17.0f, -13.0f)
|
||||
reflectiveCurveTo(139.5f, 123.5f, 135.5f, 123.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(117.31f, 152.44f)
|
||||
curveToRelative(-4.51f, 0.0f, -10.59f, -0.74f, -13.91f, -4.27f)
|
||||
arcToRelative(9.8f, 9.8f, 0.0f, false, true, -2.41f, -7.64f)
|
||||
curveToRelative(1.0f, -15.37f, 34.18f, -16.52f, 34.52f, -16.53f)
|
||||
horizontalLineToRelative(0.0f)
|
||||
curveToRelative(1.61f, 0.0f, 3.25f, -0.16f, 5.15f, -0.35f)
|
||||
arcTo(107.89f, 107.89f, 0.0f, false, true, 152.5f, 123.0f)
|
||||
curveToRelative(8.0f, 0.0f, 16.5f, 3.28f, 16.5f, 12.5f)
|
||||
curveToRelative(0.0f, 9.71f, -15.8f, 13.15f, -17.6f, 13.51f)
|
||||
curveToRelative(-4.92f, 1.0f, -27.72f, 3.0f, -27.95f, 3.0f)
|
||||
arcToRelative(42.0f, 42.0f, 0.0f, false, true, -6.14f, 0.44f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(152.5f, 123.5f)
|
||||
curveToRelative(7.73f, 0.0f, 16.0f, 3.15f, 16.0f, 12.0f)
|
||||
curveToRelative(0.0f, 7.56f, -10.81f, 11.74f, -17.2f, 13.0f)
|
||||
curveToRelative(-4.89f, 1.0f, -27.66f, 3.0f, -27.89f, 3.0f)
|
||||
horizontalLineToRelative(-0.08f)
|
||||
arcToRelative(41.19f, 41.19f, 0.0f, false, true, -6.0f, 0.43f)
|
||||
curveToRelative(-4.41f, 0.0f, -10.35f, -0.71f, -13.54f, -4.12f)
|
||||
arcToRelative(9.32f, 9.32f, 0.0f, false, true, -2.27f, -7.27f)
|
||||
curveToRelative(0.93f, -14.91f, 33.7f, -16.05f, 34.0f, -16.06f)
|
||||
curveToRelative(1.65f, 0.0f, 3.3f, -0.17f, 5.22f, -0.36f)
|
||||
arcToRelative(107.45f, 107.45f, 0.0f, false, true, 11.78f, -0.64f)
|
||||
moveToRelative(0.0f, -1.0f)
|
||||
curveToRelative(-9.0f, 0.0f, -13.0f, 1.0f, -17.0f, 1.0f)
|
||||
curveToRelative(0.0f, 0.0f, -34.0f, 1.0f, -35.0f, 17.0f)
|
||||
curveToRelative(-0.67f, 10.67f, 9.78f, 12.44f, 16.81f, 12.44f)
|
||||
arcToRelative(41.73f, 41.73f, 0.0f, false, false, 6.19f, -0.44f)
|
||||
reflectiveCurveToRelative(23.0f, -2.0f, 28.0f, -3.0f)
|
||||
reflectiveCurveToRelative(18.0f, -5.0f, 18.0f, -14.0f)
|
||||
reflectiveCurveToRelative(-8.0f, -13.0f, -17.0f, -13.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(106.5f, 132.5f)
|
||||
reflectiveCurveToRelative(-2.0f, 2.0f, -1.0f, 6.0f)
|
||||
reflectiveCurveToRelative(2.0f, 9.0f, 16.0f, 8.0f)
|
||||
arcToRelative(306.78f, 306.78f, 0.0f, false, false, 31.0f, -4.0f)
|
||||
curveToRelative(6.0f, -1.0f, 16.0f, -1.5f, 17.0f, -6.25f)
|
||||
reflectiveCurveToRelative(-2.18f, -11.89f, -12.09f, -13.32f)
|
||||
reflectiveCurveToRelative(-12.93f, -0.11f, -16.92f, 0.23f)
|
||||
reflectiveCurveToRelative(-8.25f, 0.45f, -11.62f, 0.89f)
|
||||
reflectiveCurveToRelative(-16.37f, 2.44f, -22.37f, 8.44f)
|
||||
}
|
||||
private val pathData5 =
|
||||
PathData {
|
||||
moveTo(134.0f, 124.0f)
|
||||
reflectiveCurveToRelative(-4.0f, 2.0f, -4.0f, 6.0f)
|
||||
reflectiveCurveToRelative(3.5f, 11.5f, 10.5f, 10.5f)
|
||||
reflectiveCurveToRelative(9.0f, -5.0f, 9.0f, -11.0f)
|
||||
reflectiveCurveToRelative(-6.58f, -6.54f, -6.58f, -6.54f)
|
||||
reflectiveCurveToRelative(-3.42f, 0.54f, -4.42f, 0.54f)
|
||||
reflectiveCurveTo(134.0f, 124.0f, 134.0f, 124.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData6 =
|
||||
PathData {
|
||||
moveTo(138.0f, 130.5f)
|
||||
arcToRelative(2.0f, 2.5f, 0.0f, true, false, 4.0f, 0.0f)
|
||||
arcToRelative(2.0f, 2.5f, 0.0f, true, false, -4.0f, 0.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData7 =
|
||||
PathData {
|
||||
moveTo(107.5f, 131.5f)
|
||||
reflectiveCurveToRelative(-3.0f, 2.0f, -2.0f, 7.0f)
|
||||
curveToRelative(1.0f, 4.0f, 2.0f, 9.0f, 16.0f, 8.0f)
|
||||
arcToRelative(306.78f, 306.78f, 0.0f, false, false, 31.0f, -4.0f)
|
||||
curveToRelative(6.0f, -1.0f, 16.0f, -1.5f, 17.0f, -6.25f)
|
||||
reflectiveCurveToRelative(-2.18f, -11.89f, -12.09f, -13.32f)
|
||||
reflectiveCurveToRelative(-12.93f, -0.11f, -16.92f, 0.23f)
|
||||
reflectiveCurveToRelative(-8.25f, 0.45f, -11.62f, 0.89f)
|
||||
reflectiveCurveToRelative(-15.37f, 1.44f, -21.37f, 7.44f)
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.LightRed
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Eyes3Scott() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
eyes3Scott(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun eyes3Scott(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor)
|
||||
builder.addPath(pathData2, fill = Black, fillAlpha = 0.4f)
|
||||
builder.addPath(pathData3, fill = Black, stroke = Black, fillAlpha = 0.2f, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData4, stroke = Black, strokeLineWidth = 0.75f)
|
||||
builder.addPath(pathData5, fill = LightRed, stroke = Black, strokeLineWidth = 0.75f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(127.5f, 127.5f)
|
||||
curveToRelative(11.08f, -0.53f, 43.0f, -2.0f, 43.0f, 11.0f)
|
||||
curveToRelative(1.0f, 15.0f, -16.69f, 15.0f, -23.34f, 15.52f)
|
||||
reflectiveCurveToRelative(-37.66f, 1.48f, -47.66f, 0.48f)
|
||||
reflectiveCurveToRelative(-15.0f, -4.0f, -15.0f, -12.0f)
|
||||
reflectiveCurveToRelative(8.0f, -11.0f, 17.0f, -13.0f)
|
||||
reflectiveCurveTo(121.0f, 127.81f, 127.5f, 127.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(94.39f, 132.09f)
|
||||
reflectiveCurveToRelative(2.78f, -4.25f, 37.95f, -4.92f)
|
||||
reflectiveCurveToRelative(37.17f, 6.33f, 38.17f, 11.33f)
|
||||
reflectiveCurveToRelative(-3.0f, 10.76f, -6.0f, 11.88f)
|
||||
curveToRelative(0.0f, 0.0f, 5.52f, -6.38f, -2.24f, -11.63f)
|
||||
reflectiveCurveToRelative(-22.72f, -6.58f, -29.74f, -6.91f)
|
||||
reflectiveCurveToRelative(-24.86f, -0.88f, -27.94f, -0.61f)
|
||||
reflectiveCurveTo(96.28f, 131.67f, 94.39f, 132.09f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(127.5f, 127.5f)
|
||||
curveToRelative(11.08f, -0.53f, 43.0f, -2.0f, 43.0f, 11.0f)
|
||||
curveToRelative(1.0f, 15.0f, -16.69f, 15.0f, -23.34f, 15.52f)
|
||||
reflectiveCurveToRelative(-37.66f, 1.48f, -47.66f, 0.48f)
|
||||
reflectiveCurveToRelative(-15.0f, -4.0f, -15.0f, -12.0f)
|
||||
reflectiveCurveToRelative(8.0f, -11.0f, 17.0f, -13.0f)
|
||||
reflectiveCurveTo(121.0f, 127.81f, 127.5f, 127.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(121.5f, 131.5f)
|
||||
curveToRelative(-19.0f, 0.0f, -36.0f, -3.0f, -37.0f, 11.0f)
|
||||
reflectiveCurveToRelative(19.0f, 12.0f, 40.0f, 12.0f)
|
||||
reflectiveCurveToRelative(42.0f, 0.0f, 42.0f, -9.0f)
|
||||
curveTo(166.5f, 134.5f, 140.5f, 131.5f, 121.5f, 131.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData5 =
|
||||
PathData {
|
||||
moveTo(121.5f, 140.5f)
|
||||
reflectiveCurveToRelative(29.0f, 0.0f, 32.0f, 1.0f)
|
||||
reflectiveCurveToRelative(2.0f, 4.0f, -1.0f, 4.0f)
|
||||
reflectiveCurveToRelative(-22.0f, -1.0f, -31.0f, -1.0f)
|
||||
reflectiveCurveToRelative(-22.0f, 1.0f, -26.0f, 0.0f)
|
||||
reflectiveCurveToRelative(-1.0f, -2.0f, 11.0f, -3.0f)
|
||||
reflectiveCurveTo(121.5f, 140.5f, 121.5f, 140.5f)
|
||||
close()
|
||||
}
|
||||
+123
@@ -0,0 +1,123 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.Brown
|
||||
import com.vitorpamplona.amethyst.commons.LightRed
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Eyes4RoundSingle() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
eyes4RoundSingle(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun eyes4RoundSingle(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor)
|
||||
builder.addPath(pathData2, fill = Black, stroke = Black, fillAlpha = 0.4f, strokeLineWidth = 0.75f)
|
||||
builder.addPath(pathData3, fill = Black, stroke = Black, fillAlpha = 0.4f, strokeLineWidth = 0.75f)
|
||||
builder.addPath(pathData4, fill = Brown, stroke = Black, strokeLineWidth = 0.5f)
|
||||
builder.addPath(pathData5, fill = LightRed)
|
||||
builder.addPath(pathData6, fill = Brown, stroke = Black, strokeLineWidth = 0.75f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(131.5f, 119.5f)
|
||||
curveToRelative(-5.0f, 0.0f, -19.0f, 2.0f, -19.0f, 16.0f)
|
||||
curveToRelative(0.0f, 15.0f, 10.0f, 18.0f, 18.0f, 18.0f)
|
||||
reflectiveCurveToRelative(17.0f, -7.0f, 16.0f, -19.0f)
|
||||
reflectiveCurveTo(136.5f, 119.5f, 131.5f, 119.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(131.5f, 119.5f)
|
||||
curveToRelative(-5.0f, 0.0f, -19.0f, 2.0f, -19.0f, 16.0f)
|
||||
curveToRelative(0.0f, 15.0f, 10.0f, 18.0f, 18.0f, 18.0f)
|
||||
reflectiveCurveToRelative(17.0f, -7.0f, 16.0f, -19.0f)
|
||||
reflectiveCurveTo(136.5f, 119.5f, 131.5f, 119.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(132.0f, 124.0f)
|
||||
lineToRelative(-0.5f, 0.0f)
|
||||
curveToRelative(-2.51f, 0.0f, -13.61f, 0.38f, -14.5f, 11.0f)
|
||||
curveToRelative(-1.0f, 12.0f, 8.5f, 13.5f, 12.5f, 13.5f)
|
||||
reflectiveCurveToRelative(13.0f, -3.0f, 13.0f, -13.0f)
|
||||
curveTo(142.5f, 124.5f, 132.0f, 124.0f, 132.0f, 124.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(130.5f, 124.5f)
|
||||
reflectiveCurveToRelative(-10.0f, 1.0f, -10.0f, 10.0f)
|
||||
reflectiveCurveToRelative(5.0f, 11.0f, 11.0f, 11.0f)
|
||||
arcToRelative(11.1f, 11.1f, 0.0f, false, false, 11.0f, -11.0f)
|
||||
curveTo(142.5f, 128.5f, 136.5f, 124.5f, 130.5f, 124.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData5 =
|
||||
PathData {
|
||||
moveTo(129.5f, 134.5f)
|
||||
arcToRelative(2.0f, 3.0f, 0.0f, true, false, 4.0f, 0.0f)
|
||||
arcToRelative(2.0f, 3.0f, 0.0f, true, false, -4.0f, 0.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData6 =
|
||||
PathData {
|
||||
moveTo(147.5f, 133.5f)
|
||||
horizontalLineToRelative(6.0f)
|
||||
reflectiveCurveToRelative(1.0f, 0.0f, 0.0f, 1.0f)
|
||||
arcToRelative(7.69f, 7.69f, 0.0f, false, true, -3.0f, 2.0f)
|
||||
horizontalLineToRelative(-4.0f)
|
||||
verticalLineToRelative(-2.0f)
|
||||
close()
|
||||
moveTo(112.49f, 135.15f)
|
||||
arcToRelative(29.28f, 29.28f, 0.0f, false, true, -3.29f, 0.35f)
|
||||
curveToRelative(-1.1f, 0.0f, -1.7f, 1.0f, -2.2f, 2.0f)
|
||||
arcToRelative(0.79f, 0.79f, 0.0f, false, false, 0.2f, 0.57f)
|
||||
arcToRelative(1.56f, 1.56f, 0.0f, false, false, 0.94f, 0.36f)
|
||||
arcToRelative(18.66f, 18.66f, 0.0f, false, false, 2.15f, 0.07f)
|
||||
curveToRelative(2.2f, 0.0f, 2.32f, -0.35f, 2.32f, -0.35f)
|
||||
close()
|
||||
}
|
||||
+119
@@ -0,0 +1,119 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.Brown
|
||||
import com.vitorpamplona.amethyst.commons.LightRed
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Eyes5RoundSmall() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
eyes5RoundSmall(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun eyes5RoundSmall(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor)
|
||||
builder.addPath(pathData3, fill = Black, stroke = Black, fillAlpha = 0.55f, strokeLineWidth = 0.75f)
|
||||
builder.addPath(pathData4, fill = Brown, stroke = Black, strokeLineWidth = 0.5f)
|
||||
builder.addPath(pathData5, fill = LightRed)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(112.71f, 130.0f)
|
||||
lineToRelative(-0.49f, 0.0f)
|
||||
curveToRelative(-2.46f, 0.0f, -13.35f, 0.38f, -14.22f, 11.0f)
|
||||
curveToRelative(-1.0f, 12.0f, 8.33f, 13.5f, 12.26f, 13.5f)
|
||||
reflectiveCurveToRelative(12.75f, -3.0f, 12.75f, -13.0f)
|
||||
curveTo(123.0f, 130.5f, 112.71f, 130.0f, 112.71f, 130.0f)
|
||||
close()
|
||||
moveTo(156.71f, 130.0f)
|
||||
lineToRelative(-0.49f, 0.0f)
|
||||
curveToRelative(-2.46f, 0.0f, -13.35f, 0.38f, -14.22f, 11.0f)
|
||||
curveToRelative(-1.0f, 12.0f, 8.33f, 13.5f, 12.26f, 13.5f)
|
||||
reflectiveCurveToRelative(12.75f, -3.0f, 12.75f, -13.0f)
|
||||
curveTo(167.0f, 130.5f, 156.71f, 130.0f, 156.71f, 130.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(112.71f, 130.0f)
|
||||
lineToRelative(-0.49f, 0.0f)
|
||||
curveToRelative(-2.46f, 0.0f, -13.35f, 0.38f, -14.22f, 11.0f)
|
||||
curveToRelative(-1.0f, 12.0f, 8.33f, 13.5f, 12.26f, 13.5f)
|
||||
reflectiveCurveToRelative(12.75f, -3.0f, 12.75f, -13.0f)
|
||||
curveTo(123.0f, 130.5f, 112.71f, 130.0f, 112.71f, 130.0f)
|
||||
close()
|
||||
moveTo(156.71f, 130.0f)
|
||||
lineToRelative(-0.49f, 0.0f)
|
||||
curveToRelative(-2.46f, 0.0f, -13.35f, 0.38f, -14.22f, 11.0f)
|
||||
curveToRelative(-1.0f, 12.0f, 8.33f, 13.5f, 12.26f, 13.5f)
|
||||
reflectiveCurveToRelative(12.75f, -3.0f, 12.75f, -13.0f)
|
||||
curveTo(167.0f, 130.5f, 156.71f, 130.0f, 156.71f, 130.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(111.23f, 130.5f)
|
||||
reflectiveCurveToRelative(-9.8f, 1.0f, -9.8f, 10.0f)
|
||||
reflectiveCurveToRelative(4.9f, 11.0f, 10.78f, 11.0f)
|
||||
arcToRelative(11.0f, 11.0f, 0.0f, false, false, 10.78f, -11.0f)
|
||||
curveTo(123.0f, 134.5f, 117.12f, 130.5f, 111.23f, 130.5f)
|
||||
close()
|
||||
moveTo(155.23f, 130.5f)
|
||||
reflectiveCurveToRelative(-9.8f, 1.0f, -9.8f, 10.0f)
|
||||
reflectiveCurveToRelative(4.9f, 11.0f, 10.78f, 11.0f)
|
||||
arcToRelative(11.0f, 11.0f, 0.0f, false, false, 10.78f, -11.0f)
|
||||
curveTo(167.0f, 134.5f, 161.12f, 130.5f, 155.23f, 130.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData5 =
|
||||
PathData {
|
||||
moveTo(110.26f, 140.5f)
|
||||
arcToRelative(1.96f, 3.0f, 0.0f, true, false, 3.92f, 0.0f)
|
||||
arcToRelative(1.96f, 3.0f, 0.0f, true, false, -3.92f, 0.0f)
|
||||
close()
|
||||
moveTo(154.26f, 140.5f)
|
||||
arcToRelative(1.96f, 3.0f, 0.0f, true, false, 3.92f, 0.0f)
|
||||
arcToRelative(1.96f, 3.0f, 0.0f, true, false, -3.92f, 0.0f)
|
||||
close()
|
||||
}
|
||||
@@ -0,0 +1,148 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.Brown
|
||||
import com.vitorpamplona.amethyst.commons.LightYellow
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Eyes6WallE() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
eyes6WallE(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun eyes6WallE(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor)
|
||||
builder.addPath(pathData2, fill = Black, stroke = Black, fillAlpha = 0.6f, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData3, fill = Brown, stroke = Black, strokeLineWidth = 0.5f)
|
||||
builder.addPath(pathData4, fill = LightYellow, stroke = Black, strokeLineWidth = 0.5f)
|
||||
builder.addPath(pathData6, fill = Black)
|
||||
builder.addPath(pathData8, stroke = Black, strokeLineWidth = 1.0f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(99.5f, 142.5f)
|
||||
reflectiveCurveToRelative(0.0f, -10.0f, 12.0f, -14.0f)
|
||||
reflectiveCurveToRelative(26.0f, -4.0f, 26.0f, -4.0f)
|
||||
reflectiveCurveToRelative(20.0f, -1.0f, 25.0f, 2.0f)
|
||||
reflectiveCurveToRelative(5.0f, 9.0f, 5.0f, 11.0f)
|
||||
reflectiveCurveToRelative(-2.0f, 11.0f, -19.0f, 13.0f)
|
||||
reflectiveCurveToRelative(-33.0f, 3.0f, -33.0f, 3.0f)
|
||||
reflectiveCurveTo(99.5f, 153.5f, 99.5f, 142.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(99.5f, 142.5f)
|
||||
reflectiveCurveToRelative(0.0f, -10.0f, 12.0f, -14.0f)
|
||||
reflectiveCurveToRelative(26.0f, -4.0f, 26.0f, -4.0f)
|
||||
reflectiveCurveToRelative(20.0f, -1.0f, 25.0f, 2.0f)
|
||||
reflectiveCurveToRelative(5.0f, 9.0f, 5.0f, 11.0f)
|
||||
reflectiveCurveToRelative(-2.0f, 11.0f, -19.0f, 13.0f)
|
||||
reflectiveCurveToRelative(-33.0f, 3.0f, -33.0f, 3.0f)
|
||||
reflectiveCurveTo(99.5f, 153.5f, 99.5f, 142.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(107.16f, 130.47f)
|
||||
reflectiveCurveTo(105.0f, 133.0f, 105.0f, 138.0f)
|
||||
reflectiveCurveToRelative(2.0f, 9.0f, 8.0f, 10.0f)
|
||||
reflectiveCurveToRelative(20.5f, -1.5f, 20.5f, -1.5f)
|
||||
reflectiveCurveToRelative(11.0f, -2.0f, 18.0f, -2.0f)
|
||||
reflectiveCurveToRelative(15.74f, -2.78f, 15.87f, -5.89f)
|
||||
reflectiveCurveToRelative(-0.17f, -7.11f, -2.52f, -10.11f)
|
||||
reflectiveCurveToRelative(-7.12f, -3.56f, -10.24f, -3.78f)
|
||||
reflectiveCurveToRelative(-12.52f, -0.54f, -14.82f, -0.38f)
|
||||
reflectiveCurveToRelative(-10.17f, 0.47f, -12.23f, 0.81f)
|
||||
reflectiveCurveToRelative(-7.31f, 1.1f, -7.31f, 1.1f)
|
||||
lineToRelative(-7.61f, 1.87f)
|
||||
reflectiveCurveTo(107.83f, 129.44f, 107.16f, 130.47f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(109.0f, 135.0f)
|
||||
reflectiveCurveToRelative(-1.0f, 11.0f, 10.0f, 10.0f)
|
||||
reflectiveCurveToRelative(10.0f, -10.0f, 10.0f, -10.0f)
|
||||
reflectiveCurveToRelative(0.0f, -6.0f, -3.0f, -8.0f)
|
||||
reflectiveCurveToRelative(-2.85f, -1.25f, -2.85f, -1.25f)
|
||||
reflectiveCurveToRelative(-11.28f, 2.64f, -12.21f, 2.94f)
|
||||
reflectiveCurveTo(109.0f, 133.0f, 109.0f, 135.0f)
|
||||
close()
|
||||
moveTo(142.0f, 125.0f)
|
||||
reflectiveCurveToRelative(-3.0f, 2.0f, -3.0f, 7.0f)
|
||||
reflectiveCurveToRelative(3.5f, 10.5f, 9.5f, 10.5f)
|
||||
reflectiveCurveToRelative(12.0f, -4.0f, 12.0f, -10.0f)
|
||||
reflectiveCurveToRelative(-3.66f, -7.5f, -3.66f, -7.5f)
|
||||
lineToRelative(-4.78f, -0.47f)
|
||||
lineToRelative(-4.22f, -0.16f)
|
||||
horizontalLineToRelative(-3.44f)
|
||||
lineToRelative(-1.91f, 0.13f)
|
||||
close()
|
||||
}
|
||||
private val pathData6 =
|
||||
PathData {
|
||||
moveTo(119.42f, 133.0f)
|
||||
reflectiveCurveToRelative(-1.17f, 0.0f, -1.17f, 2.5f)
|
||||
reflectiveCurveToRelative(1.17f, 2.5f, 1.17f, 2.5f)
|
||||
arcToRelative(2.51f, 2.51f, 0.0f, false, false, 0.0f, -5.0f)
|
||||
close()
|
||||
moveTo(150.08f, 130.0f)
|
||||
arcToRelative(1.8f, 1.8f, 0.0f, false, false, -1.82f, 1.94f)
|
||||
curveToRelative(-0.07f, 2.0f, 0.78f, 3.0f, 1.65f, 3.06f)
|
||||
reflectiveCurveToRelative(1.78f, -0.94f, 1.85f, -2.94f)
|
||||
arcToRelative(1.8f, 1.8f, 0.0f, false, false, -1.68f, -2.06f)
|
||||
}
|
||||
private val pathData8 =
|
||||
PathData {
|
||||
moveTo(99.5f, 142.5f)
|
||||
reflectiveCurveToRelative(0.0f, -10.0f, 12.0f, -14.0f)
|
||||
reflectiveCurveToRelative(26.0f, -4.0f, 26.0f, -4.0f)
|
||||
reflectiveCurveToRelative(20.0f, -1.0f, 25.0f, 2.0f)
|
||||
reflectiveCurveToRelative(5.0f, 9.0f, 5.0f, 11.0f)
|
||||
reflectiveCurveToRelative(-2.0f, 11.0f, -19.0f, 13.0f)
|
||||
reflectiveCurveToRelative(-33.0f, 3.0f, -33.0f, 3.0f)
|
||||
reflectiveCurveTo(99.5f, 153.5f, 99.5f, 142.5f)
|
||||
close()
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.Brown
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Eyes7Bar() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
eyes7Bar(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun eyes7Bar(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor)
|
||||
builder.addPath(pathData2, fill = Black, stroke = Black, fillAlpha = 0.4f, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData3, fill = Brown, stroke = Black, strokeLineWidth = 0.5f)
|
||||
builder.addPath(pathData4, fill = Brown, stroke = Black, strokeLineWidth = 0.75f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(110.0f, 135.0f)
|
||||
reflectiveCurveToRelative(-1.5f, 6.5f, 0.5f, 6.5f)
|
||||
horizontalLineToRelative(45.0f)
|
||||
verticalLineToRelative(-6.0f)
|
||||
reflectiveCurveToRelative(0.0f, -2.0f, -3.0f, -2.0f)
|
||||
horizontalLineToRelative(-38.0f)
|
||||
curveTo(111.5f, 133.5f, 110.5f, 133.5f, 110.0f, 135.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(110.0f, 135.0f)
|
||||
reflectiveCurveToRelative(-1.5f, 6.5f, 0.5f, 6.5f)
|
||||
horizontalLineToRelative(45.0f)
|
||||
verticalLineToRelative(-6.0f)
|
||||
reflectiveCurveToRelative(0.0f, -2.0f, -3.0f, -2.0f)
|
||||
horizontalLineToRelative(-38.0f)
|
||||
curveTo(111.5f, 133.5f, 110.5f, 133.5f, 110.0f, 135.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(110.83f, 133.88f)
|
||||
arcToRelative(25.17f, 25.17f, 0.0f, false, false, 2.67f, 4.62f)
|
||||
curveToRelative(1.0f, 1.0f, 5.0f, 0.0f, 9.0f, 0.0f)
|
||||
horizontalLineToRelative(31.0f)
|
||||
reflectiveCurveToRelative(2.0f, -0.12f, 2.0f, 0.94f)
|
||||
verticalLineTo(135.5f)
|
||||
reflectiveCurveToRelative(0.0f, -2.0f, -3.0f, -2.0f)
|
||||
horizontalLineTo(113.31f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(113.5f, 138.5f)
|
||||
lineTo(109.9f, 141.21f)
|
||||
}
|
||||
+128
@@ -0,0 +1,128 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.Brown
|
||||
import com.vitorpamplona.amethyst.commons.LightYellow
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Eyes8SmallBar() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
eyes8SmallBar(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun eyes8SmallBar(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor)
|
||||
builder.addPath(pathData2, stroke = Black, strokeLineWidth = 0.75f)
|
||||
builder.addPath(pathData3, fill = Brown, stroke = Black, strokeLineWidth = 0.5f)
|
||||
builder.addPath(pathData4, fill = Black, stroke = Black, fillAlpha = 0.4f, strokeLineWidth = 0.75f)
|
||||
builder.addPath(pathData5, fill = LightYellow)
|
||||
builder.addPath(pathData7, fill = Black, stroke = Black, fillAlpha = 0.2f, strokeLineWidth = 0.75f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(127.5f, 124.5f)
|
||||
reflectiveCurveToRelative(-43.0f, -1.0f, -45.0f, 16.0f)
|
||||
curveToRelative(-1.5f, 15.5f, 25.0f, 13.0f, 25.0f, 13.0f)
|
||||
horizontalLineToRelative(35.0f)
|
||||
reflectiveCurveToRelative(27.0f, 0.0f, 27.0f, -13.0f)
|
||||
reflectiveCurveTo(158.5f, 123.5f, 127.5f, 124.5f)
|
||||
close()
|
||||
}
|
||||
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(127.5f, 124.5f)
|
||||
reflectiveCurveToRelative(-43.0f, -1.0f, -45.0f, 16.0f)
|
||||
curveToRelative(-1.0f, 15.0f, 21.0f, 13.0f, 25.0f, 13.0f)
|
||||
horizontalLineToRelative(35.0f)
|
||||
reflectiveCurveToRelative(27.0f, 0.0f, 27.0f, -13.0f)
|
||||
reflectiveCurveTo(158.5f, 123.5f, 127.5f, 124.5f)
|
||||
close()
|
||||
}
|
||||
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(126.0f, 132.0f)
|
||||
curveToRelative(-15.5f, 0.5f, -28.5f, -1.5f, -30.5f, 6.5f)
|
||||
curveToRelative(-2.0f, 9.0f, 16.0f, 7.0f, 22.0f, 7.0f)
|
||||
reflectiveCurveToRelative(27.0f, -1.0f, 30.0f, -1.0f)
|
||||
reflectiveCurveToRelative(10.0f, -1.0f, 10.0f, -3.0f)
|
||||
curveTo(157.5f, 133.5f, 142.5f, 131.5f, 126.0f, 132.0f)
|
||||
close()
|
||||
}
|
||||
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(90.5f, 140.5f)
|
||||
curveToRelative(0.0f, 1.0f, -5.0f, 9.0f, 32.0f, 8.0f)
|
||||
reflectiveCurveToRelative(35.0f, -4.33f, 35.0f, -7.67f)
|
||||
reflectiveCurveToRelative(-8.64f, -9.23f, -21.32f, -8.78f)
|
||||
reflectiveCurveTo(95.5f, 128.5f, 90.5f, 140.5f)
|
||||
close()
|
||||
}
|
||||
|
||||
private val pathData5 =
|
||||
PathData {
|
||||
moveTo(109.5f, 139.0f)
|
||||
arcToRelative(2.5f, 3.5f, 0.0f, true, false, 5.0f, 0.0f)
|
||||
arcToRelative(2.5f, 3.5f, 0.0f, true, false, -5.0f, 0.0f)
|
||||
close()
|
||||
moveTo(135.5f, 139.0f)
|
||||
arcToRelative(2.5f, 3.5f, 0.0f, true, false, 5.0f, 0.0f)
|
||||
arcToRelative(2.5f, 3.5f, 0.0f, true, false, -5.0f, 0.0f)
|
||||
close()
|
||||
}
|
||||
|
||||
private val pathData7 =
|
||||
PathData {
|
||||
moveTo(93.5f, 129.5f)
|
||||
reflectiveCurveToRelative(27.0f, -3.0f, 41.0f, -2.0f)
|
||||
curveToRelative(11.0f, 0.0f, 24.0f, 3.0f, 29.0f, 10.0f)
|
||||
reflectiveCurveToRelative(1.39f, 10.59f, -0.3f, 11.8f)
|
||||
reflectiveCurveToRelative(6.3f, -2.8f, 6.3f, -8.8f)
|
||||
reflectiveCurveToRelative(-1.61f, -11.29f, -14.3f, -14.65f)
|
||||
reflectiveCurveToRelative(-30.2f, -1.18f, -33.95f, -1.26f)
|
||||
reflectiveCurveTo(98.5f, 126.5f, 93.5f, 129.5f)
|
||||
close()
|
||||
}
|
||||
+106
@@ -0,0 +1,106 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Eyes9Shield() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
eyes9Shield(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun eyes9Shield(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData2, fill = Black, fillAlpha = 0.4f)
|
||||
builder.addPath(pathData3, fill = Black, fillAlpha = 0.4f)
|
||||
builder.addPath(pathData6, fill = Black, stroke = Black, fillAlpha = 0.4f, strokeLineWidth = 0.75f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(129.5f, 123.5f)
|
||||
reflectiveCurveToRelative(-30.0f, 3.0f, -31.0f, 15.0f)
|
||||
reflectiveCurveToRelative(8.0f, 13.0f, 15.0f, 14.0f)
|
||||
reflectiveCurveToRelative(20.0f, -2.0f, 26.0f, -3.0f)
|
||||
reflectiveCurveToRelative(25.0f, 1.0f, 27.0f, -13.0f)
|
||||
reflectiveCurveToRelative(-17.0f, -14.0f, -17.0f, -14.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(116.92f, 125.8f)
|
||||
reflectiveCurveToRelative(-15.42f, 2.7f, -16.42f, 12.7f)
|
||||
reflectiveCurveToRelative(15.5f, 13.0f, 24.25f, 10.5f)
|
||||
arcTo(97.37f, 97.37f, 0.0f, false, true, 150.0f, 145.44f)
|
||||
curveToRelative(6.5f, 0.06f, 16.78f, -3.69f, 16.64f, -11.31f)
|
||||
reflectiveCurveTo(157.5f, 122.5f, 149.5f, 122.5f)
|
||||
reflectiveCurveToRelative(-21.12f, 1.13f, -21.12f, 1.13f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(130.5f, 123.5f)
|
||||
lineToRelative(-8.0f, 25.5f)
|
||||
curveToRelative(1.6f, -0.06f, 5.38f, -0.65f, 9.0f, -1.2f)
|
||||
lineToRelative(7.0f, -24.8f)
|
||||
arcTo(47.26f, 47.26f, 0.0f, false, true, 130.5f, 123.5f)
|
||||
close()
|
||||
moveTo(120.77f, 124.91f)
|
||||
lineToRelative(-7.77f, 25.09f)
|
||||
lineToRelative(5.0f, 0.0f)
|
||||
lineToRelative(7.41f, -25.94f)
|
||||
lineToRelative(-4.64f, 0.85f)
|
||||
close()
|
||||
}
|
||||
private val pathData6 =
|
||||
PathData {
|
||||
moveTo(106.61f, 129.46f)
|
||||
reflectiveCurveToRelative(-6.11f, 3.0f, -6.11f, 9.0f)
|
||||
reflectiveCurveToRelative(5.0f, 13.0f, 20.0f, 11.0f)
|
||||
reflectiveCurveToRelative(23.0f, -4.0f, 28.0f, -4.0f)
|
||||
reflectiveCurveToRelative(17.29f, -2.5f, 18.15f, -10.25f)
|
||||
curveToRelative(0.0f, 0.0f, 0.3f, 10.92f, -14.42f, 13.09f)
|
||||
reflectiveCurveToRelative(-16.25f, 1.2f, -21.0f, 2.68f)
|
||||
reflectiveCurveToRelative(-28.06f, 4.23f, -32.4f, -7.15f)
|
||||
curveTo(98.84f, 143.87f, 95.71f, 134.43f, 106.61f, 129.46f)
|
||||
close()
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Face0C3po() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
face0C3po(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun face0C3po(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.5f)
|
||||
builder.addPath(pathData2, fill = Black, fillAlpha = 0.4f)
|
||||
builder.addPath(pathData5, fill = Black, fillAlpha = 0.2f)
|
||||
builder.addPath(pathData6, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData7, fill = Black, stroke = Black, fillAlpha = 0.2f, strokeLineWidth = 0.75f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(144.5f, 87.5f)
|
||||
reflectiveCurveToRelative(-51.0f, 3.0f, -53.0f, 55.0f)
|
||||
curveToRelative(0.0f, 0.0f, 0.0f, 27.0f, 5.0f, 42.0f)
|
||||
reflectiveCurveToRelative(10.0f, 38.0f, 10.0f, 38.0f)
|
||||
lineToRelative(16.0f, 16.0f)
|
||||
lineToRelative(1.0f, 5.0f)
|
||||
reflectiveCurveToRelative(13.5f, -1.5f, 19.0f, -1.0f)
|
||||
reflectiveCurveToRelative(14.0f, 2.0f, 14.0f, 2.0f)
|
||||
reflectiveCurveToRelative(6.0f, -13.0f, 19.0f, -19.0f)
|
||||
reflectiveCurveToRelative(18.0f, -8.0f, 18.0f, -8.0f)
|
||||
reflectiveCurveToRelative(-4.0f, -35.0f, -4.0f, -52.0f)
|
||||
reflectiveCurveTo(201.5f, 88.5f, 144.5f, 87.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(115.14f, 97.69f)
|
||||
reflectiveCurveToRelative(6.36f, 5.81f, -2.64f, 14.81f)
|
||||
reflectiveCurveToRelative(-16.0f, 23.0f, -13.0f, 44.0f)
|
||||
reflectiveCurveToRelative(10.0f, 40.0f, 10.0f, 50.0f)
|
||||
reflectiveCurveToRelative(-0.67f, 18.19f, -0.67f, 18.19f)
|
||||
lineToRelative(-2.33f, -2.19f)
|
||||
reflectiveCurveToRelative(-15.0f, -45.0f, -15.0f, -76.5f)
|
||||
reflectiveCurveTo(115.14f, 97.69f, 115.14f, 97.69f)
|
||||
close()
|
||||
}
|
||||
private val pathData5 =
|
||||
PathData {
|
||||
moveTo(158.5f, 92.5f)
|
||||
reflectiveCurveToRelative(20.0f, 15.0f, 18.0f, 32.0f)
|
||||
reflectiveCurveToRelative(-8.0f, 28.0f, -12.0f, 29.0f)
|
||||
arcToRelative(19.27f, 19.27f, 0.0f, false, true, 8.0f, 16.0f)
|
||||
curveToRelative(0.0f, 11.0f, 1.0f, 50.0f, 1.0f, 50.0f)
|
||||
lineToRelative(0.34f, 6.83f)
|
||||
lineToRelative(19.66f, -8.83f)
|
||||
reflectiveCurveToRelative(-3.77f, -39.0f, -3.38f, -63.49f)
|
||||
reflectiveCurveToRelative(1.38f, -55.13f, -31.62f, -64.82f)
|
||||
curveTo(158.5f, 89.19f, 155.5f, 90.5f, 158.5f, 92.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData6 =
|
||||
PathData {
|
||||
moveTo(124.5f, 211.5f)
|
||||
lineToRelative(37.0f, -1.0f)
|
||||
lineToRelative(4.76f, 21.18f)
|
||||
reflectiveCurveToRelative(-8.76f, 8.82f, -8.76f, 11.82f)
|
||||
curveToRelative(-2.0f, 1.0f, -10.0f, -1.0f, -18.0f, -1.0f)
|
||||
arcToRelative(147.84f, 147.84f, 0.0f, false, false, -16.0f, 1.0f)
|
||||
reflectiveCurveTo(118.5f, 224.5f, 124.5f, 211.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData7 =
|
||||
PathData {
|
||||
moveTo(159.5f, 212.5f)
|
||||
arcToRelative(19.89f, 19.89f, 0.0f, false, false, -4.0f, 14.0f)
|
||||
curveToRelative(1.0f, 8.0f, 2.0f, 17.0f, 2.0f, 17.0f)
|
||||
lineToRelative(9.0f, -12.0f)
|
||||
lineToRelative(-5.0f, -21.0f)
|
||||
close()
|
||||
}
|
||||
@@ -0,0 +1,126 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Face1Rock() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
face1Rock(SolidColor(Color.Yellow), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun face1Rock(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.5f)
|
||||
builder.addPath(pathData2, fill = Black, fillAlpha = 0.2f)
|
||||
builder.addPath(pathData5, fill = Black, stroke = Black, fillAlpha = 0.2f, strokeLineWidth = 0.75f)
|
||||
builder.addPath(pathData7, fill = Black, fillAlpha = 0.4f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(147.5f, 88.5f)
|
||||
reflectiveCurveToRelative(-64.0f, 9.0f, -63.0f, 72.0f)
|
||||
curveToRelative(0.0f, 0.0f, -6.0f, 51.0f, 54.0f, 50.0f)
|
||||
curveToRelative(0.0f, 0.0f, 66.0f, -6.0f, 65.0f, -53.0f)
|
||||
reflectiveCurveTo(172.0f, 87.0f, 147.5f, 88.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(154.5f, 90.5f)
|
||||
reflectiveCurveToRelative(18.0f, 12.0f, 25.0f, 47.0f)
|
||||
reflectiveCurveToRelative(2.0f, 48.0f, -7.0f, 55.0f)
|
||||
reflectiveCurveToRelative(-24.12f, 17.37f, -42.56f, 17.68f)
|
||||
curveToRelative(0.0f, 0.0f, 56.6f, 1.84f, 70.58f, -33.42f)
|
||||
curveToRelative(0.73f, -1.85f, 1.84f, -5.7f, 1.84f, -5.7f)
|
||||
reflectiveCurveTo(185.5f, 158.5f, 183.17f, 137.0f)
|
||||
curveToRelative(-1.67f, -14.45f, 2.33f, -24.45f, 6.49f, -24.63f)
|
||||
arcToRelative(7.0f, 7.0f, 0.0f, false, false, -0.63f, -1.08f)
|
||||
curveTo(179.68f, 98.0f, 160.0f, 87.0f, 154.5f, 90.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(147.5f, 87.5f)
|
||||
reflectiveCurveToRelative(-64.0f, 9.0f, -63.0f, 72.0f)
|
||||
curveToRelative(0.0f, 0.0f, -6.0f, 51.0f, 54.0f, 50.0f)
|
||||
curveToRelative(0.0f, 0.0f, 66.0f, -6.0f, 65.0f, -53.0f)
|
||||
reflectiveCurveTo(170.5f, 85.5f, 147.5f, 87.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(147.5f, 88.5f)
|
||||
reflectiveCurveToRelative(-64.0f, 9.0f, -63.0f, 72.0f)
|
||||
curveToRelative(0.0f, 0.0f, -6.0f, 51.0f, 54.0f, 50.0f)
|
||||
curveToRelative(0.0f, 0.0f, 66.0f, -6.0f, 65.0f, -53.0f)
|
||||
reflectiveCurveTo(171.5f, 86.5f, 147.5f, 88.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData5 =
|
||||
PathData {
|
||||
moveTo(92.22f, 125.67f)
|
||||
reflectiveCurveToRelative(2.28f, 14.83f, 0.28f, 24.83f)
|
||||
reflectiveCurveToRelative(-7.67f, 21.0f, -7.67f, 21.0f)
|
||||
reflectiveCurveTo(80.94f, 147.85f, 92.22f, 125.67f)
|
||||
close()
|
||||
moveTo(187.5f, 113.5f)
|
||||
reflectiveCurveToRelative(-7.0f, 10.0f, -4.0f, 26.0f)
|
||||
reflectiveCurveToRelative(12.0f, 27.67f, 18.5f, 29.83f)
|
||||
curveToRelative(0.0f, 0.0f, 5.83f, -35.17f, -12.83f, -57.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData7 =
|
||||
PathData {
|
||||
moveTo(112.5f, 112.5f)
|
||||
reflectiveCurveToRelative(-5.0f, -1.0f, -10.0f, 6.0f)
|
||||
reflectiveCurveToRelative(-6.0f, 11.0f, -5.0f, 13.0f)
|
||||
reflectiveCurveToRelative(7.0f, 1.0f, 11.0f, -7.0f)
|
||||
reflectiveCurveTo(114.5f, 114.5f, 112.5f, 112.5f)
|
||||
close()
|
||||
moveTo(117.5f, 102.5f)
|
||||
reflectiveCurveToRelative(-5.0f, 4.0f, -2.0f, 7.0f)
|
||||
arcToRelative(6.31f, 6.31f, 0.0f, false, false, 9.0f, 0.0f)
|
||||
curveToRelative(2.0f, -2.0f, 2.0f, -6.0f, -1.0f, -7.0f)
|
||||
arcTo(10.56f, 10.56f, 0.0f, false, false, 117.5f, 102.5f)
|
||||
close()
|
||||
}
|
||||
@@ -0,0 +1,101 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Face2Long() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
face2Long(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun face2Long(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.5f)
|
||||
builder.addPath(pathData4, fill = Black, fillAlpha = 0.2f)
|
||||
builder.addPath(pathData5, fill = Black, fillAlpha = 0.4f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(147.0f, 88.0f)
|
||||
curveToRelative(-20.15f, -0.5f, -56.5f, 14.5f, -56.5f, 57.5f)
|
||||
curveToRelative(0.0f, 0.0f, 1.0f, 22.0f, 6.0f, 41.0f)
|
||||
reflectiveCurveToRelative(10.0f, 34.0f, 10.0f, 37.0f)
|
||||
curveToRelative(0.0f, 0.0f, 3.0f, 12.0f, 25.0f, 11.0f)
|
||||
reflectiveCurveToRelative(62.0f, -15.0f, 62.0f, -15.0f)
|
||||
reflectiveCurveToRelative(-2.0f, -31.0f, -3.0f, -49.0f)
|
||||
reflectiveCurveTo(196.79f, 89.24f, 147.0f, 88.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(135.5f, 96.5f)
|
||||
reflectiveCurveToRelative(36.0f, -4.0f, 45.0f, 43.0f)
|
||||
curveToRelative(0.0f, 0.0f, 3.0f, 24.0f, 3.0f, 35.0f)
|
||||
reflectiveCurveToRelative(-1.0f, 25.0f, 1.0f, 36.0f)
|
||||
lineToRelative(2.0f, 11.0f)
|
||||
lineToRelative(7.0f, -2.0f)
|
||||
reflectiveCurveToRelative(-2.53f, -55.76f, -3.27f, -70.88f)
|
||||
reflectiveCurveTo(188.5f, 90.81f, 150.0f, 88.16f)
|
||||
curveToRelative(0.0f, 0.0f, -19.78f, -1.0f, -33.64f, 8.7f)
|
||||
curveToRelative(0.0f, 0.0f, -4.86f, 4.65f, 0.14f, 2.65f)
|
||||
reflectiveCurveTo(132.5f, 96.5f, 135.5f, 96.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData5 =
|
||||
PathData {
|
||||
moveTo(122.5f, 104.5f)
|
||||
reflectiveCurveToRelative(-4.0f, 1.0f, -4.0f, 4.0f)
|
||||
reflectiveCurveToRelative(2.0f, 7.0f, 5.0f, 6.0f)
|
||||
reflectiveCurveToRelative(5.0f, -5.0f, 4.0f, -7.0f)
|
||||
reflectiveCurveTo(125.5f, 103.5f, 122.5f, 104.5f)
|
||||
close()
|
||||
moveTo(115.5f, 111.5f)
|
||||
reflectiveCurveToRelative(-9.0f, -6.0f, -17.0f, 12.0f)
|
||||
reflectiveCurveToRelative(-1.0f, 37.0f, -1.0f, 37.0f)
|
||||
reflectiveCurveToRelative(2.0f, 6.0f, 8.0f, 6.0f)
|
||||
reflectiveCurveToRelative(4.0f, -9.0f, 4.0f, -9.0f)
|
||||
reflectiveCurveToRelative(-4.0f, -13.0f, -1.0f, -24.0f)
|
||||
reflectiveCurveToRelative(7.0f, -13.0f, 7.0f, -13.0f)
|
||||
reflectiveCurveTo(120.5f, 115.5f, 115.5f, 111.5f)
|
||||
close()
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Face3Oval() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
face3Oval(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun face3Oval(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.5f)
|
||||
builder.addPath(pathData2, fill = Black, fillAlpha = 0.2f)
|
||||
builder.addPath(pathData3, fill = Black, fillAlpha = 0.4f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(148.0f, 87.0f)
|
||||
reflectiveCurveToRelative(-56.5f, 0.5f, -56.5f, 63.93f)
|
||||
reflectiveCurveToRelative(33.0f, 84.57f, 48.0f, 84.57f)
|
||||
reflectiveCurveToRelative(45.0f, -8.05f, 51.0f, -41.28f)
|
||||
curveToRelative(0.0f, 0.0f, 1.0f, -16.11f, 0.0f, -25.17f)
|
||||
reflectiveCurveToRelative(-1.0f, -29.2f, -1.0f, -32.22f)
|
||||
reflectiveCurveTo(186.5f, 88.51f, 148.0f, 87.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(151.5f, 92.5f)
|
||||
reflectiveCurveToRelative(17.0f, 12.0f, 22.0f, 42.0f)
|
||||
reflectiveCurveToRelative(7.0f, 44.0f, 3.0f, 63.0f)
|
||||
reflectiveCurveTo(167.0f, 226.0f, 161.75f, 229.25f)
|
||||
reflectiveCurveToRelative(21.67f, -4.94f, 26.71f, -26.84f)
|
||||
reflectiveCurveToRelative(1.77f, -35.94f, 1.77f, -35.94f)
|
||||
lineToRelative(-1.0f, -32.24f)
|
||||
reflectiveCurveToRelative(-5.0f, -35.64f, -26.88f, -43.18f)
|
||||
curveToRelative(0.0f, 0.0f, -11.87f, -4.54f, -17.37f, -3.0f)
|
||||
reflectiveCurveTo(148.5f, 89.5f, 151.5f, 92.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(113.5f, 110.5f)
|
||||
reflectiveCurveToRelative(-4.0f, 0.0f, -4.0f, 4.0f)
|
||||
reflectiveCurveToRelative(4.0f, 7.0f, 7.0f, 5.0f)
|
||||
reflectiveCurveToRelative(5.0f, -5.0f, 4.0f, -7.0f)
|
||||
reflectiveCurveTo(118.5f, 108.5f, 113.5f, 110.5f)
|
||||
close()
|
||||
moveTo(108.5f, 123.5f)
|
||||
reflectiveCurveToRelative(-4.0f, -1.0f, -7.0f, 5.0f)
|
||||
reflectiveCurveToRelative(-4.0f, 15.0f, -3.0f, 24.0f)
|
||||
arcToRelative(33.42f, 33.42f, 0.0f, false, false, 8.0f, 18.0f)
|
||||
curveToRelative(2.0f, 2.0f, 6.0f, 3.0f, 5.0f, -4.0f)
|
||||
reflectiveCurveToRelative(-5.0f, -14.0f, -4.0f, -25.0f)
|
||||
reflectiveCurveTo(114.5f, 124.5f, 108.5f, 123.5f)
|
||||
close()
|
||||
}
|
||||
+106
@@ -0,0 +1,106 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Face4Cylinder() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
face4Cylinder(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun face4Cylinder(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.5f)
|
||||
builder.addPath(pathData2, fill = Black, fillAlpha = 0.4f)
|
||||
builder.addPath(pathData3, fill = Black, stroke = Black, fillAlpha = 0.2f, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData5, fill = Black, fillAlpha = 0.2f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(91.5f, 107.5f)
|
||||
reflectiveCurveToRelative(4.0f, 64.0f, 4.0f, 77.0f)
|
||||
reflectiveCurveToRelative(1.0f, 38.0f, 1.0f, 38.0f)
|
||||
reflectiveCurveToRelative(4.0f, 11.0f, 22.0f, 10.0f)
|
||||
curveToRelative(36.5f, 0.5f, 60.0f, -11.0f, 66.0f, -16.0f)
|
||||
curveToRelative(0.0f, 0.0f, -3.0f, -106.0f, -3.0f, -116.0f)
|
||||
reflectiveCurveToRelative(4.0f, -20.0f, -36.0f, -22.0f)
|
||||
curveToRelative(0.0f, 0.0f, -35.59f, 1.45f, -44.8f, 8.73f)
|
||||
curveToRelative(0.0f, 0.0f, -10.2f, 2.27f, -9.2f, 7.27f)
|
||||
reflectiveCurveTo(91.5f, 107.5f, 91.5f, 107.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(95.8f, 102.0f)
|
||||
reflectiveCurveToRelative(2.7f, 53.53f, 3.7f, 68.53f)
|
||||
reflectiveCurveToRelative(5.0f, 42.0f, 5.0f, 45.0f)
|
||||
verticalLineToRelative(14.71f)
|
||||
reflectiveCurveToRelative(-7.0f, -3.71f, -8.0f, -7.71f)
|
||||
reflectiveCurveToRelative(-3.65f, -88.21f, -3.83f, -95.61f)
|
||||
reflectiveCurveTo(91.5f, 107.5f, 91.5f, 107.5f)
|
||||
verticalLineToRelative(-13.0f)
|
||||
reflectiveCurveTo(91.1f, 100.43f, 95.8f, 102.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(145.5f, 78.5f)
|
||||
reflectiveCurveToRelative(-53.0f, 5.0f, -54.0f, 16.0f)
|
||||
reflectiveCurveToRelative(23.0f, 14.0f, 37.0f, 13.0f)
|
||||
reflectiveCurveToRelative(52.0f, -7.0f, 53.0f, -16.0f)
|
||||
reflectiveCurveTo(156.5f, 77.5f, 145.5f, 78.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData5 =
|
||||
PathData {
|
||||
moveTo(168.5f, 103.5f)
|
||||
reflectiveCurveToRelative(1.0f, 49.0f, 1.0f, 57.0f)
|
||||
reflectiveCurveToRelative(1.0f, 35.0f, 1.0f, 41.0f)
|
||||
reflectiveCurveToRelative(-1.0f, 22.92f, -1.0f, 22.92f)
|
||||
lineToRelative(15.0f, -7.92f)
|
||||
reflectiveCurveToRelative(-2.94f, -96.67f, -3.0f, -100.83f)
|
||||
reflectiveCurveToRelative(0.0f, -25.17f, 0.0f, -25.17f)
|
||||
curveToRelative(0.34f, 3.51f, -3.36f, 6.57f, -11.0f, 9.17f)
|
||||
lineToRelative(-2.0f, 0.72f)
|
||||
close()
|
||||
}
|
||||
+110
@@ -0,0 +1,110 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Face5Baloon() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
face5Baloon(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun face5Baloon(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.5f)
|
||||
builder.addPath(pathData4, fill = Black, fillAlpha = 0.2f)
|
||||
builder.addPath(pathData5, fill = Black, fillAlpha = 0.4f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(156.0f, 83.0f)
|
||||
reflectiveCurveToRelative(-55.0f, 5.0f, -66.0f, 53.0f)
|
||||
reflectiveCurveToRelative(9.5f, 66.5f, 9.5f, 66.5f)
|
||||
reflectiveCurveToRelative(9.0f, 8.0f, 12.0f, 8.0f)
|
||||
reflectiveCurveToRelative(2.0f, -2.0f, 1.0f, -4.0f)
|
||||
arcToRelative(7.47f, 7.47f, 0.0f, false, false, -3.0f, -3.0f)
|
||||
reflectiveCurveToRelative(4.0f, 1.0f, 5.0f, 10.0f)
|
||||
reflectiveCurveToRelative(1.0f, 32.0f, 1.0f, 38.0f)
|
||||
verticalLineToRelative(12.0f)
|
||||
reflectiveCurveToRelative(2.0f, 8.0f, 17.0f, 8.0f)
|
||||
reflectiveCurveToRelative(30.0f, -7.0f, 30.0f, -7.0f)
|
||||
reflectiveCurveToRelative(-4.0f, -34.0f, -2.0f, -41.0f)
|
||||
reflectiveCurveToRelative(9.0f, -20.0f, 15.0f, -26.0f)
|
||||
reflectiveCurveToRelative(3.0f, -1.0f, 0.0f, 2.0f)
|
||||
arcToRelative(50.18f, 50.18f, 0.0f, false, false, -6.0f, 8.0f)
|
||||
reflectiveCurveToRelative(17.0f, -7.0f, 23.0f, -14.0f)
|
||||
reflectiveCurveToRelative(15.0f, -10.0f, 16.0f, -33.0f)
|
||||
reflectiveCurveTo(214.5f, 81.5f, 156.0f, 83.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(181.5f, 93.5f)
|
||||
reflectiveCurveToRelative(18.0f, 16.0f, 16.0f, 44.0f)
|
||||
reflectiveCurveToRelative(-6.0f, 41.0f, -28.0f, 54.0f)
|
||||
curveToRelative(0.0f, 0.0f, -16.0f, 3.0f, -19.0f, 28.0f)
|
||||
reflectiveCurveToRelative(0.0f, 49.27f, 0.0f, 49.27f)
|
||||
lineToRelative(12.0f, -4.27f)
|
||||
reflectiveCurveToRelative(-6.87f, -36.09f, 0.07f, -46.54f)
|
||||
reflectiveCurveToRelative(7.21f, -11.15f, 17.07f, -15.3f)
|
||||
reflectiveCurveToRelative(30.94f, -21.59f, 29.4f, -50.87f)
|
||||
reflectiveCurveToRelative(-0.09f, -56.0f, -35.32f, -67.16f)
|
||||
lineToRelative(-3.94f, -0.77f)
|
||||
reflectiveCurveTo(168.5f, 84.5f, 181.5f, 93.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData5 =
|
||||
PathData {
|
||||
moveTo(110.5f, 117.5f)
|
||||
reflectiveCurveToRelative(-7.0f, 1.0f, -10.0f, 11.0f)
|
||||
reflectiveCurveToRelative(-11.0f, 25.0f, -8.0f, 35.0f)
|
||||
reflectiveCurveToRelative(7.0f, 10.0f, 9.0f, 5.0f)
|
||||
reflectiveCurveToRelative(1.0f, -17.0f, 5.0f, -28.0f)
|
||||
reflectiveCurveTo(116.5f, 119.5f, 110.5f, 117.5f)
|
||||
close()
|
||||
moveTo(122.5f, 99.5f)
|
||||
reflectiveCurveToRelative(-9.0f, 6.0f, -9.0f, 9.0f)
|
||||
reflectiveCurveToRelative(0.0f, 4.0f, 5.0f, 4.0f)
|
||||
reflectiveCurveToRelative(13.0f, -4.0f, 13.0f, -9.0f)
|
||||
reflectiveCurveTo(128.5f, 96.5f, 122.5f, 99.5f)
|
||||
close()
|
||||
}
|
||||
+125
@@ -0,0 +1,125 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Face6Triangle() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
face6Triangle(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun face6Triangle(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 2.0f)
|
||||
builder.addPath(pathData2, fill = Black, fillAlpha = 0.4f)
|
||||
builder.addPath(pathData4, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData19, fill = Black, fillAlpha = 0.2f)
|
||||
builder.addPath(pathData20, fill = Black, fillAlpha = 0.2f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(71.5f, 130.5f)
|
||||
arcToRelative(51.83f, 51.83f, 0.0f, false, false, 6.0f, 29.0f)
|
||||
curveToRelative(8.0f, 15.0f, 39.0f, 71.0f, 66.0f, 70.0f)
|
||||
reflectiveCurveToRelative(76.0f, -50.0f, 76.0f, -93.0f)
|
||||
reflectiveCurveToRelative(-38.0f, -54.0f, -77.0f, -53.0f)
|
||||
reflectiveCurveTo(73.5f, 102.5f, 71.5f, 130.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(116.5f, 88.0f)
|
||||
reflectiveCurveToRelative(-24.18f, 5.5f, -35.59f, 20.5f)
|
||||
reflectiveCurveToRelative(-9.79f, 26.0f, -9.1f, 34.48f)
|
||||
reflectiveCurveToRelative(8.2f, 22.55f, 14.44f, 33.0f)
|
||||
reflectiveCurveToRelative(18.64f, 28.81f, 22.95f, 32.65f)
|
||||
reflectiveCurveToRelative(11.3f, 11.84f, 11.3f, 11.84f)
|
||||
reflectiveCurveToRelative(0.3f, -6.17f, -5.85f, -18.58f)
|
||||
reflectiveCurveTo(83.5f, 164.0f, 81.5f, 143.74f)
|
||||
reflectiveCurveTo(87.5f, 101.49f, 116.5f, 88.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(71.5f, 130.5f)
|
||||
arcToRelative(51.83f, 51.83f, 0.0f, false, false, 6.0f, 29.0f)
|
||||
curveToRelative(8.0f, 15.0f, 39.0f, 71.0f, 66.0f, 70.0f)
|
||||
reflectiveCurveToRelative(76.0f, -50.0f, 76.0f, -93.0f)
|
||||
reflectiveCurveToRelative(-38.0f, -54.0f, -77.0f, -53.0f)
|
||||
reflectiveCurveTo(73.5f, 102.5f, 71.5f, 130.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(75.44f, 115.88f)
|
||||
reflectiveCurveTo(108.5f, 100.5f, 140.5f, 101.5f)
|
||||
reflectiveCurveToRelative(65.0f, 7.0f, 67.0f, 30.0f)
|
||||
reflectiveCurveToRelative(-3.0f, 34.0f, -9.0f, 50.0f)
|
||||
arcToRelative(89.16f, 89.16f, 0.0f, false, true, -16.32f, 27.0f)
|
||||
}
|
||||
private val pathData19 =
|
||||
PathData {
|
||||
moveTo(199.5f, 115.5f)
|
||||
lineToRelative(-9.0f, -5.07f)
|
||||
reflectiveCurveTo(188.0f, 110.0f, 191.0f, 120.0f)
|
||||
reflectiveCurveToRelative(6.5f, 25.5f, 4.5f, 40.5f)
|
||||
reflectiveCurveToRelative(-7.0f, 27.0f, -19.0f, 40.0f)
|
||||
reflectiveCurveToRelative(-17.37f, 20.78f, -17.19f, 23.89f)
|
||||
reflectiveCurveTo(184.5f, 208.5f, 188.5f, 202.5f)
|
||||
reflectiveCurveToRelative(11.93f, -23.83f, 16.0f, -39.0f)
|
||||
reflectiveCurveTo(211.5f, 124.5f, 199.5f, 115.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData20 =
|
||||
PathData {
|
||||
moveTo(201.0f, 100.0f)
|
||||
lineToRelative(-10.0f, 10.0f)
|
||||
reflectiveCurveToRelative(-23.39f, -8.18f, -41.7f, -8.09f)
|
||||
reflectiveCurveToRelative(-33.49f, -1.25f, -53.4f, 6.42f)
|
||||
lineTo(76.0f, 116.0f)
|
||||
reflectiveCurveToRelative(-0.08f, -2.83f, 6.71f, -9.66f)
|
||||
reflectiveCurveToRelative(18.0f, -18.34f, 48.89f, -22.09f)
|
||||
reflectiveCurveToRelative(49.94f, 2.2f, 58.92f, 6.73f)
|
||||
reflectiveCurveToRelative(12.0f, 7.09f, 12.0f, 7.09f)
|
||||
close()
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Face7Bent() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
face7Bent(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun face7Bent(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.5f)
|
||||
builder.addPath(pathData2, fill = Black, fillAlpha = 0.4f)
|
||||
builder.addPath(pathData5, fill = Black, stroke = Black, fillAlpha = 0.2f, strokeLineWidth = 1.0f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(212.5f, 90.5f)
|
||||
reflectiveCurveToRelative(-19.5f, -20.5f, -55.0f, -12.0f)
|
||||
curveToRelative(-31.0f, 8.0f, -61.0f, 14.0f, -64.0f, 60.0f)
|
||||
arcToRelative(122.71f, 122.71f, 0.0f, false, false, 4.0f, 35.0f)
|
||||
curveToRelative(5.0f, 19.0f, 11.0f, 42.0f, 12.0f, 45.0f)
|
||||
curveToRelative(0.0f, 0.0f, 8.0f, 9.0f, 25.0f, 9.0f)
|
||||
reflectiveCurveToRelative(56.0f, -10.0f, 56.0f, -10.0f)
|
||||
reflectiveCurveToRelative(11.0f, -5.0f, 12.0f, -6.0f)
|
||||
reflectiveCurveToRelative(-20.0f, -60.0f, -11.0f, -86.0f)
|
||||
curveToRelative(0.0f, 0.0f, 3.0f, -7.0f, 14.0f, -8.0f)
|
||||
reflectiveCurveToRelative(14.0f, 0.0f, 14.0f, 0.0f)
|
||||
reflectiveCurveTo(217.5f, 96.5f, 212.5f, 90.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(130.5f, 88.5f)
|
||||
reflectiveCurveToRelative(-9.0f, 6.0f, -12.0f, 9.0f)
|
||||
reflectiveCurveToRelative(-16.0f, 15.0f, -18.0f, 28.0f)
|
||||
reflectiveCurveToRelative(2.0f, 38.0f, 4.0f, 46.0f)
|
||||
reflectiveCurveToRelative(5.0f, 21.0f, 4.0f, 26.0f)
|
||||
reflectiveCurveToRelative(-2.93f, 6.66f, -2.93f, 6.66f)
|
||||
reflectiveCurveTo(99.5f, 183.5f, 97.5f, 173.5f)
|
||||
reflectiveCurveToRelative(-6.0f, -27.0f, -1.52f, -51.0f)
|
||||
reflectiveCurveTo(130.5f, 85.5f, 130.5f, 88.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData5 =
|
||||
PathData {
|
||||
moveTo(209.5f, 92.5f)
|
||||
reflectiveCurveToRelative(-15.0f, 0.0f, -21.0f, 6.0f)
|
||||
reflectiveCurveToRelative(-16.0f, 16.0f, -13.0f, 41.0f)
|
||||
reflectiveCurveToRelative(12.0f, 65.0f, 12.0f, 65.0f)
|
||||
lineToRelative(3.0f, 13.0f)
|
||||
lineToRelative(12.0f, -6.0f)
|
||||
reflectiveCurveToRelative(-22.77f, -76.47f, -7.39f, -90.23f)
|
||||
curveToRelative(0.0f, 0.0f, 2.39f, -4.77f, 24.39f, -3.77f)
|
||||
curveToRelative(0.0f, 0.0f, -0.4f, -21.0f, -5.7f, -25.0f)
|
||||
close()
|
||||
}
|
||||
+131
@@ -0,0 +1,131 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Face8TriangleInv() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
face8TriangleInv(SolidColor(Color.Yellow), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun face8TriangleInv(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
// face
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// shades
|
||||
builder.addPath(pathData5, fill = Black, fillAlpha = 0.2f)
|
||||
builder.addPath(pathData6, fill = Black, fillAlpha = 0.1f)
|
||||
builder.addPath(pathData7, fill = Black, fillAlpha = 0.4f)
|
||||
|
||||
// outer line
|
||||
builder.addPath(pathData2, stroke = Black, strokeLineWidth = 1.0f)
|
||||
|
||||
// inner line
|
||||
builder.addPath(pathData20, stroke = Black, strokeLineWidth = 1.0f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(143.0f, 89.0f)
|
||||
reflectiveCurveToRelative(-39.0f, 6.0f, -64.0f, 66.0f)
|
||||
reflectiveCurveToRelative(15.5f, 70.5f, 34.5f, 74.5f)
|
||||
reflectiveCurveToRelative(85.0f, 13.0f, 102.0f, -27.0f)
|
||||
reflectiveCurveTo(175.5f, 85.5f, 143.0f, 89.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(143.0f, 88.0f)
|
||||
reflectiveCurveToRelative(-39.0f, 6.0f, -64.0f, 66.0f)
|
||||
reflectiveCurveToRelative(15.5f, 70.5f, 34.5f, 74.5f)
|
||||
reflectiveCurveToRelative(85.0f, 13.0f, 102.0f, -27.0f)
|
||||
reflectiveCurveTo(175.5f, 84.5f, 143.0f, 88.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData5 =
|
||||
PathData {
|
||||
moveTo(161.38f, 106.09f)
|
||||
arcToRelative(20.31f, 20.31f, 0.0f, false, false, -1.88f, 4.41f)
|
||||
curveToRelative(-1.0f, 6.0f, 2.0f, 11.0f, 9.0f, 19.0f)
|
||||
reflectiveCurveToRelative(20.0f, 27.0f, 21.0f, 45.0f)
|
||||
reflectiveCurveToRelative(1.0f, 35.0f, -13.0f, 45.0f)
|
||||
reflectiveCurveToRelative(-24.21f, 14.08f, -24.21f, 14.08f)
|
||||
reflectiveCurveToRelative(34.71f, 0.42f, 47.8f, -19.51f)
|
||||
curveToRelative(11.41f, -15.58f, 10.59f, -36.0f, 0.0f, -59.77f)
|
||||
curveToRelative(-11.09f, -27.31f, -33.81f, -44.6f, -33.81f, -44.6f)
|
||||
close()
|
||||
}
|
||||
private val pathData6 =
|
||||
PathData {
|
||||
moveTo(167.41f, 97.44f)
|
||||
curveToRelative(-2.41f, -0.44f, -5.91f, 9.06f, -5.91f, 9.06f)
|
||||
reflectiveCurveToRelative(27.0f, 14.0f, 39.0f, 48.0f)
|
||||
reflectiveCurveToRelative(8.86f, 41.0f, 5.43f, 50.0f)
|
||||
reflectiveCurveToRelative(-17.62f, 24.63f, -36.0f, 27.81f)
|
||||
reflectiveCurveToRelative(37.6f, -2.82f, 45.6f, -29.82f)
|
||||
curveToRelative(11.5f, -39.5f, -22.87f, -80.23f, -22.87f, -80.23f)
|
||||
reflectiveCurveTo(175.0f, 101.0f, 167.41f, 97.44f)
|
||||
close()
|
||||
}
|
||||
private val pathData7 =
|
||||
PathData {
|
||||
moveTo(91.5f, 140.5f)
|
||||
reflectiveCurveToRelative(-14.0f, 24.0f, -12.0f, 43.0f)
|
||||
reflectiveCurveToRelative(12.0f, 26.0f, 19.0f, 31.0f)
|
||||
reflectiveCurveToRelative(9.2f, 13.33f, 9.2f, 13.33f)
|
||||
reflectiveCurveTo(72.0f, 224.0f, 71.08f, 186.84f)
|
||||
curveToRelative(0.0f, 0.0f, 3.19f, -39.76f, 30.31f, -68.55f)
|
||||
lineTo(113.22f, 108.0f)
|
||||
reflectiveCurveTo(95.5f, 132.5f, 91.5f, 140.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData20 =
|
||||
PathData {
|
||||
moveTo(139.5f, 98.5f)
|
||||
reflectiveCurveToRelative(35.0f, 3.0f, 57.0f, 48.0f)
|
||||
reflectiveCurveToRelative(13.83f, 72.0f, -24.08f, 85.0f)
|
||||
curveToRelative(-54.92f, 7.0f, -79.92f, -7.0f, -91.0f, -16.46f)
|
||||
curveToRelative(-1.5f, 0.92f, -21.0f, -20.3f, -3.0f, -60.55f)
|
||||
curveTo(95.74f, 116.0f, 122.5f, 97.5f, 139.5f, 98.5f)
|
||||
close()
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Face9Square() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
face9Square(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun face9Square(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 2.0f)
|
||||
builder.addPath(pathData2, fill = Black, fillAlpha = 0.4f)
|
||||
builder.addPath(pathData5, fill = Black, stroke = Black, fillAlpha = 0.2f, strokeLineWidth = 0.75f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(177.0f, 71.0f)
|
||||
reflectiveCurveToRelative(-73.0f, -2.0f, -82.0f, 51.0f)
|
||||
curveToRelative(0.0f, 0.0f, -4.5f, 17.5f, 1.5f, 40.5f)
|
||||
reflectiveCurveToRelative(14.0f, 50.0f, 14.0f, 50.0f)
|
||||
reflectiveCurveToRelative(6.0f, 10.0f, 46.0f, 6.0f)
|
||||
reflectiveCurveToRelative(75.0f, -25.0f, 75.0f, -25.0f)
|
||||
reflectiveCurveToRelative(-10.0f, -100.0f, -16.0f, -108.0f)
|
||||
reflectiveCurveTo(203.0f, 72.0f, 177.0f, 71.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(135.5f, 78.5f)
|
||||
reflectiveCurveToRelative(1.0f, 4.0f, -5.0f, 9.0f)
|
||||
reflectiveCurveToRelative(-20.0f, 12.0f, -25.0f, 31.0f)
|
||||
reflectiveCurveToRelative(0.0f, 29.0f, 2.0f, 37.0f)
|
||||
reflectiveCurveToRelative(7.0f, 25.0f, 6.0f, 35.0f)
|
||||
reflectiveCurveToRelative(-4.75f, 16.0f, -4.75f, 16.0f)
|
||||
reflectiveCurveToRelative(-21.38f, -60.92f, -12.82f, -89.0f)
|
||||
reflectiveCurveTo(129.0f, 81.0f, 135.5f, 78.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData5 =
|
||||
PathData {
|
||||
moveTo(205.5f, 86.5f)
|
||||
reflectiveCurveToRelative(-27.0f, 2.0f, -29.0f, 28.0f)
|
||||
reflectiveCurveToRelative(9.0f, 73.0f, 9.0f, 73.0f)
|
||||
lineToRelative(5.38f, 23.67f)
|
||||
lineTo(231.5f, 193.5f)
|
||||
reflectiveCurveToRelative(-8.0f, -94.0f, -15.0f, -106.0f)
|
||||
curveTo(216.48f, 87.51f, 208.5f, 86.5f, 205.5f, 86.5f)
|
||||
close()
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Mouth0Horz() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
mouth0Horz(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun mouth0Horz(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor)
|
||||
builder.addPath(pathData2, fill = Black, stroke = Black, fillAlpha = 0.4f, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData3, fill = Black)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(123.0f, 183.0f)
|
||||
lineToRelative(-1.0f, 9.0f)
|
||||
arcToRelative(26.74f, 26.74f, 0.0f, false, false, 3.5f, 0.5f)
|
||||
curveToRelative(2.0f, 0.44f, 22.0f, 0.35f, 23.0f, -1.0f)
|
||||
lineToRelative(-1.0f, -9.0f)
|
||||
reflectiveCurveTo(132.5f, 181.5f, 123.0f, 183.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(123.0f, 183.0f)
|
||||
lineToRelative(-1.0f, 9.0f)
|
||||
arcToRelative(26.74f, 26.74f, 0.0f, false, false, 3.5f, 0.5f)
|
||||
curveToRelative(2.0f, 0.44f, 22.0f, 0.35f, 23.0f, -1.0f)
|
||||
lineToRelative(-1.0f, -9.0f)
|
||||
reflectiveCurveTo(132.5f, 181.5f, 123.0f, 183.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(123.5f, 183.34f)
|
||||
reflectiveCurveToRelative(3.07f, 2.66f, 12.26f, 2.66f)
|
||||
reflectiveCurveTo(147.0f, 182.45f, 147.0f, 182.45f)
|
||||
arcToRelative(113.13f, 113.13f, 0.0f, false, false, -12.2f, -0.28f)
|
||||
curveTo(129.63f, 182.45f, 124.52f, 182.45f, 123.5f, 183.34f)
|
||||
close()
|
||||
}
|
||||
+97
@@ -0,0 +1,97 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Mouth1Cylinder() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
mouth1Cylinder(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun mouth1Cylinder(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData3, fill = Black, stroke = Black, fillAlpha = 0.4f, strokeLineWidth = 0.75f)
|
||||
builder.addPath(pathData5, stroke = Black, strokeLineWidth = 0.75f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(126.0f, 180.0f)
|
||||
arcToRelative(129.54f, 129.54f, 0.0f, false, true, 3.0f, 25.0f)
|
||||
arcToRelative(19.93f, 19.93f, 0.0f, false, false, 10.0f, 1.0f)
|
||||
arcToRelative(24.23f, 24.23f, 0.0f, false, false, 8.5f, -3.5f)
|
||||
reflectiveCurveToRelative(-4.0f, -23.0f, -4.0f, -25.0f)
|
||||
curveToRelative(0.0f, 0.0f, -6.0f, 2.0f, -9.0f, 2.0f)
|
||||
curveToRelative(-1.54f, 0.0f, -3.73f, 0.13f, -5.51f, 0.26f)
|
||||
reflectiveCurveTo(126.0f, 180.0f, 126.0f, 180.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(131.5f, 190.71f)
|
||||
arcToRelative(113.49f, 113.49f, 0.0f, false, true, 1.0f, 12.25f)
|
||||
lineToRelative(-3.0f, 1.54f)
|
||||
reflectiveCurveToRelative(-1.0f, -14.0f, -2.28f, -18.07f)
|
||||
curveToRelative(-0.72f, -2.86f, -1.15f, -6.11f, -1.15f, -6.11f)
|
||||
lineToRelative(3.43f, 0.18f)
|
||||
reflectiveCurveTo(130.5f, 182.55f, 131.5f, 190.71f)
|
||||
close()
|
||||
moveTo(129.29f, 205.11f)
|
||||
lineToRelative(3.21f, -1.61f)
|
||||
arcToRelative(32.0f, 32.0f, 0.0f, false, false, 7.0f, -1.0f)
|
||||
arcToRelative(53.36f, 53.36f, 0.0f, false, false, 7.56f, -2.57f)
|
||||
lineToRelative(0.44f, 2.57f)
|
||||
reflectiveCurveToRelative(-4.93f, 3.27f, -7.0f, 3.14f)
|
||||
reflectiveCurveTo(138.07f, 207.71f, 129.29f, 205.11f)
|
||||
close()
|
||||
}
|
||||
private val pathData5 =
|
||||
PathData {
|
||||
moveTo(131.81f, 193.42f)
|
||||
curveToRelative(0.93f, 0.47f, 1.84f, 0.92f, 1.69f, -0.92f)
|
||||
curveToRelative(0.0f, 0.0f, 0.0f, -2.0f, 1.0f, -2.0f)
|
||||
reflectiveCurveToRelative(7.0f, -1.0f, 7.0f, -1.0f)
|
||||
arcToRelative(1.0f, 1.0f, 0.0f, false, true, 1.0f, 1.0f)
|
||||
curveToRelative(0.0f, 1.0f, 0.0f, 3.0f, 1.0f, 2.0f)
|
||||
arcToRelative(3.44f, 3.44f, 0.0f, false, true, 2.12f, -1.0f)
|
||||
}
|
||||
+142
@@ -0,0 +1,142 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.DarkYellow
|
||||
import com.vitorpamplona.amethyst.commons.OrangeOne
|
||||
import com.vitorpamplona.amethyst.commons.OrangeTwo
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Mouth2Teeth() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
mouth2Teeth(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun mouth2Teeth(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 2.0f)
|
||||
builder.addPath(pathData3, fill = OrangeOne)
|
||||
builder.addPath(pathData4, fill = OrangeTwo)
|
||||
builder.addPath(pathData5, fill = Black, stroke = Black, fillAlpha = 0.4f, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData6, fill = DarkYellow, stroke = Black, strokeLineWidth = 0.75f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(170.5f, 168.5f)
|
||||
reflectiveCurveTo(151.0f, 177.0f, 141.0f, 179.0f)
|
||||
lineToRelative(-1.0f, 0.2f)
|
||||
arcToRelative(112.0f, 112.0f, 0.0f, false, true, -32.68f, 1.74f)
|
||||
quadToRelative(-1.88f, -0.18f, -3.82f, -0.44f)
|
||||
lineToRelative(6.0f, 20.0f)
|
||||
arcToRelative(51.86f, 51.86f, 0.0f, false, false, 26.0f, 5.0f)
|
||||
curveToRelative(15.0f, -1.0f, 35.0f, -7.0f, 41.0f, -15.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(118.0f, 181.0f)
|
||||
reflectiveCurveToRelative(3.13f, 7.7f, 4.06f, 9.85f)
|
||||
reflectiveCurveToRelative(2.31f, 5.09f, 2.12f, 7.12f)
|
||||
horizontalLineToRelative(0.0f)
|
||||
lineToRelative(0.19f, 4.0f)
|
||||
arcToRelative(72.8f, 72.8f, 0.0f, false, true, 7.93f, 0.57f)
|
||||
curveTo(135.0f, 203.0f, 144.0f, 201.0f, 144.0f, 201.0f)
|
||||
arcToRelative(14.36f, 14.36f, 0.0f, false, true, -0.15f, -3.0f)
|
||||
curveToRelative(0.15f, -1.0f, -3.27f, -16.16f, -3.27f, -16.16f)
|
||||
lineToRelative(-1.0f, -2.27f)
|
||||
lineTo(135.0f, 180.0f)
|
||||
lineToRelative(-9.08f, 1.13f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(155.48f, 174.52f)
|
||||
lineTo(159.0f, 185.15f)
|
||||
lineToRelative(2.0f, 9.85f)
|
||||
verticalLineToRelative(2.0f)
|
||||
reflectiveCurveToRelative(10.25f, -4.55f, 12.63f, -6.27f)
|
||||
lineTo(176.0f, 189.0f)
|
||||
lineToRelative(-3.63f, -13.65f)
|
||||
lineToRelative(-1.85f, -6.79f)
|
||||
close()
|
||||
}
|
||||
private val pathData5 =
|
||||
PathData {
|
||||
moveTo(110.5f, 199.5f)
|
||||
lineToRelative(2.0f, -2.0f)
|
||||
reflectiveCurveToRelative(-3.0f, -10.0f, -4.0f, -13.0f)
|
||||
reflectiveCurveToRelative(-1.87f, -3.63f, -1.87f, -3.63f)
|
||||
lineToRelative(-3.13f, -0.37f)
|
||||
lineToRelative(3.38f, 11.26f)
|
||||
lineToRelative(2.5f, 8.33f)
|
||||
close()
|
||||
|
||||
moveTo(113.5f, 198.5f)
|
||||
reflectiveCurveToRelative(2.0f, 3.0f, 14.0f, 4.0f)
|
||||
reflectiveCurveToRelative(35.0f, -6.0f, 35.0f, -6.0f)
|
||||
reflectiveCurveTo(174.56f, 191.0f, 176.0f, 188.77f)
|
||||
lineToRelative(0.47f, 1.73f)
|
||||
reflectiveCurveToRelative(-7.38f, 11.0f, -40.69f, 15.0f)
|
||||
curveToRelative(0.0f, 0.0f, -16.31f, 1.0f, -26.31f, -5.0f)
|
||||
lineToRelative(3.0f, -3.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData6 =
|
||||
PathData {
|
||||
moveTo(119.94f, 181.44f)
|
||||
reflectiveCurveToRelative(2.56f, 10.06f, 3.56f, 13.06f)
|
||||
arcToRelative(27.84f, 27.84f, 0.0f, false, true, 0.88f, 7.67f)
|
||||
reflectiveCurveToRelative(-7.88f, 0.33f, -11.88f, -4.67f)
|
||||
lineToRelative(-5.0f, -15.0f)
|
||||
arcToRelative(5.38f, 5.38f, 0.0f, false, false, -1.0f, -1.7f)
|
||||
arcTo(80.36f, 80.36f, 0.0f, false, false, 119.94f, 181.44f)
|
||||
close()
|
||||
moveTo(140.5f, 181.5f)
|
||||
curveToRelative(0.0f, 0.14f, 4.14f, 18.0f, 3.56f, 19.5f)
|
||||
curveToRelative(0.0f, 0.0f, 15.93f, -2.76f, 17.18f, -4.13f)
|
||||
curveToRelative(0.0f, 0.0f, -1.75f, -10.37f, -2.75f, -13.37f)
|
||||
reflectiveCurveToRelative(-3.0f, -9.0f, -3.0f, -9.0f)
|
||||
reflectiveCurveToRelative(-7.82f, 3.0f, -10.4f, 3.47f)
|
||||
arcToRelative(54.09f, 54.09f, 0.0f, false, false, -5.58f, 1.51f)
|
||||
arcTo(6.0f, 6.0f, 0.0f, false, true, 140.5f, 181.5f)
|
||||
close()
|
||||
}
|
||||
@@ -0,0 +1,171 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.DarkYellow
|
||||
import com.vitorpamplona.amethyst.commons.Yellow
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Mouth3Grid() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
mouth3Grid(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun mouth3Grid(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.8f)
|
||||
builder.addPath(pathData2, fill = Yellow)
|
||||
builder.addPath(pathData3, fill = DarkYellow)
|
||||
builder.addPath(pathData7, fill = Black, stroke = Black, fillAlpha = 0.4f, strokeLineWidth = 0.75f)
|
||||
builder.addPath(pathData9, stroke = Black, strokeLineWidth = 0.75f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(104.0f, 173.0f)
|
||||
reflectiveCurveToRelative(5.5f, 23.5f, 5.5f, 27.5f)
|
||||
curveToRelative(0.0f, 0.0f, 6.0f, 5.0f, 24.0f, 5.0f)
|
||||
reflectiveCurveToRelative(41.0f, -10.0f, 43.0f, -14.0f)
|
||||
curveToRelative(0.0f, 0.0f, -4.0f, -29.0f, -5.0f, -30.0f)
|
||||
curveToRelative(0.0f, 0.0f, -25.0f, 11.0f, -45.0f, 12.0f)
|
||||
curveToRelative(-10.61f, 0.62f, -16.74f, 0.27f, -19.85f, -0.08f)
|
||||
arcTo(20.06f, 20.06f, 0.0f, false, true, 104.0f, 173.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(106.65f, 173.42f)
|
||||
reflectiveCurveToRelative(3.08f, 5.1f, 4.72f, 14.34f)
|
||||
reflectiveCurveToRelative(1.0f, 10.85f, 1.0f, 10.85f)
|
||||
reflectiveCurveTo(123.0f, 203.0f, 128.0f, 203.0f)
|
||||
arcToRelative(73.0f, 73.0f, 0.0f, false, false, 18.0f, -1.77f)
|
||||
arcToRelative(131.07f, 131.07f, 0.0f, false, false, 22.47f, -7.33f)
|
||||
lineToRelative(7.93f, -3.29f)
|
||||
lineToRelative(-3.18f, -21.13f)
|
||||
lineToRelative(-1.7f, -8.0f)
|
||||
reflectiveCurveToRelative(-26.0f, 11.0f, -45.0f, 12.0f)
|
||||
reflectiveCurveToRelative(-20.0f, 0.0f, -20.0f, 0.0f)
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(142.5f, 181.5f)
|
||||
verticalLineTo(190.0f)
|
||||
lineToRelative(17.5f, -4.0f)
|
||||
lineToRelative(1.0f, 6.0f)
|
||||
verticalLineToRelative(4.9f)
|
||||
lineToRelative(15.0f, -5.9f)
|
||||
lineToRelative(-3.0f, -20.5f)
|
||||
curveTo(173.15f, 170.88f, 153.19f, 178.85f, 142.5f, 181.5f)
|
||||
close()
|
||||
moveTo(142.4f, 190.0f)
|
||||
arcToRelative(38.22f, 38.22f, 0.0f, false, false, 2.1f, 11.5f)
|
||||
reflectiveCurveToRelative(-10.5f, 1.5f, -17.0f, 1.0f)
|
||||
reflectiveCurveTo(113.0f, 199.0f, 113.0f, 199.0f)
|
||||
lineToRelative(-2.5f, -15.5f)
|
||||
horizontalLineToRelative(11.0f)
|
||||
lineTo(123.0f, 191.0f)
|
||||
arcTo(122.0f, 122.0f, 0.0f, false, false, 142.4f, 190.0f)
|
||||
close()
|
||||
moveTo(118.0f, 174.0f)
|
||||
lineToRelative(3.5f, 9.0f)
|
||||
curveToRelative(7.62f, 0.33f, 21.0f, -1.5f, 21.0f, -1.5f)
|
||||
reflectiveCurveToRelative(-1.13f, -7.27f, -2.5f, -9.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData6 =
|
||||
PathData {
|
||||
moveTo(104.0f, 173.0f)
|
||||
reflectiveCurveToRelative(5.5f, 23.5f, 5.5f, 27.5f)
|
||||
curveToRelative(0.0f, 0.0f, 6.0f, 5.0f, 24.0f, 5.0f)
|
||||
reflectiveCurveToRelative(41.0f, -10.0f, 43.0f, -14.0f)
|
||||
curveToRelative(0.0f, 0.0f, -4.0f, -29.0f, -5.0f, -30.0f)
|
||||
curveToRelative(0.0f, 0.0f, -25.0f, 11.0f, -45.0f, 12.0f)
|
||||
curveToRelative(-10.61f, 0.62f, -16.74f, 0.27f, -19.85f, -0.08f)
|
||||
arcTo(20.06f, 20.06f, 0.0f, false, true, 104.0f, 173.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData7 =
|
||||
PathData {
|
||||
moveTo(112.33f, 198.61f)
|
||||
reflectiveCurveTo(122.0f, 203.0f, 130.0f, 203.0f)
|
||||
reflectiveCurveToRelative(23.5f, -2.5f, 32.5f, -6.5f)
|
||||
reflectiveCurveToRelative(13.88f, -5.89f, 13.88f, -5.89f)
|
||||
lineToRelative(0.12f, 0.89f)
|
||||
arcToRelative(31.45f, 31.45f, 0.0f, false, true, -8.77f, 5.75f)
|
||||
curveToRelative(-5.23f, 2.25f, -19.73f, 8.25f, -35.48f, 8.25f)
|
||||
reflectiveCurveToRelative(-22.75f, -5.0f, -22.75f, -5.0f)
|
||||
lineToRelative(2.83f, -1.89f)
|
||||
|
||||
moveTo(107.5f, 174.5f)
|
||||
arcToRelative(93.08f, 93.08f, 0.0f, false, true, 4.0f, 14.0f)
|
||||
arcToRelative(67.34f, 67.34f, 0.0f, false, true, 1.0f, 10.0f)
|
||||
lineToRelative(-3.0f, 2.0f)
|
||||
reflectiveCurveToRelative(-2.2f, -15.2f, -4.6f, -23.6f)
|
||||
lineToRelative(-0.9f, -3.69f)
|
||||
lineToRelative(2.93f, 0.25f)
|
||||
close()
|
||||
}
|
||||
private val pathData9 =
|
||||
PathData {
|
||||
moveTo(124.61f, 202.46f)
|
||||
curveToRelative(0.11f, -5.0f, -2.11f, -16.0f, -4.11f, -22.0f)
|
||||
reflectiveCurveToRelative(-3.42f, -6.66f, -3.42f, -6.66f)
|
||||
moveTo(140.25f, 171.58f)
|
||||
reflectiveCurveToRelative(2.25f, 5.92f, 2.25f, 9.92f)
|
||||
verticalLineToRelative(8.0f)
|
||||
reflectiveCurveToRelative(0.33f, 10.83f, 2.67f, 11.92f)
|
||||
moveTo(112.0f, 191.0f)
|
||||
reflectiveCurveToRelative(17.0f, 1.0f, 30.0f, -1.0f)
|
||||
reflectiveCurveToRelative(30.0f, -7.0f, 30.0f, -7.0f)
|
||||
lineToRelative(3.0f, -1.0f)
|
||||
moveTo(142.5f, 181.5f)
|
||||
verticalLineToRelative(8.42f)
|
||||
lineToRelative(17.51f, -3.7f)
|
||||
lineToRelative(1.0f, 8.28f)
|
||||
verticalLineTo(197.0f)
|
||||
reflectiveCurveToRelative(-1.0f, -9.0f, -2.0f, -14.0f)
|
||||
reflectiveCurveToRelative(-2.84f, -12.76f, -2.84f, -12.76f)
|
||||
moveTo(176.5f, 190.5f)
|
||||
lineTo(173.0f, 170.0f)
|
||||
curveToRelative(-1.23f, 1.23f, -7.76f, 4.0f, -15.16f, 6.6f)
|
||||
curveToRelative(-4.63f, 1.64f, -9.61f, 3.24f, -13.84f, 4.4f)
|
||||
curveToRelative(-11.0f, 3.0f, -33.55f, 2.5f, -33.55f, 2.5f)
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.Brown
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Mouth4Vert() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
mouth4Vert(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun mouth4Vert(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData3, fill = Black, fillAlpha = 0.4f, strokeAlpha = 0.4f)
|
||||
builder.addPath(pathData5, fill = Brown, stroke = Black, strokeLineWidth = 0.5f)
|
||||
builder.addPath(pathData7, fill = Black, stroke = Black, fillAlpha = 0.4f, strokeLineWidth = 0.75f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(130.5f, 175.5f)
|
||||
verticalLineToRelative(15.0f)
|
||||
arcToRelative(73.09f, 73.09f, 0.0f, false, false, 1.0f, 13.0f)
|
||||
reflectiveCurveToRelative(6.0f, 1.0f, 6.0f, 0.0f)
|
||||
reflectiveCurveToRelative(-1.0f, -28.0f, -1.0f, -28.0f)
|
||||
curveTo(134.18f, 175.38f, 131.28f, 175.06f, 130.5f, 175.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(131.65f, 203.0f)
|
||||
arcToRelative(75.68f, 75.68f, 0.0f, false, true, -1.4f, -15.06f)
|
||||
arcToRelative(102.33f, 102.33f, 0.0f, false, true, 0.48f, -12.27f)
|
||||
arcToRelative(3.0f, 3.0f, 0.0f, false, true, 1.25f, -0.25f)
|
||||
arcToRelative(5.33f, 5.33f, 0.0f, false, true, 1.0f, 0.1f)
|
||||
lineToRelative(0.43f, 0.2f)
|
||||
horizontalLineToRelative(0.0f)
|
||||
reflectiveCurveToRelative(0.0f, 0.16f, -0.13f, 0.72f)
|
||||
arcToRelative(138.49f, 138.49f, 0.0f, false, false, -1.0f, 14.06f)
|
||||
arcToRelative(64.14f, 64.14f, 0.0f, false, false, 1.0f, 10.92f)
|
||||
close()
|
||||
}
|
||||
private val pathData5 =
|
||||
PathData {
|
||||
moveTo(137.19f, 201.56f)
|
||||
arcToRelative(5.59f, 5.59f, 0.0f, false, false, -2.48f, -0.65f)
|
||||
arcToRelative(3.64f, 3.64f, 0.0f, false, false, -1.34f, 0.25f)
|
||||
arcToRelative(39.16f, 39.16f, 0.0f, false, true, -1.12f, -9.0f)
|
||||
curveToRelative(0.0f, -4.56f, 1.26f, -14.93f, 1.47f, -16.62f)
|
||||
lineToRelative(2.54f, 0.17f)
|
||||
lineToRelative(0.56f, 15.47f)
|
||||
close()
|
||||
}
|
||||
private val pathData7 =
|
||||
PathData {
|
||||
moveTo(137.5f, 201.5f)
|
||||
verticalLineToRelative(2.0f)
|
||||
lineToRelative(-5.7f, 0.0f)
|
||||
lineToRelative(1.7f, -2.0f)
|
||||
reflectiveCurveTo(134.5f, 199.5f, 137.5f, 201.5f)
|
||||
close()
|
||||
}
|
||||
+94
@@ -0,0 +1,94 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.Brown
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Mouth5MidOpen() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
mouth5MidOpen(SolidColor(Color.Yellow), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun mouth5MidOpen(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor)
|
||||
builder.addPath(pathData2, fill = Black, stroke = Black, fillAlpha = 0.4f, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData3, fill = Brown, stroke = Black, strokeLineWidth = 0.5f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(149.0f, 179.0f)
|
||||
reflectiveCurveToRelative(-12.0f, 2.0f, -15.0f, 2.0f)
|
||||
reflectiveCurveToRelative(-13.5f, 1.5f, -15.5f, 5.5f)
|
||||
reflectiveCurveToRelative(-1.0f, 11.5f, 8.0f, 10.5f)
|
||||
reflectiveCurveToRelative(12.0f, -1.5f, 20.0f, -2.5f)
|
||||
reflectiveCurveToRelative(13.0f, -4.0f, 14.0f, -6.0f)
|
||||
reflectiveCurveToRelative(0.0f, -5.0f, -2.0f, -7.0f)
|
||||
reflectiveCurveTo(154.5f, 178.5f, 149.0f, 179.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(149.0f, 179.0f)
|
||||
reflectiveCurveToRelative(-12.0f, 2.0f, -15.0f, 2.0f)
|
||||
reflectiveCurveToRelative(-11.5f, 0.5f, -14.5f, 4.5f)
|
||||
curveToRelative(-4.0f, 4.0f, -2.0f, 11.5f, 7.0f, 11.5f)
|
||||
curveToRelative(8.0f, 0.0f, 12.0f, -1.5f, 20.0f, -2.5f)
|
||||
reflectiveCurveToRelative(13.0f, -4.0f, 14.0f, -6.0f)
|
||||
reflectiveCurveToRelative(0.0f, -5.0f, -2.0f, -7.0f)
|
||||
reflectiveCurveTo(154.5f, 178.5f, 149.0f, 179.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(121.5f, 184.5f)
|
||||
reflectiveCurveToRelative(-3.0f, 4.0f, -1.0f, 6.0f)
|
||||
reflectiveCurveToRelative(4.0f, 3.0f, 12.0f, 2.0f)
|
||||
reflectiveCurveToRelative(13.0f, -3.0f, 18.0f, -3.0f)
|
||||
reflectiveCurveToRelative(10.83f, -2.26f, 9.42f, -6.13f)
|
||||
reflectiveCurveToRelative(-5.75f, -5.12f, -8.58f, -4.5f)
|
||||
reflectiveCurveToRelative(-12.7f, 1.53f, -16.26f, 2.08f)
|
||||
reflectiveCurveToRelative(-6.7f, -0.1f, -10.63f, 1.73f)
|
||||
reflectiveCurveTo(121.5f, 184.5f, 121.5f, 184.5f)
|
||||
close()
|
||||
}
|
||||
@@ -0,0 +1,183 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.Brown
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Mouth6Cell() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
mouth6Cell(SolidColor(Color.Yellow), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun mouth6Cell(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData5, fill = Black, fillAlpha = 0.4f)
|
||||
builder.addPath(pathData7, fill = Brown, stroke = Black, strokeLineWidth = 0.5f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(122.0f, 180.0f)
|
||||
reflectiveCurveToRelative(1.0f, 10.0f, 2.0f, 14.0f)
|
||||
reflectiveCurveToRelative(1.5f, 6.5f, 1.5f, 6.5f)
|
||||
reflectiveCurveToRelative(3.0f, 0.0f, 4.0f, -1.0f)
|
||||
reflectiveCurveToRelative(-2.0f, -17.0f, -2.0f, -18.0f)
|
||||
verticalLineToRelative(-2.0f)
|
||||
reflectiveCurveToRelative(-1.49f, 0.0f, -3.0f, 0.11f)
|
||||
arcTo(12.0f, 12.0f, 0.0f, false, false, 122.0f, 180.0f)
|
||||
close()
|
||||
moveTo(131.0f, 179.0f)
|
||||
reflectiveCurveToRelative(1.0f, 10.0f, 2.0f, 14.0f)
|
||||
reflectiveCurveToRelative(1.5f, 6.5f, 1.5f, 6.5f)
|
||||
reflectiveCurveToRelative(3.0f, 0.0f, 4.0f, -1.0f)
|
||||
reflectiveCurveToRelative(-2.0f, -17.0f, -2.0f, -18.0f)
|
||||
verticalLineToRelative(-2.0f)
|
||||
reflectiveCurveToRelative(-1.49f, 0.0f, -3.0f, 0.11f)
|
||||
arcTo(12.0f, 12.0f, 0.0f, false, false, 131.0f, 179.0f)
|
||||
close()
|
||||
moveTo(141.0f, 179.0f)
|
||||
reflectiveCurveToRelative(1.0f, 10.0f, 2.0f, 14.0f)
|
||||
reflectiveCurveToRelative(1.5f, 6.5f, 1.5f, 6.5f)
|
||||
reflectiveCurveToRelative(3.0f, 0.0f, 4.0f, -1.0f)
|
||||
reflectiveCurveToRelative(-2.0f, -17.0f, -2.0f, -18.0f)
|
||||
verticalLineToRelative(-2.0f)
|
||||
reflectiveCurveToRelative(-1.49f, 0.0f, -3.0f, 0.11f)
|
||||
arcTo(12.0f, 12.0f, 0.0f, false, false, 141.0f, 179.0f)
|
||||
close()
|
||||
moveTo(149.0f, 178.0f)
|
||||
reflectiveCurveToRelative(1.0f, 10.0f, 2.0f, 14.0f)
|
||||
reflectiveCurveToRelative(1.5f, 6.5f, 1.5f, 6.5f)
|
||||
reflectiveCurveToRelative(3.0f, 0.0f, 4.0f, -1.0f)
|
||||
reflectiveCurveToRelative(-2.0f, -17.0f, -2.0f, -18.0f)
|
||||
verticalLineToRelative(-2.0f)
|
||||
reflectiveCurveToRelative(-1.49f, 0.0f, -3.0f, 0.11f)
|
||||
arcTo(12.0f, 12.0f, 0.0f, false, false, 149.0f, 178.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData5 =
|
||||
PathData {
|
||||
moveTo(122.0f, 180.0f)
|
||||
reflectiveCurveToRelative(1.0f, 10.0f, 2.0f, 14.0f)
|
||||
reflectiveCurveToRelative(1.5f, 6.5f, 1.5f, 6.5f)
|
||||
reflectiveCurveToRelative(3.0f, 0.0f, 4.0f, -1.0f)
|
||||
reflectiveCurveToRelative(-2.0f, -17.0f, -2.0f, -18.0f)
|
||||
verticalLineToRelative(-2.0f)
|
||||
reflectiveCurveToRelative(-1.49f, 0.0f, -3.0f, 0.11f)
|
||||
arcTo(12.0f, 12.0f, 0.0f, false, false, 122.0f, 180.0f)
|
||||
close()
|
||||
moveTo(131.0f, 179.0f)
|
||||
reflectiveCurveToRelative(1.0f, 10.0f, 2.0f, 14.0f)
|
||||
reflectiveCurveToRelative(1.5f, 6.5f, 1.5f, 6.5f)
|
||||
reflectiveCurveToRelative(3.0f, 0.0f, 4.0f, -1.0f)
|
||||
reflectiveCurveToRelative(-2.0f, -17.0f, -2.0f, -18.0f)
|
||||
verticalLineToRelative(-2.0f)
|
||||
reflectiveCurveToRelative(-1.49f, 0.0f, -3.0f, 0.11f)
|
||||
arcTo(12.0f, 12.0f, 0.0f, false, false, 131.0f, 179.0f)
|
||||
close()
|
||||
moveTo(141.0f, 179.0f)
|
||||
reflectiveCurveToRelative(1.0f, 10.0f, 2.0f, 14.0f)
|
||||
reflectiveCurveToRelative(1.5f, 6.5f, 1.5f, 6.5f)
|
||||
reflectiveCurveToRelative(3.0f, 0.0f, 4.0f, -1.0f)
|
||||
reflectiveCurveToRelative(-2.0f, -17.0f, -2.0f, -18.0f)
|
||||
verticalLineToRelative(-2.0f)
|
||||
reflectiveCurveToRelative(-1.49f, 0.0f, -3.0f, 0.11f)
|
||||
arcTo(12.0f, 12.0f, 0.0f, false, false, 141.0f, 179.0f)
|
||||
close()
|
||||
moveTo(149.0f, 178.0f)
|
||||
reflectiveCurveToRelative(1.0f, 10.0f, 2.0f, 14.0f)
|
||||
reflectiveCurveToRelative(1.5f, 6.5f, 1.5f, 6.5f)
|
||||
reflectiveCurveToRelative(3.0f, 0.0f, 4.0f, -1.0f)
|
||||
reflectiveCurveToRelative(-2.0f, -17.0f, -2.0f, -18.0f)
|
||||
verticalLineToRelative(-2.0f)
|
||||
reflectiveCurveToRelative(-1.49f, 0.0f, -3.0f, 0.11f)
|
||||
arcTo(12.0f, 12.0f, 0.0f, false, false, 149.0f, 178.0f)
|
||||
close()
|
||||
}
|
||||
|
||||
private val pathData7 =
|
||||
PathData {
|
||||
moveTo(124.5f, 180.5f)
|
||||
reflectiveCurveToRelative(1.0f, 11.0f, 2.0f, 14.0f)
|
||||
arcToRelative(15.77f, 15.77f, 0.0f, false, true, 1.0f, 4.0f)
|
||||
reflectiveCurveToRelative(2.34f, -0.11f, 2.17f, 0.44f)
|
||||
arcToRelative(31.0f, 31.0f, 0.0f, false, false, -0.82f, -8.63f)
|
||||
arcToRelative(59.0f, 59.0f, 0.0f, false, true, -1.35f, -10.07f)
|
||||
verticalLineToRelative(-0.75f)
|
||||
horizontalLineToRelative(-3.0f)
|
||||
close()
|
||||
moveTo(125.85f, 200.49f)
|
||||
lineTo(127.5f, 198.5f)
|
||||
moveTo(133.5f, 179.5f)
|
||||
reflectiveCurveToRelative(1.0f, 11.0f, 2.0f, 14.0f)
|
||||
arcToRelative(15.77f, 15.77f, 0.0f, false, true, 1.0f, 4.0f)
|
||||
reflectiveCurveToRelative(2.34f, -0.11f, 2.17f, 0.44f)
|
||||
arcToRelative(31.0f, 31.0f, 0.0f, false, false, -0.82f, -8.63f)
|
||||
arcToRelative(59.0f, 59.0f, 0.0f, false, true, -1.35f, -10.07f)
|
||||
verticalLineToRelative(-0.75f)
|
||||
horizontalLineToRelative(-3.0f)
|
||||
close()
|
||||
moveTo(134.85f, 199.49f)
|
||||
lineTo(136.5f, 197.5f)
|
||||
moveTo(143.5f, 179.5f)
|
||||
reflectiveCurveToRelative(1.0f, 11.0f, 2.0f, 14.0f)
|
||||
arcToRelative(15.77f, 15.77f, 0.0f, false, true, 1.0f, 4.0f)
|
||||
reflectiveCurveToRelative(2.34f, -0.11f, 2.17f, 0.44f)
|
||||
arcToRelative(31.0f, 31.0f, 0.0f, false, false, -0.82f, -8.63f)
|
||||
arcToRelative(59.0f, 59.0f, 0.0f, false, true, -1.35f, -10.07f)
|
||||
verticalLineToRelative(-0.75f)
|
||||
horizontalLineToRelative(-3.0f)
|
||||
close()
|
||||
moveTo(144.85f, 199.49f)
|
||||
lineTo(146.5f, 197.5f)
|
||||
moveTo(151.5f, 178.5f)
|
||||
reflectiveCurveToRelative(1.0f, 11.0f, 2.0f, 14.0f)
|
||||
arcToRelative(15.77f, 15.77f, 0.0f, false, true, 1.0f, 4.0f)
|
||||
reflectiveCurveToRelative(2.34f, -0.11f, 2.17f, 0.44f)
|
||||
arcToRelative(31.0f, 31.0f, 0.0f, false, false, -0.82f, -8.63f)
|
||||
arcToRelative(59.0f, 59.0f, 0.0f, false, true, -1.35f, -10.07f)
|
||||
verticalLineToRelative(-0.75f)
|
||||
horizontalLineToRelative(-3.0f)
|
||||
close()
|
||||
moveTo(152.85f, 198.49f)
|
||||
lineTo(154.5f, 196.5f)
|
||||
}
|
||||
+104
@@ -0,0 +1,104 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.OrangeThree
|
||||
import com.vitorpamplona.amethyst.commons.Yellow
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Mouth7Happy() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
mouth7Happy(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun mouth7Happy(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor)
|
||||
builder.addPath(pathData2, fill = Black, stroke = Black, fillAlpha = 0.4f, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData3, fill = OrangeThree, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData4, fill = Yellow, stroke = Black, strokeLineWidth = 0.75f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(148.0f, 175.0f)
|
||||
reflectiveCurveToRelative(-6.5f, 0.5f, -12.5f, 1.5f)
|
||||
arcToRelative(83.3f, 83.3f, 0.0f, false, true, -12.0f, 1.0f)
|
||||
verticalLineToRelative(14.0f)
|
||||
curveToRelative(0.0f, 2.0f, 3.0f, 13.0f, 13.0f, 12.0f)
|
||||
reflectiveCurveToRelative(13.0f, -7.0f, 13.0f, -11.0f)
|
||||
reflectiveCurveToRelative(-1.0f, -17.0f, -1.0f, -17.0f)
|
||||
horizontalLineToRelative(0.0f)
|
||||
reflectiveCurveTo(148.5f, 174.5f, 148.0f, 175.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(148.0f, 175.0f)
|
||||
reflectiveCurveToRelative(-6.5f, 0.5f, -12.5f, 1.5f)
|
||||
arcToRelative(83.3f, 83.3f, 0.0f, false, true, -12.0f, 1.0f)
|
||||
verticalLineToRelative(14.0f)
|
||||
curveToRelative(0.0f, 2.0f, 3.0f, 13.0f, 13.0f, 12.0f)
|
||||
reflectiveCurveToRelative(13.0f, -7.0f, 13.0f, -11.0f)
|
||||
reflectiveCurveToRelative(-1.0f, -17.0f, -1.0f, -17.0f)
|
||||
horizontalLineToRelative(0.0f)
|
||||
reflectiveCurveTo(148.5f, 174.5f, 148.0f, 175.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(129.59f, 177.21f)
|
||||
lineTo(130.0f, 191.0f)
|
||||
reflectiveCurveToRelative(1.0f, 7.0f, 7.0f, 8.0f)
|
||||
reflectiveCurveToRelative(12.0f, -0.83f, 12.5f, -4.92f)
|
||||
reflectiveCurveToRelative(-1.0f, -19.58f, -1.0f, -19.58f)
|
||||
lineToRelative(-10.88f, 1.67f)
|
||||
curveTo(135.5f, 176.5f, 129.59f, 177.21f, 129.59f, 177.21f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(137.25f, 176.19f)
|
||||
lineToRelative(0.22f, 22.88f)
|
||||
reflectiveCurveToRelative(-7.0f, -0.57f, -7.39f, -7.64f)
|
||||
curveToRelative(-0.58f, -4.93f, -0.58f, -13.93f, -0.58f, -13.93f)
|
||||
close()
|
||||
}
|
||||
+143
@@ -0,0 +1,143 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.OrangeThree
|
||||
import com.vitorpamplona.amethyst.commons.OrangeTwo
|
||||
import com.vitorpamplona.amethyst.commons.Yellow
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Mouth8Buttons() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
mouth8Buttons(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun mouth8Buttons(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData2, fill = Black, fillAlpha = 0.4f, strokeAlpha = 0.4f)
|
||||
builder.addPath(pathData4, stroke = Black, strokeLineWidth = 0.5f)
|
||||
builder.addPath(pathData7, fill = OrangeThree, stroke = Black, strokeLineWidth = 1.2f)
|
||||
builder.addPath(pathData8, fill = Yellow, stroke = Black, strokeLineWidth = 0.75f)
|
||||
builder.addPath(pathData10, fill = OrangeTwo, stroke = Black, strokeLineWidth = 0.75f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(109.5f, 197.5f)
|
||||
curveToRelative(0.0f, 4.0f, 1.0f, 5.0f, 1.0f, 5.0f)
|
||||
horizontalLineToRelative(34.0f)
|
||||
curveToRelative(10.0f, 0.0f, 21.0f, -1.0f, 21.0f, -1.0f)
|
||||
verticalLineToRelative(-23.0f)
|
||||
lineToRelative(-1.0f, -4.0f)
|
||||
horizontalLineToRelative(-2.0f)
|
||||
curveToRelative(-2.0f, 0.0f, -54.5f, 0.5f, -54.5f, 0.5f)
|
||||
verticalLineToRelative(11.0f)
|
||||
close()
|
||||
}
|
||||
private val pathData2 =
|
||||
PathData {
|
||||
moveTo(163.5f, 174.5f)
|
||||
verticalLineToRelative(25.0f)
|
||||
reflectiveCurveToRelative(-52.0f, 1.5f, -53.75f, 1.0f)
|
||||
lineToRelative(0.61f, 1.79f)
|
||||
lineToRelative(28.9f, 0.21f)
|
||||
reflectiveCurveToRelative(19.65f, -0.79f, 21.7f, -0.65f)
|
||||
arcTo(9.0f, 9.0f, 0.0f, false, false, 165.0f, 201.0f)
|
||||
lineToRelative(0.41f, -22.84f)
|
||||
reflectiveCurveTo(164.0f, 174.0f, 163.5f, 174.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(113.5f, 200.5f)
|
||||
horizontalLineToRelative(27.0f)
|
||||
curveToRelative(10.0f, 0.0f, 23.0f, -1.0f, 23.0f, -1.0f)
|
||||
verticalLineToRelative(-24.0f)
|
||||
moveTo(163.5f, 199.5f)
|
||||
lineTo(165.0f, 201.0f)
|
||||
moveTo(162.0f, 177.0f)
|
||||
verticalLineToRelative(12.0f)
|
||||
}
|
||||
|
||||
private val pathData7 =
|
||||
PathData {
|
||||
moveTo(112.5f, 177.5f)
|
||||
horizontalLineToRelative(27.0f)
|
||||
curveToRelative(9.0f, 0.0f, 20.0f, -1.0f, 20.0f, -1.0f)
|
||||
verticalLineToRelative(20.0f)
|
||||
lineToRelative(-54.0f, 1.0f)
|
||||
arcToRelative(34.21f, 34.21f, 0.0f, false, true, 2.0f, -11.0f)
|
||||
arcTo(44.27f, 44.27f, 0.0f, false, true, 112.5f, 177.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData8 =
|
||||
PathData {
|
||||
moveTo(159.0f, 176.5f)
|
||||
reflectiveCurveToRelative(-3.0f, 7.5f, -4.0f, 11.5f)
|
||||
arcToRelative(87.0f, 87.0f, 0.0f, false, false, -1.59f, 8.61f)
|
||||
lineToRelative(-12.91f, 0.19f)
|
||||
reflectiveCurveToRelative(-1.0f, -2.3f, 1.0f, -7.3f)
|
||||
reflectiveCurveToRelative(5.0f, -12.0f, 5.0f, -12.0f)
|
||||
reflectiveCurveTo(157.5f, 177.0f, 159.0f, 176.5f)
|
||||
close()
|
||||
moveTo(128.5f, 196.89f)
|
||||
horizontalLineToRelative(-11.0f)
|
||||
arcToRelative(19.28f, 19.28f, 0.0f, false, true, 2.0f, -11.22f)
|
||||
curveToRelative(3.0f, -6.12f, 3.75f, -8.16f, 3.75f, -8.16f)
|
||||
horizontalLineToRelative(11.56f)
|
||||
reflectiveCurveToRelative(-1.31f, 3.06f, -2.31f, 6.12f)
|
||||
reflectiveCurveToRelative(-4.0f, 6.12f, -4.0f, 10.2f)
|
||||
close()
|
||||
}
|
||||
private val pathData10 =
|
||||
PathData {
|
||||
moveTo(135.13f, 177.5f)
|
||||
horizontalLineTo(146.5f)
|
||||
lineToRelative(-5.43f, 13.25f)
|
||||
arcToRelative(8.08f, 8.08f, 0.0f, false, false, -0.82f, 4.0f)
|
||||
curveToRelative(0.25f, 1.89f, 0.0f, 2.25f, 0.0f, 2.25f)
|
||||
horizontalLineTo(128.5f)
|
||||
arcToRelative(23.82f, 23.82f, 0.0f, false, true, 0.92f, -7.35f)
|
||||
curveToRelative(1.08f, -3.08f, 2.1f, -3.0f, 3.59f, -7.58f)
|
||||
reflectiveCurveTo(135.13f, 177.5f, 135.13f, 177.5f)
|
||||
close()
|
||||
}
|
||||
+136
@@ -0,0 +1,136 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.commons.robohashparts
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.vector.ImageVector.Builder
|
||||
import androidx.compose.ui.graphics.vector.PathData
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.vitorpamplona.amethyst.commons.Black
|
||||
import com.vitorpamplona.amethyst.commons.roboBuilder
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun Mouth9Closed() {
|
||||
Image(
|
||||
painter =
|
||||
rememberVectorPainter(
|
||||
roboBuilder {
|
||||
mouth9Closed(SolidColor(Color.Blue), this)
|
||||
},
|
||||
),
|
||||
contentDescription = "",
|
||||
)
|
||||
}
|
||||
|
||||
fun mouth9Closed(
|
||||
fgColor: SolidColor,
|
||||
builder: Builder,
|
||||
) {
|
||||
builder.addPath(pathData1, fill = fgColor, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData3, fill = Black, stroke = Black, fillAlpha = 0.1f, strokeAlpha = 0.1f, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData4, fill = Black, fillAlpha = 0.4f, strokeAlpha = 1f, stroke = Black, strokeLineWidth = 1.0f)
|
||||
builder.addPath(pathData6, fill = Black, stroke = Black, fillAlpha = 0.4f, strokeLineWidth = 0.75f)
|
||||
builder.addPath(pathData7, stroke = Black, strokeLineWidth = 1.0f)
|
||||
}
|
||||
|
||||
private val pathData1 =
|
||||
PathData {
|
||||
moveTo(105.5f, 180.5f)
|
||||
reflectiveCurveToRelative(18.0f, 3.0f, 32.0f, 0.0f)
|
||||
reflectiveCurveToRelative(32.0f, -11.0f, 32.0f, -11.0f)
|
||||
horizontalLineToRelative(1.33f)
|
||||
arcToRelative(1.13f, 1.13f, 0.0f, false, true, 0.85f, 0.65f)
|
||||
lineToRelative(4.82f, 17.35f)
|
||||
verticalLineToRelative(3.0f)
|
||||
arcToRelative(3.73f, 3.73f, 0.0f, false, true, -0.94f, 1.67f)
|
||||
curveToRelative(-2.53f, 1.85f, -9.8f, 6.88f, -17.06f, 9.3f)
|
||||
arcToRelative(72.67f, 72.67f, 0.0f, false, true, -25.0f, 4.0f)
|
||||
curveToRelative(-8.1f, 0.0f, -21.07f, -4.05f, -23.57f, -4.86f)
|
||||
lineToRelative(-0.43f, -0.14f)
|
||||
lineToRelative(-5.0f, -19.0f)
|
||||
arcTo(1.0f, 1.0f, 0.0f, false, true, 105.5f, 180.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData3 =
|
||||
PathData {
|
||||
moveTo(105.5f, 180.5f)
|
||||
reflectiveCurveToRelative(18.0f, 3.0f, 32.0f, 0.0f)
|
||||
reflectiveCurveToRelative(32.0f, -11.0f, 32.0f, -11.0f)
|
||||
horizontalLineToRelative(1.33f)
|
||||
arcToRelative(1.13f, 1.13f, 0.0f, false, true, 0.85f, 0.65f)
|
||||
lineToRelative(4.82f, 17.35f)
|
||||
verticalLineToRelative(3.0f)
|
||||
arcToRelative(3.73f, 3.73f, 0.0f, false, true, -0.94f, 1.67f)
|
||||
curveToRelative(-2.53f, 1.85f, -9.8f, 6.88f, -17.06f, 9.3f)
|
||||
arcToRelative(72.67f, 72.67f, 0.0f, false, true, -25.0f, 4.0f)
|
||||
curveToRelative(-8.1f, 0.0f, -21.07f, -4.05f, -23.57f, -4.86f)
|
||||
lineToRelative(-0.43f, -0.14f)
|
||||
lineToRelative(-5.0f, -19.0f)
|
||||
arcTo(1.0f, 1.0f, 0.0f, false, true, 105.5f, 180.5f)
|
||||
close()
|
||||
}
|
||||
private val pathData4 =
|
||||
PathData {
|
||||
moveTo(108.33f, 195.83f)
|
||||
curveToRelative(0.0f, -0.11f, -2.8f, -10.45f, -3.4f, -12.94f)
|
||||
arcToRelative(6.79f, 6.79f, 0.0f, false, true, -0.3f, -2.0f)
|
||||
arcToRelative(2.1f, 2.1f, 0.0f, false, true, 0.46f, 0.0f)
|
||||
arcToRelative(3.0f, 3.0f, 0.0f, false, true, 1.77f, 0.84f)
|
||||
curveToRelative(0.32f, 0.85f, 3.0f, 8.16f, 4.0f, 11.88f)
|
||||
arcToRelative(31.56f, 31.56f, 0.0f, false, true, 1.0f, 5.64f)
|
||||
lineToRelative(-2.35f, 0.78f)
|
||||
close()
|
||||
}
|
||||
private val pathData6 =
|
||||
PathData {
|
||||
moveTo(111.5f, 199.5f)
|
||||
reflectiveCurveToRelative(17.0f, 6.0f, 36.0f, 2.0f)
|
||||
reflectiveCurveToRelative(29.0f, -11.87f, 29.0f, -11.87f)
|
||||
verticalLineToRelative(0.88f)
|
||||
lineToRelative(-0.36f, 0.94f)
|
||||
lineToRelative(-0.44f, 0.64f)
|
||||
lineTo(174.0f, 193.33f)
|
||||
lineToRelative(-7.0f, 4.33f)
|
||||
lineTo(159.9f, 201.0f)
|
||||
lineToRelative(-10.68f, 3.0f)
|
||||
lineToRelative(-4.63f, 0.79f)
|
||||
lineToRelative(-5.34f, 0.51f)
|
||||
lineToRelative(-5.75f, 0.16f)
|
||||
lineToRelative(-5.06f, -0.39f)
|
||||
lineTo(121.0f, 203.7f)
|
||||
lineTo(114.57f, 202.0f)
|
||||
lineToRelative(-5.07f, -1.54f)
|
||||
lineToRelative(-0.12f, -0.67f)
|
||||
close()
|
||||
}
|
||||
private val pathData7 =
|
||||
PathData {
|
||||
moveTo(116.51f, 200.51f)
|
||||
curveToRelative(1.0f, -3.0f, 3.0f, -11.0f, 3.0f, -11.0f)
|
||||
reflectiveCurveToRelative(4.0f, 2.0f, 13.0f, 2.0f)
|
||||
reflectiveCurveToRelative(27.0f, -7.0f, 27.0f, -7.0f)
|
||||
reflectiveCurveToRelative(7.0f, 6.0f, 8.0f, 10.0f)
|
||||
}
|
||||
@@ -57,6 +57,7 @@ androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", versi
|
||||
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
|
||||
androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
|
||||
androidx-fragment-ktx = { group = "androidx.fragment", name = "fragment-ktx", version.ref = "fragmentKtx" }
|
||||
androidx-compose-foundation = { group = "androidx.compose.foundation", name = "foundation" }
|
||||
androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "androidxJunit" }
|
||||
androidx-junit-ktx = { group = "androidx.test.ext", name = "junit-ktx", version.ref = "androidxJunit" }
|
||||
androidx-lifecycle-livedata-ktx = { group = "androidx.lifecycle", name = "lifecycle-livedata-ktx", version.ref = "androidLifecycle" }
|
||||
|
||||
Reference in New Issue
Block a user