From e70848a9cfe5631a2a25ef5b5f9b6e250ff0a318 Mon Sep 17 00:00:00 2001 From: Acclorite <140836141+Acclorite@users.noreply.github.com> Date: Tue, 10 Sep 2024 21:17:43 +0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=9B=A0=EF=B8=8F=20Fix=20issues=20with=20P?= =?UTF-8?q?aragraph=20Indentation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fixed indent is not even for all paragraphs in Justify text alignment * Disabled indent for END and CENTER text alignments --- .../screens/reader/ReaderScreen.kt | 16 ++++++---- .../reader/components/ReaderTextParagraph.kt | 10 +++---- .../settings/ParagraphIndentationSetting.kt | 29 ++++++++++++------- 3 files changed, 33 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/ReaderScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/ReaderScreen.kt index cd9cecdf..9b284676 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/ReaderScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/ReaderScreen.kt @@ -82,6 +82,7 @@ import ua.acclorite.book_story.presentation.screens.reader.components.app_bar.Re import ua.acclorite.book_story.presentation.screens.reader.components.readerFastColorPresetChange import ua.acclorite.book_story.presentation.screens.reader.components.settings_bottom_sheet.ReaderSettingsBottomSheet import ua.acclorite.book_story.presentation.screens.reader.data.ReaderEvent +import ua.acclorite.book_story.presentation.screens.settings.nested.reader.data.ReaderTextAlignment @Composable fun ReaderScreenRoot(screen: Screen.Reader) { @@ -250,12 +251,17 @@ private fun ReaderScreen(lazyListState: LazyListState) { false -> FontStyle.Normal } } - val paragraphIndentation = remember(mainState.value.paragraphIndentation) { - var indentation = "" - repeat(mainState.value.paragraphIndentation) { - indentation += " " + val paragraphIndentation = remember( + mainState.value.paragraphIndentation, + mainState.value.textAlignment + ) { + if ( + mainState.value.textAlignment == ReaderTextAlignment.CENTER || + mainState.value.textAlignment == ReaderTextAlignment.END + ) { + return@remember 0.sp } - indentation + (mainState.value.paragraphIndentation * 6).sp } val density = LocalDensity.current diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/ReaderTextParagraph.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/ReaderTextParagraph.kt index 3435203c..e99a085b 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/ReaderTextParagraph.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/ReaderTextParagraph.kt @@ -15,10 +15,10 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.style.LineBreak import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextIndent import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.TextUnit import ua.acclorite.book_story.R @@ -59,7 +59,7 @@ fun LazyItemScope.ReaderTextParagraph( fontSize: TextUnit, letterSpacing: TextUnit, sidePadding: Dp, - paragraphIndentation: String, + paragraphIndentation: TextUnit, fullscreenMode: Boolean, doubleClickTranslationEnabled: Boolean, toolbarHidden: Boolean @@ -81,10 +81,7 @@ fun LazyItemScope.ReaderTextParagraph( } ) { BasicText( - text = buildAnnotatedString { - append(paragraphIndentation) - append(line) - }, + text = line, modifier = Modifier.then( if ( doubleClickTranslationEnabled && @@ -128,6 +125,7 @@ fun LazyItemScope.ReaderTextParagraph( ReaderTextAlignment.CENTER -> TextAlign.Center ReaderTextAlignment.END -> TextAlign.End }, + textIndent = TextIndent(firstLine = paragraphIndentation), fontStyle = fontStyle, letterSpacing = letterSpacing, fontSize = fontSize, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/ParagraphIndentationSetting.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/ParagraphIndentationSetting.kt index afbba70a..207794a1 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/ParagraphIndentationSetting.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/ParagraphIndentationSetting.kt @@ -6,6 +6,8 @@ import ua.acclorite.book_story.R import ua.acclorite.book_story.presentation.core.components.LocalMainViewModel import ua.acclorite.book_story.presentation.data.MainEvent import ua.acclorite.book_story.presentation.screens.settings.components.SliderWithTitle +import ua.acclorite.book_story.presentation.screens.settings.nested.reader.data.ReaderTextAlignment +import ua.acclorite.book_story.presentation.ui.ExpandingTransition /** * Paragraph Indentation setting. @@ -16,15 +18,20 @@ fun ParagraphIndentationSetting() { val state = LocalMainViewModel.current.state val onMainEvent = LocalMainViewModel.current.onEvent - SliderWithTitle( - value = state.value.paragraphIndentation to "pt", - fromValue = 0, - toValue = 10, - title = stringResource(id = R.string.paragraph_indentation_option), - onValueChange = { - onMainEvent( - MainEvent.OnChangeParagraphIndentation(it) - ) - } - ) + ExpandingTransition( + visible = state.value.textAlignment != ReaderTextAlignment.CENTER && + state.value.textAlignment != ReaderTextAlignment.END + ) { + SliderWithTitle( + value = state.value.paragraphIndentation to "pt", + fromValue = 0, + toValue = 12, + title = stringResource(id = R.string.paragraph_indentation_option), + onValueChange = { + onMainEvent( + MainEvent.OnChangeParagraphIndentation(it) + ) + } + ) + } } \ No newline at end of file