fix: 修复阅读菜单滑块同步问题
This commit is contained in:
@@ -1729,28 +1729,45 @@ private fun MenuBottomBar(
|
|||||||
val sliderMax = seekMax.toFloat().coerceAtLeast(1f)
|
val sliderMax = seekMax.toFloat().coerceAtLeast(1f)
|
||||||
var sliderValue by remember { mutableFloatStateOf(state.seekProgress.coerceIn(0, seekMax).toFloat()) }
|
var sliderValue by remember { mutableFloatStateOf(state.seekProgress.coerceIn(0, seekMax).toFloat()) }
|
||||||
var sliderDragging by remember { mutableStateOf(false) }
|
var sliderDragging by remember { mutableStateOf(false) }
|
||||||
|
var previewPageIndex by remember { mutableIntStateOf(state.seekProgress.coerceIn(0, seekMax)) }
|
||||||
val toolButtonsBottomPadding = if (buttonGlassEnabled) 6.dp else 0.dp
|
val toolButtonsBottomPadding = if (buttonGlassEnabled) 6.dp else 0.dp
|
||||||
val contentBottomPadding = if (bottomPadding > toolButtonsBottomPadding) {
|
val contentBottomPadding = if (bottomPadding > toolButtonsBottomPadding) {
|
||||||
bottomPadding - toolButtonsBottomPadding
|
bottomPadding - toolButtonsBottomPadding
|
||||||
} else {
|
} else {
|
||||||
0.dp
|
0.dp
|
||||||
}
|
}
|
||||||
|
val progressBarBehavior = ReadConfig.progressBarBehavior
|
||||||
|
|
||||||
fun commitSliderValue(value: Float) {
|
fun commitSliderValue(value: Float) {
|
||||||
val target = value.roundToInt().coerceIn(0, seekMax)
|
val target = value.roundToInt().coerceIn(0, seekMax)
|
||||||
sliderDragging = false
|
sliderDragging = false
|
||||||
sliderValue = target.toFloat()
|
sliderValue = target.toFloat()
|
||||||
val behavior = ReadConfig.progressBarBehavior
|
previewPageIndex = target
|
||||||
if (behavior == "page") {
|
if (progressBarBehavior == "page") {
|
||||||
onIntent(ReadBookIntent.SkipToPage(target))
|
onIntent(ReadBookIntent.SkipToPage(target))
|
||||||
} else {
|
} else {
|
||||||
onIntent(ReadBookIntent.SeekToChapter(target))
|
onIntent(ReadBookIntent.SeekToChapter(target))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LaunchedEffect(state.seekProgress, seekMax) {
|
fun updateSliderValue(value: Float) {
|
||||||
if (!sliderDragging) {
|
val coercedValue = value.coerceIn(0f, sliderMax)
|
||||||
sliderValue = state.seekProgress.coerceIn(0, seekMax).toFloat()
|
sliderDragging = true
|
||||||
|
sliderValue = coercedValue
|
||||||
|
if (progressBarBehavior == "page") {
|
||||||
|
val target = coercedValue.roundToInt().coerceIn(0, seekMax)
|
||||||
|
if (target != previewPageIndex) {
|
||||||
|
previewPageIndex = target
|
||||||
|
onIntent(ReadBookIntent.SkipToPage(target))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LaunchedEffect(state.seekProgress, seekMax, progressBarBehavior) {
|
||||||
|
val progress = state.seekProgress.coerceIn(0, seekMax)
|
||||||
|
previewPageIndex = progress
|
||||||
|
if (progressBarBehavior == "page" || !sliderDragging) {
|
||||||
|
sliderValue = progress.toFloat()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1810,10 +1827,7 @@ private fun MenuBottomBar(
|
|||||||
|
|
||||||
ReadMenuSlider(
|
ReadMenuSlider(
|
||||||
value = sliderValue.coerceIn(0f, sliderMax),
|
value = sliderValue.coerceIn(0f, sliderMax),
|
||||||
onValueChange = { value ->
|
onValueChange = ::updateSliderValue,
|
||||||
sliderDragging = true
|
|
||||||
sliderValue = value.coerceIn(0f, sliderMax)
|
|
||||||
},
|
|
||||||
onValueChangeFinished = {
|
onValueChangeFinished = {
|
||||||
commitSliderValue(sliderValue)
|
commitSliderValue(sliderValue)
|
||||||
},
|
},
|
||||||
@@ -2721,20 +2735,29 @@ private fun BrightnessBar(
|
|||||||
var sliderValue by remember { mutableFloatStateOf(brightness.toFloat()) }
|
var sliderValue by remember { mutableFloatStateOf(brightness.toFloat()) }
|
||||||
var sliderDragging by remember { mutableStateOf(false) }
|
var sliderDragging by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
LaunchedEffect(brightness) {
|
LaunchedEffect(brightness, brightnessAuto) {
|
||||||
if (!sliderDragging) {
|
if (brightnessAuto) {
|
||||||
|
sliderDragging = false
|
||||||
|
sliderValue = brightness.toFloat()
|
||||||
|
} else if (!sliderDragging) {
|
||||||
sliderValue = brightness.toFloat()
|
sliderValue = brightness.toFloat()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun commitSliderValue(value: Float) {
|
fun commitSliderValue(value: Float) {
|
||||||
if (brightnessAuto) return
|
|
||||||
val target = value.roundToInt().coerceIn(0, 100)
|
val target = value.roundToInt().coerceIn(0, 100)
|
||||||
sliderDragging = false
|
sliderDragging = false
|
||||||
sliderValue = target.toFloat()
|
sliderValue = target.toFloat()
|
||||||
|
if (brightnessAuto) return
|
||||||
onBrightnessChange(target)
|
onBrightnessChange(target)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun toggleAuto() {
|
||||||
|
sliderDragging = false
|
||||||
|
sliderValue = brightness.toFloat()
|
||||||
|
onToggleAuto()
|
||||||
|
}
|
||||||
|
|
||||||
if (vertical) {
|
if (vertical) {
|
||||||
Column(
|
Column(
|
||||||
modifier = modifier
|
modifier = modifier
|
||||||
@@ -2744,7 +2767,7 @@ private fun BrightnessBar(
|
|||||||
verticalArrangement = Arrangement.spacedBy(10.dp),
|
verticalArrangement = Arrangement.spacedBy(10.dp),
|
||||||
) {
|
) {
|
||||||
ReadMenuGlassIconButton(
|
ReadMenuGlassIconButton(
|
||||||
onClick = onToggleAuto,
|
onClick = ::toggleAuto,
|
||||||
icon = Icons.Filled.BrightnessAuto,
|
icon = Icons.Filled.BrightnessAuto,
|
||||||
colors = colors,
|
colors = colors,
|
||||||
backdrop = backdrop,
|
backdrop = backdrop,
|
||||||
@@ -2787,7 +2810,7 @@ private fun BrightnessBar(
|
|||||||
horizontalArrangement = Arrangement.spacedBy(8.dp),
|
horizontalArrangement = Arrangement.spacedBy(8.dp),
|
||||||
) {
|
) {
|
||||||
ReadMenuGlassIconButton(
|
ReadMenuGlassIconButton(
|
||||||
onClick = onToggleAuto,
|
onClick = ::toggleAuto,
|
||||||
icon = Icons.Filled.BrightnessAuto,
|
icon = Icons.Filled.BrightnessAuto,
|
||||||
colors = colors,
|
colors = colors,
|
||||||
backdrop = backdrop,
|
backdrop = backdrop,
|
||||||
|
|||||||
Reference in New Issue
Block a user