Simplified TripleVerticalSplitPane

This commit is contained in:
Abdelilah El Aissaoui 2024-01-10 11:42:18 +01:00
parent d06e746c6c
commit 3a72a9d0cf
No known key found for this signature in database
GPG Key ID: 7587FC860F594869
2 changed files with 30 additions and 33 deletions

View File

@ -13,6 +13,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.input.key.onKeyEvent import androidx.compose.ui.input.key.onKeyEvent
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.jetpackduba.gitnuro.AppConstants import com.jetpackduba.gitnuro.AppConstants
import com.jetpackduba.gitnuro.LocalTabScope import com.jetpackduba.gitnuro.LocalTabScope
@ -22,7 +23,7 @@ import com.jetpackduba.gitnuro.git.rebase.RebaseInteractiveState
import com.jetpackduba.gitnuro.keybindings.KeybindingOption import com.jetpackduba.gitnuro.keybindings.KeybindingOption
import com.jetpackduba.gitnuro.keybindings.matchesBinding import com.jetpackduba.gitnuro.keybindings.matchesBinding
import com.jetpackduba.gitnuro.ui.components.SecondaryButton import com.jetpackduba.gitnuro.ui.components.SecondaryButton
import com.jetpackduba.gitnuro.ui.components.TripleVerticalSplit import com.jetpackduba.gitnuro.ui.components.TripleVerticalSplitPanel
import com.jetpackduba.gitnuro.ui.components.gitnuroDynamicViewModel import com.jetpackduba.gitnuro.ui.components.gitnuroDynamicViewModel
import com.jetpackduba.gitnuro.ui.dialogs.* import com.jetpackduba.gitnuro.ui.dialogs.*
import com.jetpackduba.gitnuro.ui.diff.Diff import com.jetpackduba.gitnuro.ui.diff.Diff
@ -249,13 +250,15 @@ fun MainContentView(
blameState: BlameState, blameState: BlameState,
) { ) {
val rebaseInteractiveState by tabViewModel.rebaseInteractiveState.collectAsState() val rebaseInteractiveState by tabViewModel.rebaseInteractiveState.collectAsState()
val density = LocalDensity.current.density
TripleVerticalSplit( var firstWidth by remember { mutableStateOf(180f) }
var thirdWidth by remember { mutableStateOf(360f) }
TripleVerticalSplitPanel(
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
initialFirstWidth = 220f, firstWidth = firstWidth,
minFirstWidth = 150f, thirdWidth = thirdWidth,
initialThirdWidth = 360f,
minThirdWidth = 180f,
first = { first = {
SidePanel() SidePanel()
}, },
@ -362,11 +365,19 @@ fun MainContentView(
} }
} }
}, },
onFirstSizeChanged = { onFirstSizeDrag = {
val newWidth = firstWidth + it / density
if (newWidth > 150) {
firstWidth = newWidth
}
}, },
onThirdSizeChanged = { onThirdSizeDrag = {
val newWidth = thirdWidth - it / density
if (newWidth > 150) {
thirdWidth = newWidth
}
}, },
) )
} }

View File

@ -8,33 +8,29 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.input.pointer.pointerHoverIcon import androidx.compose.ui.input.pointer.pointerHoverIcon
import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.jetpackduba.gitnuro.ui.resizePointerIconEast import com.jetpackduba.gitnuro.ui.resizePointerIconEast
@OptIn(ExperimentalComposeUiApi::class)
@Composable @Composable
fun TripleVerticalSplit( fun TripleVerticalSplitPanel(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
first: @Composable () -> Unit, first: @Composable () -> Unit,
second: @Composable () -> Unit, second: @Composable () -> Unit,
third: @Composable () -> Unit, third: @Composable () -> Unit,
initialFirstWidth: Float, firstWidth: Float,
minFirstWidth: Float, thirdWidth: Float,
initialThirdWidth: Float, onFirstSizeDrag: (Float) -> Unit,
minThirdWidth: Float, onThirdSizeDrag: (Float) -> Unit,
onFirstSizeChanged: (Float) -> Unit,
onThirdSizeChanged: (Float) -> Unit,
) { ) {
val density = LocalDensity.current.density
var firstWidth by remember { mutableStateOf(initialFirstWidth) }
var thirdWidth by remember { mutableStateOf(initialThirdWidth) }
Row( Row(
modifier = modifier modifier = modifier
) { ) {
Box(modifier = Modifier.width((firstWidth).dp)) { Box(modifier = Modifier.width(firstWidth.dp)) {
first() first()
} }
@ -44,12 +40,7 @@ fun TripleVerticalSplit(
.width(8.dp) .width(8.dp)
.draggable( .draggable(
state = rememberDraggableState { state = rememberDraggableState {
val newWidth = firstWidth + it / density onFirstSizeDrag(it)
if (newWidth > minFirstWidth) {
firstWidth = newWidth
onFirstSizeChanged(firstWidth)
}
}, },
orientation = Orientation.Horizontal orientation = Orientation.Horizontal
) )
@ -66,12 +57,7 @@ fun TripleVerticalSplit(
.width(8.dp) .width(8.dp)
.draggable( .draggable(
rememberDraggableState { rememberDraggableState {
val newWidth = thirdWidth - it / density onThirdSizeDrag(it)
if(newWidth > minThirdWidth) {
thirdWidth = newWidth
onThirdSizeChanged(thirdWidth)
}
}, Orientation.Horizontal }, Orientation.Horizontal
) )
.pointerHoverIcon(resizePointerIconEast) .pointerHoverIcon(resizePointerIconEast)