Merge remote-tracking branch 'fansangg/fix/1424'
# Conflicts: # app/src/main/java/io/legado/app/ui/book/read/ReadBookMenuBar.kt # app/src/main/java/io/legado/app/ui/book/read/sheet/TextTitleSheet.kt
This commit is contained in:
3 files changed
+49
-12
No files matched your search
@@ -668,6 +668,7 @@ private fun ReadBookMenuSurface(
|
|||||||
title = stringResource(R.string.read_config_text_effects),
|
title = stringResource(R.string.read_config_text_effects),
|
||||||
maxHeight = maxHeight,
|
maxHeight = maxHeight,
|
||||||
bottomPadding = if (extendSurfaceToNavigationBar) navBarHeight else 0.dp,
|
bottomPadding = if (extendSurfaceToNavigationBar) navBarHeight else 0.dp,
|
||||||
|
animateSize = false,
|
||||||
onBack = { onIntent(ReadBookIntent.ReadMenuBack) },
|
onBack = { onIntent(ReadBookIntent.ReadMenuBack) },
|
||||||
) {
|
) {
|
||||||
ReadStyleTextTitleContent(
|
ReadStyleTextTitleContent(
|
||||||
@@ -686,7 +687,6 @@ private fun ReadBookMenuSurface(
|
|||||||
onOpenTitleFontSelect = {
|
onOpenTitleFontSelect = {
|
||||||
onIntent(ReadBookIntent.ShowSheet(ReadBookSheet.TitleFontSelect))
|
onIntent(ReadBookIntent.ShowSheet(ReadBookSheet.TitleFontSelect))
|
||||||
},
|
},
|
||||||
modifier = Modifier.padding(horizontal = 16.dp),
|
|
||||||
onIntent = onIntent,
|
onIntent = onIntent,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -140,7 +140,11 @@ fun ReadStyleContent(
|
|||||||
|
|
||||||
internal fun Modifier.pagerHeight(height: Dp) = this.layout { measurable, constraints ->
|
internal fun Modifier.pagerHeight(height: Dp) = this.layout { measurable, constraints ->
|
||||||
val placeable = measurable.measure(constraints)
|
val placeable = measurable.measure(constraints)
|
||||||
val layoutHeight = if (height != Dp.Unspecified) height.roundToPx() else placeable.height
|
val layoutHeight = if (height != Dp.Unspecified) {
|
||||||
|
height.roundToPx().coerceIn(constraints.minHeight, constraints.maxHeight)
|
||||||
|
} else {
|
||||||
|
placeable.height
|
||||||
|
}
|
||||||
layout(placeable.width, layoutHeight) {
|
layout(placeable.width, layoutHeight) {
|
||||||
placeable.placeRelative(0, 0)
|
placeable.placeRelative(0, 0)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
package io.legado.app.ui.book.read.sheet
|
package io.legado.app.ui.book.read.sheet
|
||||||
|
|
||||||
|
import androidx.compose.animation.core.FastOutSlowInEasing
|
||||||
|
import androidx.compose.animation.core.tween
|
||||||
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Spacer
|
import androidx.compose.foundation.layout.Spacer
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
@@ -25,12 +28,16 @@ import androidx.compose.runtime.LaunchedEffect
|
|||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableFloatStateOf
|
import androidx.compose.runtime.mutableFloatStateOf
|
||||||
import androidx.compose.runtime.mutableIntStateOf
|
import androidx.compose.runtime.mutableIntStateOf
|
||||||
|
import androidx.compose.runtime.mutableStateMapOf
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.rememberCoroutineScope
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.runtime.snapshotFlow
|
import androidx.compose.runtime.snapshotFlow
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.draw.clipToBounds
|
||||||
|
import androidx.compose.ui.layout.onSizeChanged
|
||||||
import androidx.compose.ui.res.stringArrayResource
|
import androidx.compose.ui.res.stringArrayResource
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
@@ -80,14 +87,21 @@ fun ReadStyleTextTitleContent(
|
|||||||
ReadStyleTextTitleContent(
|
ReadStyleTextTitleContent(
|
||||||
tabTitles = tabTitles,
|
tabTitles = tabTitles,
|
||||||
selectedTab = selectedTab,
|
selectedTab = selectedTab,
|
||||||
onSelectedTabChange = { selectedTab = it },
|
|
||||||
pagerState = pagerState,
|
pagerState = pagerState,
|
||||||
onOpenShadowSet = onOpenShadowSet,
|
onOpenShadowSet = onOpenShadowSet,
|
||||||
onOpenUnderlineConfig = onOpenUnderlineConfig,
|
onOpenUnderlineConfig = onOpenUnderlineConfig,
|
||||||
onOpenHighlightRule = onOpenHighlightRule,
|
onOpenHighlightRule = onOpenHighlightRule,
|
||||||
onOpenFontSelect = onOpenFontSelect,
|
onOpenFontSelect = onOpenFontSelect,
|
||||||
onOpenTitleFontSelect = onOpenTitleFontSelect,
|
onOpenTitleFontSelect = onOpenTitleFontSelect,
|
||||||
animateToPage = { page -> scope.launch { pagerState.animateScrollToPage(page) } },
|
animateToPage = { page ->
|
||||||
|
selectedTab = page
|
||||||
|
scope.launch {
|
||||||
|
pagerState.animateScrollToPage(
|
||||||
|
page = page,
|
||||||
|
animationSpec = tween(durationMillis = 300, easing = FastOutSlowInEasing)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
},
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
onIntent = onIntent,
|
onIntent = onIntent,
|
||||||
)
|
)
|
||||||
@@ -97,7 +111,6 @@ fun ReadStyleTextTitleContent(
|
|||||||
internal fun ReadStyleTextTitleContent(
|
internal fun ReadStyleTextTitleContent(
|
||||||
tabTitles: List<String>,
|
tabTitles: List<String>,
|
||||||
selectedTab: Int,
|
selectedTab: Int,
|
||||||
onSelectedTabChange: (Int) -> Unit,
|
|
||||||
pagerState: PagerState,
|
pagerState: PagerState,
|
||||||
onOpenShadowSet: () -> Unit,
|
onOpenShadowSet: () -> Unit,
|
||||||
onOpenUnderlineConfig: () -> Unit,
|
onOpenUnderlineConfig: () -> Unit,
|
||||||
@@ -108,6 +121,9 @@ internal fun ReadStyleTextTitleContent(
|
|||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
onIntent: (ReadBookIntent) -> Unit,
|
onIntent: (ReadBookIntent) -> Unit,
|
||||||
) {
|
) {
|
||||||
|
val pageHeights = remember { mutableStateMapOf<Int, Int>() }
|
||||||
|
val animatedHeight by rememberPagerAnimatedHeight(pagerState, pageHeights)
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
modifier = modifier
|
modifier = modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
@@ -116,27 +132,35 @@ internal fun ReadStyleTextTitleContent(
|
|||||||
tabTitles = tabTitles,
|
tabTitles = tabTitles,
|
||||||
selectedTabIndex = selectedTab,
|
selectedTabIndex = selectedTab,
|
||||||
onTabSelected = { index ->
|
onTabSelected = { index ->
|
||||||
onSelectedTabChange(index)
|
|
||||||
animateToPage(index)
|
animateToPage(index)
|
||||||
},
|
},
|
||||||
modifier = Modifier.padding(bottom = 8.dp),
|
modifier = Modifier.padding(start = 16.dp, end = 16.dp, bottom = 8.dp),
|
||||||
)
|
)
|
||||||
HorizontalPager(
|
HorizontalPager(
|
||||||
state = pagerState,
|
state = pagerState,
|
||||||
modifier = Modifier.fillMaxWidth(),
|
verticalAlignment = Alignment.Top,
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.clipToBounds()
|
||||||
|
.pagerHeight(animatedHeight),
|
||||||
) { page ->
|
) { page ->
|
||||||
|
val pageModifier = Modifier.onSizeChanged { size ->
|
||||||
|
pageHeights[page] = size.height
|
||||||
|
}
|
||||||
when (page) {
|
when (page) {
|
||||||
0 -> TextEffectsPage(
|
0 -> TextEffectsPage(
|
||||||
onOpenShadowSet = onOpenShadowSet,
|
onOpenShadowSet = onOpenShadowSet,
|
||||||
onOpenUnderlineConfig = onOpenUnderlineConfig,
|
onOpenUnderlineConfig = onOpenUnderlineConfig,
|
||||||
onOpenHighlightRule = onOpenHighlightRule,
|
onOpenHighlightRule = onOpenHighlightRule,
|
||||||
onOpenFontSelect = onOpenFontSelect,
|
onOpenFontSelect = onOpenFontSelect,
|
||||||
|
modifier = pageModifier,
|
||||||
onIntent = onIntent,
|
onIntent = onIntent,
|
||||||
)
|
)
|
||||||
|
|
||||||
1 -> LayoutSpacingPage(onIntent = onIntent)
|
1 -> LayoutSpacingPage(modifier = pageModifier, onIntent = onIntent)
|
||||||
2 -> TitleSettingsPage(
|
2 -> TitleSettingsPage(
|
||||||
onOpenTitleFontSelect = onOpenTitleFontSelect,
|
onOpenTitleFontSelect = onOpenTitleFontSelect,
|
||||||
|
modifier = pageModifier,
|
||||||
onIntent = onIntent,
|
onIntent = onIntent,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -148,6 +172,7 @@ internal fun ReadStyleTextTitleContent(
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
internal fun LayoutSpacingPage(
|
internal fun LayoutSpacingPage(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
onIntent: (ReadBookIntent) -> Unit,
|
onIntent: (ReadBookIntent) -> Unit,
|
||||||
) {
|
) {
|
||||||
var letterSpacing by remember { mutableFloatStateOf(ReadBookConfig.letterSpacing) }
|
var letterSpacing by remember { mutableFloatStateOf(ReadBookConfig.letterSpacing) }
|
||||||
@@ -158,7 +183,9 @@ internal fun LayoutSpacingPage(
|
|||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.verticalScroll(rememberScrollState()),
|
.padding(horizontal = 16.dp)
|
||||||
|
.verticalScroll(rememberScrollState())
|
||||||
|
.then(modifier),
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = stringResource(R.string.read_config_body_spacing),
|
text = stringResource(R.string.read_config_body_spacing),
|
||||||
@@ -217,6 +244,7 @@ internal fun TextEffectsPage(
|
|||||||
onOpenUnderlineConfig: () -> Unit,
|
onOpenUnderlineConfig: () -> Unit,
|
||||||
onOpenHighlightRule: () -> Unit,
|
onOpenHighlightRule: () -> Unit,
|
||||||
onOpenFontSelect: () -> Unit,
|
onOpenFontSelect: () -> Unit,
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
onIntent: (ReadBookIntent) -> Unit,
|
onIntent: (ReadBookIntent) -> Unit,
|
||||||
) {
|
) {
|
||||||
var textItalic by remember { mutableStateOf(ReadBookConfig.textItalic) }
|
var textItalic by remember { mutableStateOf(ReadBookConfig.textItalic) }
|
||||||
@@ -229,7 +257,9 @@ internal fun TextEffectsPage(
|
|||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.verticalScroll(rememberScrollState()),
|
.padding(horizontal = 16.dp)
|
||||||
|
.verticalScroll(rememberScrollState())
|
||||||
|
.then(modifier),
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = stringResource(R.string.text_typeface),
|
text = stringResource(R.string.text_typeface),
|
||||||
@@ -365,6 +395,7 @@ internal fun TextEffectsPage(
|
|||||||
@Composable
|
@Composable
|
||||||
internal fun TitleSettingsPage(
|
internal fun TitleSettingsPage(
|
||||||
onOpenTitleFontSelect: () -> Unit,
|
onOpenTitleFontSelect: () -> Unit,
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
onIntent: (ReadBookIntent) -> Unit,
|
onIntent: (ReadBookIntent) -> Unit,
|
||||||
) {
|
) {
|
||||||
var titleMode by remember(ReadBookConfig.titleMode) { mutableIntStateOf(ReadBookConfig.titleMode) }
|
var titleMode by remember(ReadBookConfig.titleMode) { mutableIntStateOf(ReadBookConfig.titleMode) }
|
||||||
@@ -392,7 +423,9 @@ internal fun TitleSettingsPage(
|
|||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.verticalScroll(rememberScrollState()),
|
.padding(horizontal = 16.dp)
|
||||||
|
.verticalScroll(rememberScrollState())
|
||||||
|
.then(modifier),
|
||||||
) {
|
) {
|
||||||
TinyDropdownSettingItem(
|
TinyDropdownSettingItem(
|
||||||
title = stringResource(R.string.body_title),
|
title = stringResource(R.string.body_title),
|
||||||
|
|||||||
Reference in new issue
Block a user