From f371be4e14f99e4c257ed0532e8b03a7b4f01d47 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Nicolas <6371790+pynicolas@users.noreply.github.com> Date: Fri, 20 Mar 2026 15:49:01 +0100 Subject: [PATCH] Layout of rotation buttons should be the same for RTL as for LTR (fixes #135) --- .../fairscan/app/ui/screens/DocumentScreen.kt | 37 +++++++++++-------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/org/fairscan/app/ui/screens/DocumentScreen.kt b/app/src/main/java/org/fairscan/app/ui/screens/DocumentScreen.kt index 4972009..e29d92f 100644 --- a/app/src/main/java/org/fairscan/app/ui/screens/DocumentScreen.kt +++ b/app/src/main/java/org/fairscan/app/ui/screens/DocumentScreen.kt @@ -43,6 +43,7 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.MutableIntState import androidx.compose.runtime.mutableIntStateOf @@ -55,9 +56,11 @@ import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import kotlinx.collections.immutable.toImmutableList import net.engawapg.lib.zoomable.ZoomState @@ -202,21 +205,24 @@ fun RotationButtons( onRotateImage: (String, Boolean) -> Unit, modifier: Modifier = Modifier ) { - Row(modifier = modifier.padding(4.dp)) { - // Using AutoMirrored icons would lead to an opposite rotation in RTL languages - @Suppress("DEPRECATION") - SecondaryActionButton( - icon = Icons.Default.RotateLeft, - contentDescription = stringResource(R.string.rotate_left), - onClick = { onRotateImage(imageId, false) } - ) - Spacer(Modifier.width(8.dp)) - @Suppress("DEPRECATION") - SecondaryActionButton( - icon = Icons.Default.RotateRight, - contentDescription = stringResource(R.string.rotate_right), - onClick = { onRotateImage(imageId, true) } - ) + // RotateLeft on the left, RotateRight on the right: for both LTR and RTL languages + CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Ltr) { + Row(modifier = modifier.padding(4.dp)) { + // Using AutoMirrored icons would lead to an opposite rotation in RTL languages + @Suppress("DEPRECATION") + SecondaryActionButton( + icon = Icons.Default.RotateLeft, + contentDescription = stringResource(R.string.rotate_left), + onClick = { onRotateImage(imageId, false) } + ) + Spacer(Modifier.width(8.dp)) + @Suppress("DEPRECATION") + SecondaryActionButton( + icon = Icons.Default.RotateRight, + contentDescription = stringResource(R.string.rotate_right), + onClick = { onRotateImage(imageId, true) } + ) + } } } @@ -255,6 +261,7 @@ private fun BottomBar( @Composable @Preview +@Preview(locale = "ar") @Preview(name = "Dark Mode", uiMode = Configuration.UI_MODE_NIGHT_YES, showBackground = true) @Preview(name = "Landscape", showBackground = true, widthDp = 640, heightDp = 320) fun DocumentScreenPreview() {