Add sliders to set ISO and aperture
This commit is contained in:
@@ -11,11 +11,11 @@ import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material3.Slider
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.MutableState
|
||||
@@ -27,6 +27,7 @@ import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import eu.wa5p.lightmeter.ui.theme.LightMeterTheme
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
const val TAG: String = "lightmeter MainActivity"
|
||||
|
||||
@@ -104,16 +105,22 @@ fun LightmeterListItem(
|
||||
) {
|
||||
Row(modifier = Modifier.padding(bottom = 8.dp)) {
|
||||
Text(
|
||||
modifier = Modifier.weight(0.4f).padding(all = 8.dp),
|
||||
modifier = Modifier
|
||||
.weight(0.4f)
|
||||
.padding(all = 8.dp),
|
||||
text = label
|
||||
)
|
||||
Text(
|
||||
modifier = Modifier.weight(0.4f).padding(all = 8.dp),
|
||||
modifier = Modifier
|
||||
.weight(0.4f)
|
||||
.padding(all = 8.dp),
|
||||
textAlign = TextAlign.Right,
|
||||
text = value
|
||||
)
|
||||
Text(
|
||||
modifier = Modifier.weight(0.2f).padding(all = 8.dp),
|
||||
modifier = Modifier
|
||||
.weight(0.2f)
|
||||
.padding(all = 8.dp),
|
||||
text = unit
|
||||
)
|
||||
}
|
||||
@@ -131,14 +138,86 @@ fun LightmeterListItemPreview() {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Recalculate state on change
|
||||
@Composable
|
||||
fun IsoSlider(state: MutableState<LightmeterState>) {
|
||||
Row(
|
||||
modifier = Modifier.padding(all = 8.dp),
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Text(
|
||||
modifier = Modifier.weight(0.3f),
|
||||
text = "ISO"
|
||||
)
|
||||
Slider(
|
||||
modifier = Modifier.weight(0.7f),
|
||||
value = state.value.iso.toFloat(),
|
||||
onValueChange = { value ->
|
||||
state.value = state.value.copy(iso = value.roundToInt())
|
||||
},
|
||||
valueRange = 1f..2000f
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
val previewlightmeterState = mutableStateOf(
|
||||
LightmeterState(
|
||||
illuminance = 0.0,
|
||||
aperture = 1.8,
|
||||
iso = 100,
|
||||
shutterSpeed = 0.01
|
||||
)
|
||||
)
|
||||
|
||||
@Preview(showBackground = true)
|
||||
@Composable
|
||||
fun IsoSliderPreview() {
|
||||
LightMeterTheme {
|
||||
IsoSlider(
|
||||
state = remember { previewlightmeterState }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Recalculate state on change
|
||||
@Composable
|
||||
fun ApertureSlider(state: MutableState<LightmeterState>) {
|
||||
Row(
|
||||
modifier = Modifier.padding(all = 8.dp),
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Text(
|
||||
modifier = Modifier.weight(0.3f),
|
||||
text = "Aperture"
|
||||
)
|
||||
Slider(
|
||||
modifier = Modifier.weight(0.7f),
|
||||
value = state.value.aperture.toFloat(),
|
||||
onValueChange = { value ->
|
||||
state.value = state.value.copy(aperture = value.toDouble())
|
||||
},
|
||||
valueRange = 0.85f..22f
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Preview(showBackground = true)
|
||||
@Composable
|
||||
fun ApertureSliderPreview() {
|
||||
LightMeterTheme {
|
||||
ApertureSlider(state = remember { previewlightmeterState })
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun LightmeterHomeScreen(state: MutableState<LightmeterState>) {
|
||||
Box(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
contentAlignment = Alignment.Center
|
||||
Column(modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.padding(top = 64.dp)
|
||||
.padding(all = 32.dp)
|
||||
) {
|
||||
Column(
|
||||
verticalArrangement = Arrangement.Center
|
||||
verticalArrangement = Arrangement.Top
|
||||
) {
|
||||
LightmeterListItem(
|
||||
label = "Illuminance",
|
||||
@@ -161,6 +240,14 @@ fun LightmeterHomeScreen(state: MutableState<LightmeterState>) {
|
||||
unit = "s"
|
||||
)
|
||||
}
|
||||
|
||||
Column(
|
||||
modifier = Modifier.padding(top = 64.dp),
|
||||
verticalArrangement = Arrangement.Bottom
|
||||
) {
|
||||
IsoSlider(state = state)
|
||||
ApertureSlider(state = state)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -169,16 +256,7 @@ fun LightmeterHomeScreen(state: MutableState<LightmeterState>) {
|
||||
fun LightmeterHomeScreenPreview() {
|
||||
LightMeterTheme {
|
||||
LightmeterHomeScreen(
|
||||
state = remember {
|
||||
mutableStateOf(
|
||||
LightmeterState(
|
||||
illuminance = 0.0,
|
||||
aperture = 1.8,
|
||||
iso = 100,
|
||||
shutterSpeed = 0.01
|
||||
)
|
||||
)
|
||||
}
|
||||
state = remember { previewlightmeterState }
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user