Quellcode durchsuchen

control center current page fix

milan jurkulák vor 2 Jahren
Ursprung
Commit
a847b06c28

+ 7 - 8
build.gradle.kts

@@ -29,17 +29,16 @@ allprojects {
         // compose desktop
         implementation(compose.desktop.currentOs)
         // material 3
-        // implementation(compose.material3)
+        implementation(compose.material3)
         // icons
         implementation(compose.materialIconsExtended)
         // foundation
-//        implementation(compose.foundation)
-        // html
-        // implementation(compose.html)
-//         preview
-//        implementation(compose.preview)
-//         resources
-//        implementation(compose.components.resources)
+        implementation(compose.foundation)
+        // preview
+        implementation(compose.preview)
+        // resources
+        implementation(compose.components.resources)
+        // init & desktop files
         implementation(libs.ini4j)
         // http client
         implementation(libs.okhttp.client)

+ 9 - 20
src/main/kotlin/eu/mjdev/desktop/components/controlcenter/ControlCenter.kt

@@ -7,14 +7,13 @@ import androidx.compose.foundation.gestures.Orientation
 import androidx.compose.foundation.layout.*
 import androidx.compose.foundation.lazy.LazyColumn
 import androidx.compose.foundation.lazy.itemsIndexed
-import androidx.compose.foundation.pager.HorizontalPager
-import androidx.compose.foundation.pager.PagerState
-import androidx.compose.foundation.pager.rememberPagerState
 import androidx.compose.foundation.shape.RoundedCornerShape
 import androidx.compose.material.Divider
 import androidx.compose.material.Icon
 import androidx.compose.runtime.Composable
-import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
@@ -33,8 +32,6 @@ import eu.mjdev.desktop.windows.TopWindow
 import eu.mjdev.desktop.windows.TopWindowState
 import eu.mjdev.desktop.windows.TopWindowState.Companion.rememberTopWindowState
 import eu.mjdev.desktop.windows.WindowBounds
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
 
 @Suppress("FunctionName")
 @Composable
@@ -49,10 +46,9 @@ fun ControlCenter(
     controlCenterDividerWidth: Dp = api.currentUser.theme.controlCenterDividerWidth,
     controlCenterIconColor: Color = api.currentUser.theme.controlCenterIconColor,
     controlCenterIconSize: DpSize = api.currentUser.theme.controlCenterIconSize,
-    pages: List<ControlCenterPage> = api.controlCenterPages,
-    pagerState: PagerState = rememberPagerState(pageCount = { pages.size }, initialPage = 0),
+    currentPage: MutableState<Int> = remember { mutableStateOf(0) },
+    pages: List<ControlCenterPage> = remember(api.controlCenterPages) { api.controlCenterPages },
     controlCenterState: VisibilityState = rememberVisibilityState(),
-    scope: CoroutineScope = rememberCoroutineScope(),
     enter: EnterTransition = fadeIn() + slideInHorizontally(initialOffsetX = { it }),
     exit: ExitTransition = slideOutHorizontally(targetOffsetX = { it }) + fadeOut(),
     windowState: TopWindowState = rememberTopWindowState(
@@ -126,19 +122,17 @@ fun ControlCenter(
                         horizontalAlignment = Alignment.Start
                     ) {
                         itemsIndexed(pages) { idx, page ->
-                            val isSelected = (pagerState.currentPage == idx)
+                            val isSelected = (currentPage.value == idx)
                             Icon(
                                 modifier = Modifier
                                     .padding(vertical = 8.dp)
                                     .size(controlCenterIconSize)
                                     .background(
-                                        color = if (isSelected) Color.White.copy(alpha = 0.4f) else Color.Transparent,
+                                        color = if (isSelected) Color.White else Color.Transparent,
                                         shape = RoundedCornerShape(8.dp)
                                     )
                                     .clickable {
-                                        scope.launch {
-                                            pagerState.scrollToPage(idx)
-                                        }
+                                        currentPage.value = idx
                                     },
                                 imageVector = page.icon,
                                 contentDescription = "",
@@ -155,12 +149,7 @@ fun ControlCenter(
                         contentBackgroundColor = Color.Transparent
                     ) {
                         Row {
-                            HorizontalPager(
-                                modifier = Modifier.width(controlCenterExpandedWidth),
-                                state = pagerState
-                            ) { page ->
-                                pages[page].content(backgroundColor)
-                            }
+                            pages[currentPage.value].content(backgroundColor)
                             Divider(
                                 modifier = Modifier.fillMaxHeight().width(controlCenterDividerWidth),
                                 color = controlCenterDividerColor,

+ 5 - 6
src/main/kotlin/eu/mjdev/desktop/components/slidemenu/SlidingMenu.kt

@@ -4,7 +4,9 @@ import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.foundation.gestures.Orientation
 import androidx.compose.foundation.gestures.Orientation.Horizontal
 import androidx.compose.foundation.gestures.Orientation.Vertical
-import androidx.compose.foundation.layout.*
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.fillMaxHeight
+import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.ExperimentalComposeUiApi
 import androidx.compose.ui.Modifier
@@ -34,7 +36,6 @@ fun SlidingMenu(
         Horizontal -> Box(
             modifier = modifier
                 .fillMaxHeight()
-                .wrapContentWidth()
                 .onPointerEvent(PointerEventType.Enter) { onPointerEnter() }
                 .onPointerEvent(PointerEventType.Exit) { onPointerLeave() }
         ) {
@@ -44,10 +45,8 @@ fun SlidingMenu(
         Vertical -> Box(
             modifier = modifier
                 .fillMaxWidth()
-                .wrapContentHeight()
-                .onPointerEvent(PointerEventType.Enter) {
-                    state.show()
-                }
+                .onPointerEvent(PointerEventType.Enter) { onPointerEnter() }
+                .onPointerEvent(PointerEventType.Exit) { onPointerLeave() }
         ) {
             content(state.isVisible)
         }

+ 8 - 10
src/main/kotlin/eu/mjdev/desktop/provider/DesktopProvider.kt

@@ -31,16 +31,7 @@ class DesktopProvider(
     val currentUser
         get() = _currentUser.value
 
-    private val _controlCenterPages: MutableState<List<ControlCenterPage>> =
-        mutableStateOf(
-            listOf(
-                MainSettingsPage(),
-                WifiSettingsPage(),
-                BluetoothSettingsPage(),
-                DisplaySettingsPage(),
-                SoundSettingsPage()
-            )
-        )
+    private val _controlCenterPages: MutableState<List<ControlCenterPage>> = mutableStateOf(CONTROL_CENTER_PAGES)
 
     private val scriptManager by lazy { ScriptEngineManager() }
     private val engine: ScriptEngine by lazy {
@@ -135,6 +126,13 @@ class DesktopProvider(
 //    }.getOrNull()
 
     companion object {
+        private val CONTROL_CENTER_PAGES = listOf(
+            MainSettingsPage(),
+            WifiSettingsPage(),
+            BluetoothSettingsPage(),
+            DisplaySettingsPage(),
+            SoundSettingsPage()
+        )
         val LocalDesktop = compositionLocalOf {
             DesktopProvider()
         }