Skip to content

Commit 538536d

Browse files
committed
[JEWEL-553] Updating TabStrip style
- Updated TabStrip to use ScrollableContainer - Updated ScrollableContainer to allow setting the position of scrollbar - Added 'WhenParentHovered' visibility configuration for scrollbars - Updated TabStrip scrollbar theme on LaF + Stand-alone
1 parent 8577d3c commit 538536d

File tree

11 files changed

+772
-98
lines changed

11 files changed

+772
-98
lines changed

platform/jewel/ide-laf-bridge/api-dump.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,16 @@ f:org.jetbrains.jewel.bridge.theme.BridgeThemeColorPaletteKt
113113
- sf:readFromLaF(org.jetbrains.jewel.foundation.theme.ThemeColorPalette$Companion):org.jetbrains.jewel.foundation.theme.ThemeColorPalette
114114
f:org.jetbrains.jewel.bridge.theme.IntUiBridgeScrollbarKt
115115
- sf:default(org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$AlwaysVisible$Companion):org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$AlwaysVisible
116+
- sf:default(org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$WhenContainerHovered$Companion):org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$WhenContainerHovered
116117
- sf:default(org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$WhenScrolling$Companion):org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$WhenScrolling
118+
- sf:macOs-FbBwQsc(org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$WhenContainerHovered$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$WhenContainerHovered
119+
- bs:macOs-FbBwQsc$default(org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$WhenContainerHovered$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$WhenContainerHovered
117120
- sf:macOs-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
118121
- bs:macOs-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
119122
- sf:macOs-fYp4AQw(org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$AlwaysVisible$Companion,F,androidx.compose.foundation.layout.PaddingValues,J,J,J):org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$AlwaysVisible
120123
- bs:macOs-fYp4AQw$default(org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$AlwaysVisible$Companion,F,androidx.compose.foundation.layout.PaddingValues,J,J,J,I,java.lang.Object):org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$AlwaysVisible
124+
- sf:windowsAndLinux-FbBwQsc(org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$WhenContainerHovered$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$WhenContainerHovered
125+
- bs:windowsAndLinux-FbBwQsc$default(org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$WhenContainerHovered$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$WhenContainerHovered
121126
- 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
122127
- 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
123128
- 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/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/theme/IntUiBridgeScrollbar.kt

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,25 @@ 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.WhenContainerHovered(
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+
),
53+
)
54+
3655
private fun readScrollbarColors(isDark: Boolean) =
3756
if (hostOs.isMacOS) {
3857
readScrollbarMacColors(isDark)
@@ -358,3 +377,56 @@ public fun ScrollbarVisibility.AlwaysVisible.Companion.windowsAndLinux(
358377
Color.Unspecified,
359378
Color.Unspecified,
360379
)
380+
381+
public fun ScrollbarVisibility.WhenContainerHovered.Companion.default(): ScrollbarVisibility.WhenContainerHovered =
382+
if (hostOs.isMacOS) {
383+
ScrollbarVisibility.WhenContainerHovered.macOs()
384+
} else {
385+
ScrollbarVisibility.WhenContainerHovered.windowsAndLinux()
386+
}
387+
388+
public fun ScrollbarVisibility.WhenContainerHovered.Companion.macOs(
389+
trackThickness: Dp = 11.dp,
390+
trackThicknessExpanded: Dp = 14.dp,
391+
trackPadding: PaddingValues = PaddingValues(2.dp),
392+
trackPaddingExpanded: PaddingValues = trackPadding,
393+
trackPaddingWithBorder: PaddingValues = PaddingValues(1.dp),
394+
trackColorAnimationDuration: Duration = 125.milliseconds,
395+
expandAnimationDuration: Duration = trackColorAnimationDuration,
396+
thumbColorAnimationDuration: Duration = trackColorAnimationDuration,
397+
lingerDuration: Duration = 700.milliseconds,
398+
): ScrollbarVisibility.WhenContainerHovered =
399+
ScrollbarVisibility.WhenContainerHovered(
400+
trackThickness = trackThickness,
401+
trackThicknessExpanded = trackThicknessExpanded,
402+
trackPadding = trackPadding,
403+
trackPaddingExpanded = trackPaddingExpanded,
404+
trackPaddingWithBorder = trackPaddingWithBorder,
405+
trackColorAnimationDuration = trackColorAnimationDuration,
406+
expandAnimationDuration = expandAnimationDuration,
407+
thumbColorAnimationDuration = thumbColorAnimationDuration,
408+
lingerDuration = lingerDuration,
409+
)
410+
411+
public fun ScrollbarVisibility.WhenContainerHovered.Companion.windowsAndLinux(
412+
trackThickness: Dp = 11.dp,
413+
trackThicknessExpanded: Dp = 14.dp,
414+
trackPadding: PaddingValues = PaddingValues(),
415+
trackPaddingExpanded: PaddingValues = trackPadding,
416+
trackPaddingWithBorder: PaddingValues = trackPadding,
417+
trackColorAnimationDuration: Duration = 125.milliseconds,
418+
expandAnimationDuration: Duration = trackColorAnimationDuration,
419+
thumbColorAnimationDuration: Duration = trackColorAnimationDuration,
420+
lingerDuration: Duration = 700.milliseconds,
421+
): ScrollbarVisibility.WhenContainerHovered =
422+
ScrollbarVisibility.WhenContainerHovered(
423+
trackThickness = trackThickness,
424+
trackThicknessExpanded = trackThicknessExpanded,
425+
trackPadding = trackPadding,
426+
trackPaddingExpanded = trackPaddingExpanded,
427+
trackPaddingWithBorder = trackPaddingWithBorder,
428+
trackColorAnimationDuration = trackColorAnimationDuration,
429+
expandAnimationDuration = expandAnimationDuration,
430+
thumbColorAnimationDuration = thumbColorAnimationDuration,
431+
lingerDuration = lingerDuration,
432+
)

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: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,10 +423,13 @@ f:org.jetbrains.jewel.intui.standalone.styling.IntUiRadioButtonStylingKt
423423
f:org.jetbrains.jewel.intui.standalone.styling.IntUiScrollbarStylingKt
424424
- sf:dark(org.jetbrains.jewel.ui.component.styling.ScrollbarStyle$Companion):org.jetbrains.jewel.ui.component.styling.ScrollbarStyle
425425
- sf:default(org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$AlwaysVisible$Companion):org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$AlwaysVisible
426+
- sf:default(org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$WhenContainerHovered$Companion):org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$WhenContainerHovered
426427
- sf:default(org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$WhenScrolling$Companion):org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$WhenScrolling
427428
- sf:default-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
428429
- bs:default-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
429430
- sf:light(org.jetbrains.jewel.ui.component.styling.ScrollbarStyle$Companion):org.jetbrains.jewel.ui.component.styling.ScrollbarStyle
431+
- sf:macOs-FbBwQsc(org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$WhenContainerHovered$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$WhenContainerHovered
432+
- bs:macOs-FbBwQsc$default(org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$WhenContainerHovered$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$WhenContainerHovered
430433
- sf:macOs-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
431434
- bs:macOs-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
432435
- sf:macOs-fYp4AQw(org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$AlwaysVisible$Companion,F,androidx.compose.foundation.layout.PaddingValues,J,J,J):org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$AlwaysVisible
@@ -441,6 +444,10 @@ f:org.jetbrains.jewel.intui.standalone.styling.IntUiScrollbarStylingKt
441444
- 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
442445
- 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
443446
- 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
447+
- 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
448+
- 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
449+
- sf:windowsAndLinux-FbBwQsc(org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$WhenContainerHovered$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$WhenContainerHovered
450+
- bs:windowsAndLinux-FbBwQsc$default(org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility$WhenContainerHovered$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$WhenContainerHovered
444451
- 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
445452
- 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
446453
- 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

0 commit comments

Comments
 (0)