From 959a193e528d31ccc0d96242c298e8bb725e8572 Mon Sep 17 00:00:00 2001 From: Acclorite <2ma0bhpk@anonaddy.com> Date: Fri, 26 Dec 2025 13:22:51 +0200 Subject: [PATCH] feat: add "horizontal limiter" option * Option to show horizontal ruler and dim unfocused part of the screen (both height of the focused part and its vertical position can be customized) * Option to hide horizontal ruler * Option to change horizontal ruler's thickness * Option to change dimming (0-100%) Resolves: #197 --- .../data/settings/SettingsManager.kt | 20 ++++ .../presentation/reader/ReaderScreen.kt | 16 ++++ .../book_story/ui/reader/ReaderContent.kt | 12 +++ .../ui/reader/ReaderHorizontalLimiter.kt | 96 +++++++++++++++++++ .../book_story/ui/reader/ReaderScaffold.kt | 17 ++++ .../reading_speed/ReadingSpeedSubcategory.kt | 30 ++++++ .../HorizontalLimiterDimmingOption.kt | 30 ++++++ .../HorizontalLimiterHeightOption.kt | 31 ++++++ .../components/HorizontalLimiterOption.kt | 27 ++++++ .../HorizontalLimiterRulerOption.kt | 29 ++++++ .../HorizontalLimiterRulerThicknessOption.kt | 31 ++++++ .../HorizontalLimiterVerticalOffsetOption.kt | 30 ++++++ app/src/main/res/values-uk/strings.xml | 9 ++ app/src/main/res/values/strings.xml | 9 ++ 14 files changed, 387 insertions(+) create mode 100644 app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderHorizontalLimiter.kt create mode 100644 app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterDimmingOption.kt create mode 100644 app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterHeightOption.kt create mode 100644 app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterOption.kt create mode 100644 app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterRulerOption.kt create mode 100644 app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterRulerThicknessOption.kt create mode 100644 app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterVerticalOffsetOption.kt diff --git a/app/src/main/java/ua/acclorite/book_story/data/settings/SettingsManager.kt b/app/src/main/java/ua/acclorite/book_story/data/settings/SettingsManager.kt index f99edc54..b7f9e3eb 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/settings/SettingsManager.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/settings/SettingsManager.kt @@ -180,6 +180,26 @@ class SettingsManager @Inject constructor( val perceptionExpanderThickness = setting( key = intPreferencesKey("perception_expander_thickness"), default = 4 ) + val horizontalLimiter = setting( + key = booleanPreferencesKey("horizontal_limiter"), default = false + ) + val horizontalLimiterHeight = setting( + key = intPreferencesKey("horizontal_limiter_height"), default = 6 + ) + val horizontalLimiterVerticalOffset = setting( + key = doublePreferencesKey("horizontal_limiter_vertical_offset"), default = 0.5f, + serialize = { it.toDouble() }, deserialize = { it.toFloat() } + ) + val horizontalLimiterRuler = setting( + key = booleanPreferencesKey("horizontal_limiter_ruler"), default = true + ) + val horizontalLimiterRulerThickness = setting( + key = intPreferencesKey("horizontal_limiter_ruler_thickness"), default = 4 + ) + val horizontalLimiterDimming = setting( + key = doublePreferencesKey("horizontal_limiter_dimming"), default = 0.0f, + serialize = { it.toDouble() }, deserialize = { it.toFloat() } + ) val screenOrientation = setting( key = stringPreferencesKey("screen_orientation"), default = ReaderScreenOrientation.DEFAULT, serialize = { it.name }, deserialize = { ReaderScreenOrientation.valueOf(it) } diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScreen.kt index 2254d944..831d4f8f 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScreen.kt @@ -166,6 +166,16 @@ data class ReaderScreen(val bookId: Int) : Screen, Parcelable { ) { (settings.perceptionExpanderThickness.lastValue * 0.25f).dp } + val horizontalLimiterHeight = remember( + settings.horizontalLimiterHeight.value + ) { + (settings.horizontalLimiterHeight.lastValue * 20).dp + } + val horizontalLimiterRulerThickness = remember( + settings.horizontalLimiterRulerThickness.value + ) { + (settings.horizontalLimiterRulerThickness.lastValue * 0.25f).dp + } val horizontalGestureSensitivity = remember(settings.horizontalGestureSensitivity.value) { (36f + settings.horizontalGestureSensitivity.lastValue * (4f - 36f)).dp } @@ -395,6 +405,12 @@ data class ReaderScreen(val bookId: Int) : Screen, Parcelable { perceptionExpander = settings.perceptionExpander.value, perceptionExpanderPadding = perceptionExpanderPadding, perceptionExpanderThickness = perceptionExpanderThickness, + horizontalLimiter = settings.horizontalLimiter.value, + horizontalLimiterHeight = horizontalLimiterHeight, + horizontalLimiterVerticalOffset = settings.horizontalLimiterVerticalOffset.value, + horizontalLimiterRuler = settings.horizontalLimiterRuler.value, + horizontalLimiterRulerThickness = horizontalLimiterRulerThickness, + horizontalLimiterDimming = settings.horizontalLimiterDimming.value, currentChapterProgress = state.value.currentChapterProgress, isLoading = state.value.isLoading, errorMessage = state.value.errorMessage, diff --git a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderContent.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderContent.kt index 5526b230..3ade31d9 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderContent.kt @@ -46,6 +46,12 @@ fun ReaderContent( perceptionExpander: Boolean, perceptionExpanderPadding: Dp, perceptionExpanderThickness: Dp, + horizontalLimiter: Boolean, + horizontalLimiterHeight: Dp, + horizontalLimiterVerticalOffset: Float, + horizontalLimiterRulerThickness: Dp, + horizontalLimiterRuler: Boolean, + horizontalLimiterDimming: Float, currentChapterProgress: Float, isLoading: Boolean, errorMessage: UIText?, @@ -124,6 +130,12 @@ fun ReaderContent( perceptionExpander = perceptionExpander, perceptionExpanderPadding = perceptionExpanderPadding, perceptionExpanderThickness = perceptionExpanderThickness, + horizontalLimiter = horizontalLimiter, + horizontalLimiterHeight = horizontalLimiterHeight, + horizontalLimiterVerticalOffset = horizontalLimiterVerticalOffset, + horizontalLimiterRuler = horizontalLimiterRuler, + horizontalLimiterRulerThickness = horizontalLimiterRulerThickness, + horizontalLimiterDimming = horizontalLimiterDimming, currentChapterProgress = currentChapterProgress, isLoading = isLoading, checkpoints = checkpoints, diff --git a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderHorizontalLimiter.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderHorizontalLimiter.kt new file mode 100644 index 00000000..968c7a73 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderHorizontalLimiter.kt @@ -0,0 +1,96 @@ +/* + * Book's Story — free and open-source Material You eBook reader. + * Copyright (C) 2024-2025 Acclorite + * SPDX-License-Identifier: GPL-3.0-only + */ + +package ua.acclorite.book_story.ui.reader + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.material3.HorizontalDivider +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.platform.LocalWindowInfo +import androidx.compose.ui.unit.Dp +import ua.acclorite.book_story.ui.theme.DefaultTransition + +@Composable +fun ReaderHorizontalLimiter( + horizontalLimiter: Boolean, + horizontalLimiterHeight: Dp, + horizontalLimiterVerticalOffset: Float, + horizontalLimiterRulerThickness: Dp, + horizontalLimiterRuler: Boolean, + horizontalLimiterDimming: Float, + horizontalLimiterDimmingColor: Color, + horizontalLimiterRulerColor: Color +) { + val density = LocalDensity.current + val windowInfo = LocalWindowInfo.current + val containerHeight = remember(density, windowInfo.containerSize, horizontalLimiterHeight) { + with(density) { + windowInfo.containerSize.height.toDp() - horizontalLimiterHeight + } + } + val verticalLimiterTopOffsetDp = remember( + containerHeight, + horizontalLimiterVerticalOffset + ) { + containerHeight * horizontalLimiterVerticalOffset + } + val verticalLimiterBottomOffsetDp = remember( + containerHeight, + horizontalLimiterVerticalOffset + ) { + containerHeight * (1 - horizontalLimiterVerticalOffset) + } + + DefaultTransition(horizontalLimiter) { + Column( + modifier = Modifier.fillMaxSize() + ) { + Box( + modifier = Modifier + .fillMaxWidth() + .height(verticalLimiterTopOffsetDp) + .background(horizontalLimiterDimmingColor.copy(alpha = horizontalLimiterDimming)) + ) + + Column( + modifier = Modifier + .height( + horizontalLimiterHeight.coerceAtMost( + with(density) { windowInfo.containerSize.height.toDp() } + ) + ), + verticalArrangement = Arrangement.SpaceBetween + ) { + if (horizontalLimiterRuler) { + repeat(2) { + HorizontalDivider( + modifier = Modifier.fillMaxWidth(), + horizontalLimiterRulerThickness, + horizontalLimiterRulerColor + ) + } + } + } + + Box( + modifier = Modifier + .fillMaxWidth() + .height(verticalLimiterBottomOffsetDp) + .background(horizontalLimiterDimmingColor.copy(alpha = horizontalLimiterDimming)) + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScaffold.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScaffold.kt index b8aa4e1d..b461056d 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScaffold.kt @@ -51,6 +51,12 @@ fun ReaderScaffold( perceptionExpander: Boolean, perceptionExpanderPadding: Dp, perceptionExpanderThickness: Dp, + horizontalLimiter: Boolean, + horizontalLimiterHeight: Dp, + horizontalLimiterVerticalOffset: Float, + horizontalLimiterRulerThickness: Dp, + horizontalLimiterRuler: Boolean, + horizontalLimiterDimming: Float, currentChapterProgress: Float, isLoading: Boolean, checkpoints: List, @@ -212,6 +218,17 @@ fun ReaderScaffold( perceptionExpanderColor = fontColor ) + ReaderHorizontalLimiter( + horizontalLimiter = horizontalLimiter, + horizontalLimiterHeight = horizontalLimiterHeight, + horizontalLimiterVerticalOffset = horizontalLimiterVerticalOffset, + horizontalLimiterRulerThickness = horizontalLimiterRulerThickness, + horizontalLimiterRuler = horizontalLimiterRuler, + horizontalLimiterDimming = horizontalLimiterDimming, + horizontalLimiterDimmingColor = backgroundColor, + horizontalLimiterRulerColor = fontColor + ) + if (isLoading) { ReaderLoadingPlaceholder() } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/ReadingSpeedSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/ReadingSpeedSubcategory.kt index f9f5f414..0a5ffca5 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/ReadingSpeedSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/ReadingSpeedSubcategory.kt @@ -17,6 +17,12 @@ import ua.acclorite.book_story.R import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory import ua.acclorite.book_story.ui.settings.reader.reading_speed.components.HighlightedReadingOption import ua.acclorite.book_story.ui.settings.reader.reading_speed.components.HighlightedReadingThicknessOption +import ua.acclorite.book_story.ui.settings.reader.reading_speed.components.HorizontalLimiterDimmingOption +import ua.acclorite.book_story.ui.settings.reader.reading_speed.components.HorizontalLimiterHeightOption +import ua.acclorite.book_story.ui.settings.reader.reading_speed.components.HorizontalLimiterOption +import ua.acclorite.book_story.ui.settings.reader.reading_speed.components.HorizontalLimiterRulerOption +import ua.acclorite.book_story.ui.settings.reader.reading_speed.components.HorizontalLimiterRulerThicknessOption +import ua.acclorite.book_story.ui.settings.reader.reading_speed.components.HorizontalLimiterVerticalOffsetOption import ua.acclorite.book_story.ui.settings.reader.reading_speed.components.PerceptionExpanderOption import ua.acclorite.book_story.ui.settings.reader.reading_speed.components.PerceptionExpanderPaddingOption import ua.acclorite.book_story.ui.settings.reader.reading_speed.components.PerceptionExpanderThicknessOption @@ -52,5 +58,29 @@ fun LazyListScope.ReadingSpeedSubcategory( item { PerceptionExpanderThicknessOption() } + + item { + HorizontalLimiterOption() + } + + item { + HorizontalLimiterHeightOption() + } + + item { + HorizontalLimiterVerticalOffsetOption() + } + + item { + HorizontalLimiterRulerOption() + } + + item { + HorizontalLimiterRulerThicknessOption() + } + + item { + HorizontalLimiterDimmingOption() + } } } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterDimmingOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterDimmingOption.kt new file mode 100644 index 00000000..3bbe1ad0 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterDimmingOption.kt @@ -0,0 +1,30 @@ +/* + * Book's Story — free and open-source Material You eBook reader. + * Copyright (C) 2024-2025 Acclorite + * SPDX-License-Identifier: GPL-3.0-only + */ + +package ua.acclorite.book_story.ui.settings.reader.reading_speed.components + +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import ua.acclorite.book_story.R +import ua.acclorite.book_story.ui.common.components.settings.SliderWithTitle +import ua.acclorite.book_story.ui.common.helpers.LocalSettings +import ua.acclorite.book_story.ui.theme.ExpandingTransition + +@Composable +fun HorizontalLimiterDimmingOption() { + val settings = LocalSettings.current + + ExpandingTransition(visible = settings.horizontalLimiter.value) { + SliderWithTitle( + value = settings.horizontalLimiterDimming.value to "%", + toValue = 100, + title = stringResource(id = R.string.horizontal_limiter_dimming_option), + onValueChange = { + settings.horizontalLimiterDimming.update(it) + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterHeightOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterHeightOption.kt new file mode 100644 index 00000000..baed1a20 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterHeightOption.kt @@ -0,0 +1,31 @@ +/* + * Book's Story — free and open-source Material You eBook reader. + * Copyright (C) 2024-2025 Acclorite + * SPDX-License-Identifier: GPL-3.0-only + */ + +package ua.acclorite.book_story.ui.settings.reader.reading_speed.components + +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import ua.acclorite.book_story.R +import ua.acclorite.book_story.ui.common.components.settings.SliderWithTitle +import ua.acclorite.book_story.ui.common.helpers.LocalSettings +import ua.acclorite.book_story.ui.theme.ExpandingTransition + +@Composable +fun HorizontalLimiterHeightOption() { + val settings = LocalSettings.current + + ExpandingTransition(visible = settings.horizontalLimiter.value) { + SliderWithTitle( + value = settings.horizontalLimiterHeight.value to "pt", + fromValue = 1, + toValue = 24, + title = stringResource(id = R.string.horizontal_limiter_height_option), + onValueChange = { + settings.horizontalLimiterHeight.update(it) + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterOption.kt new file mode 100644 index 00000000..851ff20d --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterOption.kt @@ -0,0 +1,27 @@ +/* + * Book's Story — free and open-source Material You eBook reader. + * Copyright (C) 2024-2025 Acclorite + * SPDX-License-Identifier: GPL-3.0-only + */ + +package ua.acclorite.book_story.ui.settings.reader.reading_speed.components + +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import ua.acclorite.book_story.R +import ua.acclorite.book_story.ui.common.components.settings.SwitchWithTitle +import ua.acclorite.book_story.ui.common.helpers.LocalSettings + +@Composable +fun HorizontalLimiterOption() { + val settings = LocalSettings.current + + SwitchWithTitle( + selected = settings.horizontalLimiter.value, + title = stringResource(id = R.string.horizontal_limiter_option), + description = stringResource(id = R.string.horizontal_limiter_option_desc), + onClick = { + settings.horizontalLimiter.update(!settings.horizontalLimiter.lastValue) + } + ) +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterRulerOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterRulerOption.kt new file mode 100644 index 00000000..328c983f --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterRulerOption.kt @@ -0,0 +1,29 @@ +/* + * Book's Story — free and open-source Material You eBook reader. + * Copyright (C) 2024-2025 Acclorite + * SPDX-License-Identifier: GPL-3.0-only + */ + +package ua.acclorite.book_story.ui.settings.reader.reading_speed.components + +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import ua.acclorite.book_story.R +import ua.acclorite.book_story.ui.common.components.settings.SwitchWithTitle +import ua.acclorite.book_story.ui.common.helpers.LocalSettings +import ua.acclorite.book_story.ui.theme.ExpandingTransition + +@Composable +fun HorizontalLimiterRulerOption() { + val settings = LocalSettings.current + + ExpandingTransition(visible = settings.horizontalLimiter.value) { + SwitchWithTitle( + selected = settings.horizontalLimiterRuler.value, + title = stringResource(id = R.string.horizontal_limiter_ruler_option), + onClick = { + settings.horizontalLimiterRuler.update(!settings.horizontalLimiterRuler.lastValue) + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterRulerThicknessOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterRulerThicknessOption.kt new file mode 100644 index 00000000..3972d32b --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterRulerThicknessOption.kt @@ -0,0 +1,31 @@ +/* + * Book's Story — free and open-source Material You eBook reader. + * Copyright (C) 2024-2025 Acclorite + * SPDX-License-Identifier: GPL-3.0-only + */ + +package ua.acclorite.book_story.ui.settings.reader.reading_speed.components + +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import ua.acclorite.book_story.R +import ua.acclorite.book_story.ui.common.components.settings.SliderWithTitle +import ua.acclorite.book_story.ui.common.helpers.LocalSettings +import ua.acclorite.book_story.ui.theme.ExpandingTransition + +@Composable +fun HorizontalLimiterRulerThicknessOption() { + val settings = LocalSettings.current + + ExpandingTransition(visible = settings.horizontalLimiter.value && settings.horizontalLimiterRuler.value) { + SliderWithTitle( + value = settings.horizontalLimiterRulerThickness.value to "pt", + fromValue = 1, + toValue = 12, + title = stringResource(id = R.string.horizontal_limiter_ruler_thickness_option), + onValueChange = { + settings.horizontalLimiterRulerThickness.update(it) + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterVerticalOffsetOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterVerticalOffsetOption.kt new file mode 100644 index 00000000..e742f8b1 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_speed/components/HorizontalLimiterVerticalOffsetOption.kt @@ -0,0 +1,30 @@ +/* + * Book's Story — free and open-source Material You eBook reader. + * Copyright (C) 2024-2025 Acclorite + * SPDX-License-Identifier: GPL-3.0-only + */ + +package ua.acclorite.book_story.ui.settings.reader.reading_speed.components + +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import ua.acclorite.book_story.R +import ua.acclorite.book_story.ui.common.components.settings.SliderWithTitle +import ua.acclorite.book_story.ui.common.helpers.LocalSettings +import ua.acclorite.book_story.ui.theme.ExpandingTransition + +@Composable +fun HorizontalLimiterVerticalOffsetOption() { + val settings = LocalSettings.current + + ExpandingTransition(visible = settings.horizontalLimiter.value) { + SliderWithTitle( + value = settings.horizontalLimiterVerticalOffset.value to "%", + toValue = 100, + title = stringResource(id = R.string.horizontal_limiter_vertical_offset_option), + onValueChange = { + settings.horizontalLimiterVerticalOffset.update(it) + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 62030828..4f77682f 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -194,6 +194,15 @@ Збільшіть швидкість вашого читання фокусуючись на середині Бокові відступи лінії Товщина лінії + Горизонтальний обмежувач + + Показати горизонтальну лінійку та затемнити несфокусовану частину екрана + + Висота + Вертикальне зміщення + Горизонтальна лінійка + Товщина лінійки + Затемнення Орієнтація екрана Користувацька яскравість Яскравість diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 01b2708b..1d6bc024 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -218,6 +218,15 @@ Line side margin Line thickness + Horizontal limiter + + Show horizontal ruler and dim unfocused part of the screen + + Height + Vertical offset + Horizontal ruler + Ruler thickness + Dimming Screen orientation Custom brightness Brightness