Skip to content

Commit 4151d75

Browse files
committed
[JEWEL-553] Updating TabStrip style
- Updated TabStrip to use ScrollableContainer - Updated ScrollableContainer to allow setting the position of scrollbar - Updated TabStrip scrollbar theme on LaF + Stand-alone - Updated TabStrip implementation to properly handle different style based on the hover state
1 parent 621c297 commit 4151d75

File tree

10 files changed

+305
-96
lines changed

10 files changed

+305
-96
lines changed

platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/theme/IntUiBridgeScrollbar.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,27 @@ internal fun readScrollbarStyle(isDark: Boolean): ScrollbarStyle =
3333
scrollbarVisibility = readScrollbarVisibility(),
3434
)
3535

36+
internal fun readTabStripScrollbarStyle(isDark: Boolean): ScrollbarStyle =
37+
ScrollbarStyle(
38+
colors = readScrollbarColors(isDark),
39+
metrics = readScrollbarMetrics(),
40+
trackClickBehavior = TrackClickBehavior.JumpToSpot,
41+
scrollbarVisibility =
42+
ScrollbarVisibility.AlwaysVisible(
43+
trackThickness = 5.dp,
44+
trackThicknessExpanded = 5.dp,
45+
trackPadding = PaddingValues(1.dp),
46+
trackPaddingExpanded = PaddingValues(),
47+
trackPaddingWithBorder = PaddingValues(1.dp),
48+
trackColorAnimationDuration = 125.milliseconds,
49+
expandAnimationDuration = 125.milliseconds,
50+
thumbColorAnimationDuration = 125.milliseconds,
51+
lingerDuration = 700.milliseconds,
52+
scrollbarBackgroundColorLight = Color.Unspecified,
53+
scrollbarBackgroundColorDark = Color.Unspecified,
54+
),
55+
)
56+
3657
private fun readScrollbarColors(isDark: Boolean) =
3758
if (hostOs.isMacOS) {
3859
readScrollbarMacColors(isDark)

platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/theme/IntUiBridgeTab.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ internal fun readDefaultTabStyle(): TabStyle {
6868
contentHovered = 1f,
6969
contentSelected = 1f,
7070
),
71-
scrollbarStyle = readScrollbarStyle(isDark),
71+
scrollbarStyle = readTabStripScrollbarStyle(isDark),
7272
)
7373
}
7474

@@ -122,6 +122,6 @@ internal fun readEditorTabStyle(): TabStyle {
122122
contentHovered = 1f,
123123
contentSelected = 1f,
124124
),
125-
scrollbarStyle = readScrollbarStyle(isDark),
125+
scrollbarStyle = readTabStripScrollbarStyle(isDark),
126126
)
127127
}

platform/jewel/int-ui/int-ui-standalone/api-dump.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,8 @@ f:org.jetbrains.jewel.intui.standalone.styling.IntUiScrollbarStylingKt
441441
- bs:macOsLight$default(org.jetbrains.jewel.ui.component.styling.ScrollbarStyle$Companion,org.jetbrains.jewel.ui.component.styling.ScrollbarColors,org.jetbrains.jewel.ui.component.styling.ScrollbarMetrics,org.jetbrains.jewel.ui.component.styling.TrackClickBehavior,org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility,I,java.lang.Object):org.jetbrains.jewel.ui.component.styling.ScrollbarStyle
442442
- sf:macOsLight-zwkVjRg(org.jetbrains.jewel.ui.component.styling.ScrollbarColors$Companion,J,J,J,J,J,J,J,J,J,J,J,J):org.jetbrains.jewel.ui.component.styling.ScrollbarColors
443443
- bs:macOsLight-zwkVjRg$default(org.jetbrains.jewel.ui.component.styling.ScrollbarColors$Companion,J,J,J,J,J,J,J,J,J,J,J,J,I,java.lang.Object):org.jetbrains.jewel.ui.component.styling.ScrollbarColors
444+
- sf:tabStrip-FbBwQsc(org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$Companion,F,F,androidx.compose.foundation.layout.PaddingValues,androidx.compose.foundation.layout.PaddingValues,androidx.compose.foundation.layout.PaddingValues,J,J,J,J):org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility
445+
- bs:tabStrip-FbBwQsc$default(org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$Companion,F,F,androidx.compose.foundation.layout.PaddingValues,androidx.compose.foundation.layout.PaddingValues,androidx.compose.foundation.layout.PaddingValues,J,J,J,J,I,java.lang.Object):org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility
444446
- sf:windowsAndLinux-TZvXluI(org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$WhenScrolling$Companion,F,F,androidx.compose.foundation.layout.PaddingValues,androidx.compose.foundation.layout.PaddingValues,J,J,J,J):org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$WhenScrolling
445447
- bs:windowsAndLinux-TZvXluI$default(org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$WhenScrolling$Companion,F,F,androidx.compose.foundation.layout.PaddingValues,androidx.compose.foundation.layout.PaddingValues,J,J,J,J,I,java.lang.Object):org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$WhenScrolling
446448
- sf:windowsAndLinux-tYhzLtE(org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$AlwaysVisible$Companion,F,androidx.compose.foundation.layout.PaddingValues,J,J):org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$AlwaysVisible

platform/jewel/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/styling/IntUiScrollbarStyling.kt

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ public fun AlwaysVisible.Companion.macOs(
395395
*/
396396
public fun AlwaysVisible.Companion.windowsAndLinux(
397397
trackThickness: Dp = 10.dp,
398-
trackPadding: PaddingValues = PaddingValues(0.dp),
398+
trackPadding: PaddingValues = PaddingValues(),
399399
thumbColorAnimationDuration: Duration = 330.milliseconds,
400400
trackColorAnimationDuration: Duration = thumbColorAnimationDuration,
401401
): AlwaysVisible =
@@ -508,8 +508,8 @@ public fun WhenScrolling.Companion.macOs(
508508
public fun WhenScrolling.Companion.windowsAndLinux(
509509
trackThickness: Dp = 10.dp,
510510
trackThicknessExpanded: Dp = 10.dp,
511-
trackPadding: PaddingValues = PaddingValues(0.dp),
512-
trackPaddingWithBorder: PaddingValues = PaddingValues(0.dp),
511+
trackPadding: PaddingValues = PaddingValues(),
512+
trackPaddingWithBorder: PaddingValues = PaddingValues(),
513513
trackColorAnimationDuration: Duration = 330.milliseconds,
514514
expandAnimationDuration: Duration = 0.milliseconds,
515515
thumbColorAnimationDuration: Duration = trackColorAnimationDuration,
@@ -525,3 +525,28 @@ public fun WhenScrolling.Companion.windowsAndLinux(
525525
thumbColorAnimationDuration = thumbColorAnimationDuration,
526526
lingerDuration = lingerDuration,
527527
)
528+
529+
public fun ScrollbarVisibility.Companion.tabStrip(
530+
trackThickness: Dp = 5.dp,
531+
trackThicknessExpanded: Dp = 5.dp,
532+
trackPadding: PaddingValues = PaddingValues(1.dp),
533+
trackPaddingExpanded: PaddingValues = PaddingValues(),
534+
trackPaddingWithBorder: PaddingValues = PaddingValues(1.dp),
535+
trackColorAnimationDuration: Duration = 125.milliseconds,
536+
expandAnimationDuration: Duration = trackColorAnimationDuration,
537+
thumbColorAnimationDuration: Duration = trackColorAnimationDuration,
538+
lingerDuration: Duration = 700.milliseconds,
539+
): ScrollbarVisibility =
540+
AlwaysVisible(
541+
trackThickness = trackThickness,
542+
trackThicknessExpanded = trackThicknessExpanded,
543+
trackPadding = trackPadding,
544+
trackPaddingExpanded = trackPaddingExpanded,
545+
trackPaddingWithBorder = trackPaddingWithBorder,
546+
trackColorAnimationDuration = trackColorAnimationDuration,
547+
expandAnimationDuration = expandAnimationDuration,
548+
thumbColorAnimationDuration = thumbColorAnimationDuration,
549+
lingerDuration = lingerDuration,
550+
scrollbarBackgroundColorLight = Color.Unspecified,
551+
scrollbarBackgroundColorDark = Color.Unspecified,
552+
)

platform/jewel/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/styling/IntUiTabStripScrollbarStyling.kt

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public fun ScrollbarStyle.Companion.tabStripMacOsLight(
3131
colors: ScrollbarColors = ScrollbarColors.macOsLight(),
3232
metrics: ScrollbarMetrics = ScrollbarMetrics.tabStripMacOs(),
3333
trackClickBehavior: TrackClickBehavior = TrackClickBehavior.NextPage,
34-
scrollbarVisibility: ScrollbarVisibility = ScrollbarVisibility.WhenScrolling.default(),
34+
scrollbarVisibility: ScrollbarVisibility = ScrollbarVisibility.tabStrip(),
3535
): ScrollbarStyle =
3636
ScrollbarStyle(
3737
colors = colors,
@@ -44,7 +44,7 @@ public fun ScrollbarStyle.Companion.tabStripMacOsDark(
4444
colors: ScrollbarColors = ScrollbarColors.macOsDark(),
4545
metrics: ScrollbarMetrics = ScrollbarMetrics.tabStripMacOs(),
4646
trackClickBehavior: TrackClickBehavior = TrackClickBehavior.NextPage,
47-
scrollbarVisibility: ScrollbarVisibility = ScrollbarVisibility.WhenScrolling.default(),
47+
scrollbarVisibility: ScrollbarVisibility = ScrollbarVisibility.tabStrip(),
4848
): ScrollbarStyle =
4949
ScrollbarStyle(
5050
colors = colors,
@@ -57,7 +57,7 @@ public fun ScrollbarStyle.Companion.tabStripWindowsAndLinuxLight(
5757
colors: ScrollbarColors = ScrollbarColors.windowsAndLinuxLight(),
5858
metrics: ScrollbarMetrics = ScrollbarMetrics.tabStripWindowsAndLinux(),
5959
trackClickBehavior: TrackClickBehavior = TrackClickBehavior.JumpToSpot,
60-
scrollbarVisibility: ScrollbarVisibility = ScrollbarVisibility.AlwaysVisible.tabStrip(),
60+
scrollbarVisibility: ScrollbarVisibility = ScrollbarVisibility.tabStrip(),
6161
): ScrollbarStyle =
6262
ScrollbarStyle(
6363
colors = colors,
@@ -70,7 +70,7 @@ public fun ScrollbarStyle.Companion.tabStripWindowsAndLinuxDark(
7070
colors: ScrollbarColors = ScrollbarColors.windowsAndLinuxDark(),
7171
metrics: ScrollbarMetrics = ScrollbarMetrics.tabStripWindowsAndLinux(),
7272
trackClickBehavior: TrackClickBehavior = TrackClickBehavior.JumpToSpot,
73-
scrollbarVisibility: ScrollbarVisibility = ScrollbarVisibility.AlwaysVisible.tabStrip(),
73+
scrollbarVisibility: ScrollbarVisibility = ScrollbarVisibility.tabStrip(),
7474
): ScrollbarStyle =
7575
ScrollbarStyle(
7676
colors = colors,
@@ -89,6 +89,16 @@ public fun ScrollbarMetrics.Companion.tabStripWindowsAndLinux(
8989
minThumbLength: Dp = 20.dp,
9090
): ScrollbarMetrics = ScrollbarMetrics(thumbCornerSize, minThumbLength)
9191

92+
@Deprecated(
93+
"Replace with 'ScrollbarVisibility.tabStrip()' version",
94+
ReplaceWith(
95+
"ScrollbarVisibility.tabStrip(" +
96+
"trackThickness = trackThickness," +
97+
"trackPadding = trackPadding," +
98+
"trackPaddingWithBorder = trackPaddingWithBorder" +
99+
")"
100+
),
101+
)
92102
public fun ScrollbarVisibility.AlwaysVisible.Companion.tabStrip(
93103
trackThickness: Dp = 4.dp,
94104
trackPadding: PaddingValues = PaddingValues(),

platform/jewel/ui/api-dump.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1760,18 +1760,21 @@ f:org.jetbrains.jewel.ui.component.styling.ScrollbarStyle$Companion
17601760
f:org.jetbrains.jewel.ui.component.styling.ScrollbarStylingKt
17611761
- sf:getLocalScrollbarStyle():androidx.compose.runtime.ProvidableCompositionLocal
17621762
org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility
1763+
- sf:Companion:org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$Companion
17631764
- a:getExpandAnimationDuration-UwyO8pc():J
17641765
- a:getLingerDuration-UwyO8pc():J
17651766
- a:getThumbColorAnimationDuration-UwyO8pc():J
17661767
- a:getTrackColorAnimationDuration-UwyO8pc():J
17671768
- a:getTrackPadding():androidx.compose.foundation.layout.PaddingValues
1769+
- a:getTrackPaddingExpanded():androidx.compose.foundation.layout.PaddingValues
17681770
- a:getTrackPaddingWithBorder():androidx.compose.foundation.layout.PaddingValues
17691771
- a:getTrackThickness-D9Ej5fM():F
17701772
- a:getTrackThicknessExpanded-D9Ej5fM():F
17711773
f:org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$AlwaysVisible
17721774
- org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility
17731775
- sf:$stable:I
17741776
- sf:Companion:org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$AlwaysVisible$Companion
1777+
- b:<init>(F,androidx.compose.foundation.layout.PaddingValues,androidx.compose.foundation.layout.PaddingValues,J,J,J,J,F,androidx.compose.foundation.layout.PaddingValues,J,J,I,kotlin.jvm.internal.DefaultConstructorMarker):V
17751778
- equals(java.lang.Object):Z
17761779
- getExpandAnimationDuration-UwyO8pc():J
17771780
- getLingerDuration-UwyO8pc():J
@@ -1780,11 +1783,13 @@ f:org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$AlwaysVisible
17801783
- getThumbColorAnimationDuration-UwyO8pc():J
17811784
- getTrackColorAnimationDuration-UwyO8pc():J
17821785
- getTrackPadding():androidx.compose.foundation.layout.PaddingValues
1786+
- getTrackPaddingExpanded():androidx.compose.foundation.layout.PaddingValues
17831787
- getTrackPaddingWithBorder():androidx.compose.foundation.layout.PaddingValues
17841788
- getTrackThickness-D9Ej5fM():F
17851789
- getTrackThicknessExpanded-D9Ej5fM():F
17861790
- hashCode():I
17871791
f:org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$AlwaysVisible$Companion
1792+
f:org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$Companion
17881793
f:org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$WhenScrolling
17891794
- org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility
17901795
- sf:$stable:I
@@ -1795,6 +1800,7 @@ f:org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$WhenScrolling
17951800
- getThumbColorAnimationDuration-UwyO8pc():J
17961801
- getTrackColorAnimationDuration-UwyO8pc():J
17971802
- getTrackPadding():androidx.compose.foundation.layout.PaddingValues
1803+
- getTrackPaddingExpanded():androidx.compose.foundation.layout.PaddingValues
17981804
- getTrackPaddingWithBorder():androidx.compose.foundation.layout.PaddingValues
17991805
- getTrackThickness-D9Ej5fM():F
18001806
- getTrackThicknessExpanded-D9Ej5fM():F

platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/ScrollableContainer.kt

Lines changed: 73 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ private const val ID_CONTENT = "VerticallyScrollableContainer_content"
4949
private const val ID_VERTICAL_SCROLLBAR = "VerticallyScrollableContainer_verticalScrollbar"
5050
private const val ID_HORIZONTAL_SCROLLBAR = "VerticallyScrollableContainer_horizontalScrollbar"
5151

52+
internal enum class ScrollbarPosition {
53+
Start,
54+
End,
55+
}
56+
5257
/**
5358
* A vertically scrollable container that follows the standard visual styling.
5459
*
@@ -161,8 +166,10 @@ public fun VerticallyScrollableContainer(
161166
)
162167
},
163168
verticalScrollbarVisible = scrollState.canScroll,
169+
verticalScrollbarPosition = ScrollbarPosition.End,
164170
horizontalScrollbar = null,
165171
horizontalScrollbarVisible = false,
172+
horizontalScrollbarPosition = ScrollbarPosition.End,
166173
scrollbarStyle = style,
167174
modifier = modifier.withKeepVisible(style.scrollbarVisibility.lingerDuration, scope) { keepVisible = it },
168175
) {
@@ -196,8 +203,10 @@ internal fun TextAreaScrollableContainer(
196203
)
197204
},
198205
verticalScrollbarVisible = scrollState.canScroll,
206+
verticalScrollbarPosition = ScrollbarPosition.End,
199207
horizontalScrollbar = null,
200208
horizontalScrollbarVisible = false,
209+
horizontalScrollbarPosition = ScrollbarPosition.End,
201210
scrollbarStyle = style,
202211
modifier = Modifier.withKeepVisible(style.scrollbarVisibility.lingerDuration, scope) { keepVisible = it },
203212
) {
@@ -388,8 +397,10 @@ public fun VerticallyScrollableContainer(
388397
)
389398
},
390399
verticalScrollbarVisible = scrollState.canScroll,
400+
verticalScrollbarPosition = ScrollbarPosition.End,
391401
horizontalScrollbar = null,
392402
horizontalScrollbarVisible = false,
403+
horizontalScrollbarPosition = ScrollbarPosition.End,
393404
scrollbarStyle = style,
394405
modifier = modifier.withKeepVisible(style.scrollbarVisibility.lingerDuration, scope) { keepVisible = it },
395406
) {
@@ -492,13 +503,41 @@ public fun HorizontallyScrollableContainer(
492503
scrollbarEnabled: Boolean = userScrollEnabled,
493504
scrollbarInteractionSource: MutableInteractionSource = remember { MutableInteractionSource() },
494505
content: @Composable BoxScope.() -> Unit,
506+
) {
507+
HorizontallyScrollableContainer(
508+
ScrollbarPosition.End,
509+
modifier,
510+
scrollbarModifier,
511+
scrollState,
512+
style,
513+
reverseLayout,
514+
userScrollEnabled,
515+
scrollbarEnabled,
516+
scrollbarInteractionSource,
517+
content,
518+
)
519+
}
520+
521+
@Composable
522+
internal fun HorizontallyScrollableContainer(
523+
scrollbarPosition: ScrollbarPosition,
524+
modifier: Modifier = Modifier,
525+
scrollbarModifier: Modifier = Modifier,
526+
scrollState: ScrollState = rememberScrollState(),
527+
style: ScrollbarStyle = JewelTheme.scrollbarStyle,
528+
reverseLayout: Boolean = false,
529+
userScrollEnabled: Boolean = true,
530+
scrollbarEnabled: Boolean = userScrollEnabled,
531+
scrollbarInteractionSource: MutableInteractionSource = remember { MutableInteractionSource() },
532+
content: @Composable BoxScope.() -> Unit,
495533
) {
496534
var keepVisible by remember { mutableStateOf(false) }
497535
val scope = rememberCoroutineScope()
498536

499537
ScrollableContainerImpl(
500538
verticalScrollbar = null,
501539
verticalScrollbarVisible = false,
540+
verticalScrollbarPosition = ScrollbarPosition.End,
502541
horizontalScrollbar = {
503542
HorizontalScrollbar(
504543
scrollState = scrollState,
@@ -511,6 +550,7 @@ public fun HorizontallyScrollableContainer(
511550
)
512551
},
513552
horizontalScrollbarVisible = scrollState.canScroll,
553+
horizontalScrollbarPosition = scrollbarPosition,
514554
scrollbarStyle = style,
515555
modifier = modifier.withKeepVisible(style.scrollbarVisibility.lingerDuration, scope) { keepVisible = it },
516556
) {
@@ -707,7 +747,9 @@ public fun HorizontallyScrollableContainer(
707747
interactionSource = scrollbarInteractionSource,
708748
)
709749
},
750+
verticalScrollbarPosition = ScrollbarPosition.End,
710751
horizontalScrollbarVisible = scrollState.canScroll,
752+
horizontalScrollbarPosition = ScrollbarPosition.End,
711753
scrollbarStyle = style,
712754
modifier = modifier.withKeepVisible(style.scrollbarVisibility.lingerDuration, scope) { keepVisible = it },
713755
) {
@@ -742,8 +784,10 @@ private fun Modifier.withKeepVisible(
742784
private fun ScrollableContainerImpl(
743785
verticalScrollbar: (@Composable () -> Unit)?,
744786
verticalScrollbarVisible: Boolean,
787+
verticalScrollbarPosition: ScrollbarPosition,
745788
horizontalScrollbar: (@Composable () -> Unit)?,
746789
horizontalScrollbarVisible: Boolean,
790+
horizontalScrollbarPosition: ScrollbarPosition,
747791
scrollbarStyle: ScrollbarStyle,
748792
modifier: Modifier = Modifier,
749793
content: @Composable () -> Unit,
@@ -771,21 +815,27 @@ private fun ScrollableContainerImpl(
771815
val sizeOffsetWhenBothVisible =
772816
if (accountForVerticalScrollbar && accountForHorizontalScrollbar) {
773817
scrollbarStyle.scrollbarVisibility.trackThicknessExpanded.roundToPx()
774-
} else 0
818+
} else {
819+
0
820+
}
775821

776822
val verticalScrollbarPlaceable =
777823
if (accountForVerticalScrollbar) {
778824
val verticalScrollbarConstraints =
779825
Constraints.fixedHeight(incomingConstraints.maxHeight - sizeOffsetWhenBothVisible)
780826
verticalScrollbarMeasurable.measure(verticalScrollbarConstraints)
781-
} else null
827+
} else {
828+
null
829+
}
782830

783831
val horizontalScrollbarPlaceable =
784832
if (accountForHorizontalScrollbar) {
785833
val horizontalScrollbarConstraints =
786834
Constraints.fixedWidth(incomingConstraints.maxWidth - sizeOffsetWhenBothVisible)
787835
horizontalScrollbarMeasurable.measure(horizontalScrollbarConstraints)
788-
} else null
836+
} else {
837+
null
838+
}
789839

790840
val isMacOs = hostOs == OS.MacOS
791841
val contentMeasurable = measurables.find { it.layoutId == ID_CONTENT } ?: error("Content not provided")
@@ -818,10 +868,22 @@ private fun ScrollableContainerImpl(
818868

819869
layout(width, height) {
820870
contentPlaceable.placeRelative(x = 0, y = 0, zIndex = 0f)
821-
verticalScrollbarPlaceable?.placeRelative(x = width - verticalScrollbarPlaceable.width, y = 0, zIndex = 1f)
871+
verticalScrollbarPlaceable?.placeRelative(
872+
x =
873+
when (verticalScrollbarPosition) {
874+
ScrollbarPosition.Start -> 0
875+
ScrollbarPosition.End -> width - verticalScrollbarPlaceable.width
876+
},
877+
y = 0,
878+
zIndex = 1f,
879+
)
822880
horizontalScrollbarPlaceable?.placeRelative(
823881
x = 0,
824-
y = height - horizontalScrollbarPlaceable.height,
882+
y =
883+
when (horizontalScrollbarPosition) {
884+
ScrollbarPosition.Start -> 0
885+
ScrollbarPosition.End -> height - horizontalScrollbarPlaceable.height
886+
},
825887
zIndex = 1f,
826888
)
827889
}
@@ -864,7 +926,9 @@ private fun computeContentConstraints(
864926
visibility is WhenScrolling -> minWidth
865927
else -> error("Unsupported visibility style: $visibility")
866928
}
867-
} else 0
929+
} else {
930+
0
931+
}
868932

869933
fun maxHeight() =
870934
if (incomingConstraints.hasBoundedHeight) {
@@ -886,7 +950,9 @@ private fun computeContentConstraints(
886950
visibility is WhenScrolling -> minHeight
887951
else -> error("Unsupported visibility style: $visibility")
888952
}
889-
} else 0
953+
} else {
954+
0
955+
}
890956

891957
return when {
892958
incomingConstraints.hasBoundedWidth && incomingConstraints.hasBoundedHeight -> {

0 commit comments

Comments
 (0)