Improved the button labels in the SplitPane demo to be more descriptive.
"Hide V First" and
"Show V First" are now "Hide Left Pane" and "Show Left Pane".
"Hide H First" and "Show H First" are now "Hide Top Pane" and "Show Top Pane".
This commit adds the ability to hide the first pane in a SplitPane.
- Adds `firstVisible
` property to `SplitPaneState` to control the visibility of the first pane.
- Updates `SplitPane` layout to handle the visibility of the first pane.
- Adds buttons to the demo to toggle the visibility of the first pane.
This is related to issue:
https://github.com/JetBrains/compose-multiplatform/issues/4258
changes
- DesktopSplitPane.kt: placable.place() -> placable.placeRelative
- SplitePaneDSL.kt: change the delta direction to follow the layout
direction
```kotlin
@Composable
override fun Modifier.markAsHandle(): Modifier = this.run {
val layoutDirection = LocalLayoutDirection.current
pointerInput(containerScope.splitPaneState) {
detectDragGestures { change, _ ->
change.consume()
containerScope.splitPaneState.dispatchRawMovement(
if (containerScope.isHorizontal)
if (layoutDirection == LayoutDirection.Ltr) change.position.x else -change.position.x
else change.position.y
)
}
}
```
the problem with .onPointerEvent() Modifier, or onDrag also, is
whenever the layout direction is Ltr or Rtl:
moving to right always produce positive change, [expected negative if
dir =Rtl]
moving to left always produce negative change, [expected positive if dir
=Rtl]
the calculation of postion will fail if layoutDir is Rtl, because
positionPercentage will be out of range
```kotlin
fun dispatchRawMovement(delta: Float) {
val movableArea = maxPosition - minPosition
if (movableArea > 0) {
positionPercentage =
((movableArea * positionPercentage) + delta).coerceIn(0f, movableArea) / movableArea
}
}
```
There was a problem with an android publication. Android artifactId has
name "module_name"-"android" even though we explicitly renamed
artifactId inside the configureMavenPublication block. It means that
"components-ui-tooling-preview" android library rewrites
"components-resources" android library on the maven. Because they have
the same name "library-android".
SplitPane by design, shouldn't have default visual representation, because it mostly depends on the design system (material, material3, etc)
Fixes https://github.com/JetBrains/compose-jb/issues/1975
RelNote:
SplitPane no longer depends on compose.material. Now, by default, SplitPane has invisible 0px splitter, not 1px black/white splitter as it was before. If you want to preserve the previous behaviour, specify a splitter explicitly:
```
HorizontalSplitPane(splitterState) {
splitter {
visiblePart {
Box(
Modifier
.height(1.dp)
.fillMaxHeight()
.background(MaterialTheme.colors.background)
)
}
}
}
```