Skip to content

Commit ce24cee

Browse files
committed
Update SideNav.
Update dependencies. Update kotlin version. Add ColumnWithScrollBar. Fix multiplatform Dialog.
1 parent f6b668b commit ce24cee

File tree

11 files changed

+155
-18
lines changed

11 files changed

+155
-18
lines changed

build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
plugins {
2-
kotlin("multiplatform") version "1.8.0" apply false
2+
kotlin("multiplatform") version "1.8.20" apply false
33
id("org.jetbrains.compose") version "1.4.0" apply false
44
id("com.android.library") version "7.4.2" apply false
5-
id("org.jetbrains.kotlin.android") version "1.8.0" apply false
5+
id("org.jetbrains.kotlin.android") version "1.8.20" apply false
66
}
77

88
group = "com.konyaco"

example/common/src/commonMain/kotlin/com/konyaco/fluent/example/screen/HomeScreen.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.konyaco.fluent.example.screen
22

33
import androidx.compose.foundation.BorderStroke
4-
import androidx.compose.foundation.isSystemInDarkTheme
54
import androidx.compose.foundation.layout.*
65
import androidx.compose.foundation.rememberScrollState
76
import androidx.compose.foundation.shape.RoundedCornerShape

fluent/build.gradle.kts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ version = "0.0.1-dev4"
1111

1212
kotlin {
1313
jvm()
14-
android {
14+
android("android") {
1515
publishLibraryVariants("release")
1616
}
1717
sourceSets {
@@ -32,6 +32,8 @@ kotlin {
3232
api("androidx.core:core-ktx:1.10.0")
3333
}
3434
}
35+
val androidUnitTest by getting
36+
val androidInstrumentedTest by getting
3537
val jvmMain by getting {
3638
dependencies {
3739
api(compose.preview)
@@ -52,8 +54,15 @@ android {
5254
sourceCompatibility = JavaVersion.VERSION_11
5355
targetCompatibility = JavaVersion.VERSION_11
5456
}
57+
kotlin {
58+
jvmToolchain(11)
59+
}
5560
}
5661

62+
java {
63+
sourceCompatibility = JavaVersion.VERSION_11
64+
targetCompatibility = JavaVersion.VERSION_11
65+
}
5766

5867
val javadocJar by tasks.registering(Jar::class) {
5968
archiveClassifier.set("javadoc")
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.konyaco.fluent.component
2+
3+
import androidx.compose.foundation.ScrollState
4+
import androidx.compose.foundation.layout.Arrangement
5+
import androidx.compose.foundation.layout.Column
6+
import androidx.compose.foundation.layout.ColumnScope
7+
import androidx.compose.foundation.verticalScroll
8+
import androidx.compose.runtime.Composable
9+
import androidx.compose.ui.Alignment
10+
import androidx.compose.ui.Modifier
11+
12+
@Composable
13+
actual fun ColumnWithScrollBar(
14+
modifier: Modifier,
15+
scrollState: ScrollState,
16+
verticalArrangement: Arrangement.Vertical,
17+
horizontalAlignment: Alignment.Horizontal,
18+
content: @Composable ColumnScope.() -> Unit,
19+
) {
20+
Column(
21+
modifier = modifier.verticalScroll(scrollState),
22+
verticalArrangement = verticalArrangement,
23+
horizontalAlignment = horizontalAlignment,
24+
content = content
25+
)
26+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.konyaco.fluent.component
2+
3+
import androidx.compose.ui.unit.IntOffset
4+
import androidx.compose.ui.unit.IntRect
5+
import androidx.compose.ui.unit.IntSize
6+
import androidx.compose.ui.unit.LayoutDirection
7+
import androidx.compose.ui.window.PopupPositionProvider
8+
9+
internal actual val DialogPopupPositionProvider: PopupPositionProvider = DialogPopupPositionProviderImpl
10+
11+
internal object DialogPopupPositionProviderImpl : PopupPositionProvider {
12+
override fun calculatePosition(
13+
anchorBounds: IntRect,
14+
windowSize: IntSize,
15+
layoutDirection: LayoutDirection,
16+
popupContentSize: IntSize
17+
): IntOffset {
18+
return IntOffset.Zero
19+
}
20+
}

fluent/src/commonMain/kotlin/com/konyaco/fluent/background/Acrylic.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.konyaco.fluent.background
22

3+
/*
34
import androidx.compose.foundation.BorderStroke
45
import androidx.compose.foundation.layout.Box
56
import androidx.compose.foundation.shape.RoundedCornerShape
@@ -53,4 +54,4 @@ fun Acrylic(
5354
content()
5455
}
5556
}
56-
}
57+
}*/
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.konyaco.fluent.component
2+
3+
import androidx.compose.foundation.ScrollState
4+
import androidx.compose.foundation.layout.Arrangement
5+
import androidx.compose.foundation.layout.ColumnScope
6+
import androidx.compose.foundation.rememberScrollState
7+
import androidx.compose.runtime.Composable
8+
import androidx.compose.ui.Alignment
9+
import androidx.compose.ui.Modifier
10+
11+
@Composable
12+
expect fun ColumnWithScrollBar(
13+
modifier: Modifier = Modifier,
14+
scrollState: ScrollState = rememberScrollState(),
15+
verticalArrangement: Arrangement.Vertical = Arrangement.Top,
16+
horizontalAlignment: Alignment.Horizontal = Alignment.Start,
17+
content: @Composable ColumnScope.() -> Unit,
18+
)

fluent/src/commonMain/kotlin/com/konyaco/fluent/component/Dialog.kt

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,13 @@ import androidx.compose.runtime.CompositionLocalProvider
1111
import androidx.compose.runtime.LaunchedEffect
1212
import androidx.compose.runtime.remember
1313
import androidx.compose.ui.Alignment
14-
import androidx.compose.ui.ExperimentalComposeUiApi
1514
import androidx.compose.ui.Modifier
1615
import androidx.compose.ui.draw.clip
17-
import androidx.compose.ui.draw.shadow
18-
import androidx.compose.ui.geometry.Offset
1916
import androidx.compose.ui.graphics.Color
2017
import androidx.compose.ui.input.pointer.pointerInput
2118
import androidx.compose.ui.unit.dp
2219
import androidx.compose.ui.window.Popup
23-
import androidx.compose.ui.window.PopupPositionProviderAtPosition
20+
import androidx.compose.ui.window.PopupPositionProvider
2421
import com.konyaco.fluent.FluentTheme
2522
import com.konyaco.fluent.LocalContentColor
2623
import com.konyaco.fluent.LocalTextStyle
@@ -29,7 +26,9 @@ import com.konyaco.fluent.animation.FluentEasing
2926
import com.konyaco.fluent.background.Layer
3027
import com.konyaco.fluent.background.Mica
3128

32-
@OptIn(ExperimentalAnimationApi::class, ExperimentalComposeUiApi::class)
29+
internal expect val DialogPopupPositionProvider : PopupPositionProvider
30+
31+
@OptIn(ExperimentalAnimationApi::class)
3332
@Composable
3433
fun Dialog(
3534
title: String,
@@ -47,14 +46,11 @@ fun Dialog(
4746
}
4847

4948
if (visibleState.currentState || visibleState.targetState) Popup(
50-
popupPositionProvider = remember {
51-
PopupPositionProviderAtPosition(Offset.Zero, false, Offset.Zero, windowMarginPx = 0)
52-
}
49+
popupPositionProvider = DialogPopupPositionProvider
5350
) {
54-
val background =
5551
Box(
5652
Modifier.fillMaxSize()
57-
.background(Color.Black.copy(0.12f))
53+
.background(Color.Black.copy(0.3f))
5854
.pointerInput(Unit) {},
5955
Alignment.Center
6056
) {

fluent/src/commonMain/kotlin/com/konyaco/fluent/component/SideNav.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,11 @@ fun SideNav(
4848
Icon(Icons.Default.Navigation, "Expand")
4949
}
5050
CompositionLocalProvider(LocalExpand provides expanded) {
51-
val scrollState = rememberScrollState()
52-
Box(Modifier.width(width).weight(1f)) {
51+
// val scrollState = rememberScrollState()
52+
ColumnWithScrollBar(Modifier.width(width).weight(1f)) {
53+
content()
54+
}
55+
/*Box(Modifier.width(width).weight(1f)) {
5356
Column(Modifier.fillMaxSize().verticalScroll(scrollState)) {
5457
content()
5558
}
@@ -73,7 +76,7 @@ fun SideNav(
7376
),
7477
interactionSource = interactionSource
7578
)
76-
}
79+
}*/
7780
footer?.let {
7881
// Divider
7982
Box(
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.konyaco.fluent.component
2+
3+
import androidx.compose.animation.core.animateDpAsState
4+
import androidx.compose.foundation.*
5+
import androidx.compose.foundation.interaction.MutableInteractionSource
6+
import androidx.compose.foundation.interaction.collectIsHoveredAsState
7+
import androidx.compose.foundation.interaction.collectIsPressedAsState
8+
import androidx.compose.foundation.layout.*
9+
import androidx.compose.foundation.shape.CircleShape
10+
import androidx.compose.runtime.Composable
11+
import androidx.compose.runtime.getValue
12+
import androidx.compose.runtime.remember
13+
import androidx.compose.ui.Alignment
14+
import androidx.compose.ui.Modifier
15+
import androidx.compose.ui.unit.dp
16+
import com.konyaco.fluent.FluentTheme
17+
18+
@Composable
19+
actual fun ColumnWithScrollBar(
20+
modifier: Modifier,
21+
scrollState: ScrollState,
22+
verticalArrangement: Arrangement.Vertical,
23+
horizontalAlignment: Alignment.Horizontal,
24+
content: @Composable ColumnScope.() -> Unit
25+
) {
26+
Box(modifier) {
27+
Column(
28+
modifier = Modifier.fillMaxSize().verticalScroll(scrollState),
29+
verticalArrangement = verticalArrangement,
30+
horizontalAlignment = horizontalAlignment
31+
) {
32+
content()
33+
}
34+
35+
// TODO: Fluent scrollbar
36+
val interactionSource = remember { MutableInteractionSource() }
37+
val hovered by interactionSource.collectIsHoveredAsState()
38+
val pressed by interactionSource.collectIsPressedAsState()
39+
val thickness by animateDpAsState(if (hovered || pressed) 6.dp else 2.dp)
40+
41+
VerticalScrollbar(
42+
rememberScrollbarAdapter(scrollState),
43+
Modifier.align(Alignment.CenterEnd).fillMaxHeight(),
44+
style = ScrollbarStyle(
45+
thickness = thickness,
46+
unhoverColor = FluentTheme.colors.stroke.controlStrong.default,
47+
hoverColor = FluentTheme.colors.stroke.controlStrong.default,
48+
shape = CircleShape,
49+
hoverDurationMillis = 300,
50+
minimalHeight = 16.dp
51+
),
52+
interactionSource = interactionSource
53+
)
54+
}
55+
}

0 commit comments

Comments
 (0)