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.compose.setContent
|
||||||
import androidx.activity.enableEdgeToEdge
|
import androidx.activity.enableEdgeToEdge
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Box
|
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
|
import androidx.compose.material3.Slider
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.MutableState
|
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.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import eu.wa5p.lightmeter.ui.theme.LightMeterTheme
|
import eu.wa5p.lightmeter.ui.theme.LightMeterTheme
|
||||||
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
const val TAG: String = "lightmeter MainActivity"
|
const val TAG: String = "lightmeter MainActivity"
|
||||||
|
|
||||||
@@ -104,16 +105,22 @@ fun LightmeterListItem(
|
|||||||
) {
|
) {
|
||||||
Row(modifier = Modifier.padding(bottom = 8.dp)) {
|
Row(modifier = Modifier.padding(bottom = 8.dp)) {
|
||||||
Text(
|
Text(
|
||||||
modifier = Modifier.weight(0.4f).padding(all = 8.dp),
|
modifier = Modifier
|
||||||
|
.weight(0.4f)
|
||||||
|
.padding(all = 8.dp),
|
||||||
text = label
|
text = label
|
||||||
)
|
)
|
||||||
Text(
|
Text(
|
||||||
modifier = Modifier.weight(0.4f).padding(all = 8.dp),
|
modifier = Modifier
|
||||||
|
.weight(0.4f)
|
||||||
|
.padding(all = 8.dp),
|
||||||
textAlign = TextAlign.Right,
|
textAlign = TextAlign.Right,
|
||||||
text = value
|
text = value
|
||||||
)
|
)
|
||||||
Text(
|
Text(
|
||||||
modifier = Modifier.weight(0.2f).padding(all = 8.dp),
|
modifier = Modifier
|
||||||
|
.weight(0.2f)
|
||||||
|
.padding(all = 8.dp),
|
||||||
text = unit
|
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
|
@Composable
|
||||||
fun LightmeterHomeScreen(state: MutableState<LightmeterState>) {
|
fun LightmeterHomeScreen(state: MutableState<LightmeterState>) {
|
||||||
Box(
|
Column(modifier = Modifier
|
||||||
modifier = Modifier.fillMaxSize(),
|
.fillMaxSize()
|
||||||
contentAlignment = Alignment.Center
|
.padding(top = 64.dp)
|
||||||
|
.padding(all = 32.dp)
|
||||||
) {
|
) {
|
||||||
Column(
|
Column(
|
||||||
verticalArrangement = Arrangement.Center
|
verticalArrangement = Arrangement.Top
|
||||||
) {
|
) {
|
||||||
LightmeterListItem(
|
LightmeterListItem(
|
||||||
label = "Illuminance",
|
label = "Illuminance",
|
||||||
@@ -161,6 +240,14 @@ fun LightmeterHomeScreen(state: MutableState<LightmeterState>) {
|
|||||||
unit = "s"
|
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() {
|
fun LightmeterHomeScreenPreview() {
|
||||||
LightMeterTheme {
|
LightMeterTheme {
|
||||||
LightmeterHomeScreen(
|
LightmeterHomeScreen(
|
||||||
state = remember {
|
state = remember { previewlightmeterState }
|
||||||
mutableStateOf(
|
|
||||||
LightmeterState(
|
|
||||||
illuminance = 0.0,
|
|
||||||
aperture = 1.8,
|
|
||||||
iso = 100,
|
|
||||||
shutterSpeed = 0.01
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user