• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
<lambda>null2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.egg.landroid
18 
19 import androidx.compose.animation.core.CubicBezierEasing
20 import androidx.compose.animation.core.Easing
21 import androidx.compose.animation.core.tween
22 import androidx.compose.animation.fadeIn
23 import androidx.compose.foundation.background
24 import androidx.compose.foundation.border
25 import androidx.compose.foundation.clickable
26 import androidx.compose.foundation.layout.padding
27 import androidx.compose.material.Text
28 import androidx.compose.material.minimumInteractiveComponentSize
29 import androidx.compose.runtime.Composable
30 import androidx.compose.ui.Modifier
31 import androidx.compose.ui.graphics.Color
32 import androidx.compose.ui.platform.LocalDensity
33 import androidx.compose.ui.text.TextStyle
34 import androidx.compose.ui.unit.Dp
35 import androidx.compose.ui.unit.dp
36 import kotlin.random.Random
37 
38 @Composable fun Dp.toLocalPx() = with(LocalDensity.current) { this@toLocalPx.toPx() }
39 
timesnull40 operator fun Easing.times(next: Easing) = { x: Float -> next.transform(transform(x)) }
41 
flickerFadeEasingnull42 fun flickerFadeEasing(rng: Random) = Easing { frac -> if (rng.nextFloat() < frac) 1f else 0f }
43 
44 val flickerFadeIn =
45     fadeIn(
46         animationSpec =
47             tween(
48                 durationMillis = 1000,
49                 easing = CubicBezierEasing(0f, 1f, 1f, 0f) * flickerFadeEasing(Random),
50             )
51     )
52 
flickerFadeInAfterDelaynull53 fun flickerFadeInAfterDelay(delay: Int = 0) =
54     fadeIn(
55         animationSpec =
56             tween(
57                 durationMillis = 1000,
58                 delayMillis = delay,
59                 easing = CubicBezierEasing(0f, 1f, 1f, 0f) * flickerFadeEasing(Random),
60             )
61     )
62 
63 @Composable
64 fun ConsoleButton(
65     modifier: Modifier = Modifier,
66     textStyle: TextStyle = TextStyle.Default,
67     color: Color,
68     bgColor: Color,
69     borderColor: Color,
70     text: String,
71     onClick: () -> Unit,
72 ) {
73     Text(
74         style = textStyle,
75         color = color,
76         modifier =
77             modifier
78                 .clickable { onClick() }
79                 .background(color = bgColor)
80                 .border(width = 1.dp, color = borderColor)
81                 .padding(6.dp)
82                 .minimumInteractiveComponentSize(),
83         text = text,
84     )
85 }
86