milan jurkulák 2 лет назад
Родитель
Сommit
6d5e732001

+ 0 - 2
src/main/kotlin/eu/mjdev/desktop/Main.kt

@@ -5,7 +5,6 @@ import androidx.compose.runtime.CompositionLocalProvider
 import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.window.application
-import eu.mjdev.dadb.helpers.log
 import eu.mjdev.desktop.components.appsmenu.AppsMenu
 import eu.mjdev.desktop.components.controlcenter.ControlCenter
 import eu.mjdev.desktop.components.desktoppanel.DesktopPanel
@@ -45,7 +44,6 @@ fun main() = application(
             DesktopPanel(
                 panelState = panelState,
                 onMenuIconClicked = {
-                    log { "menu icon clicked" }
                     menuState.toggle()
                 }
             )

+ 3 - 1
src/main/kotlin/eu/mjdev/desktop/components/appsmenu/AppsMenu.kt

@@ -64,7 +64,9 @@ fun AppsMenu(
     )
 ) = TopWindow(
     windowState = windowState,
-    onFocusChange = { hasFocus -> if (!hasFocus) menuState.hide() }
+    onFocusChange = { hasFocus ->
+        if (!hasFocus) menuState.hide()
+    }
 ) {
     Box(
         modifier = modifier

+ 3 - 1
src/main/kotlin/eu/mjdev/desktop/components/controlcenter/ControlCenter.kt

@@ -84,7 +84,9 @@ fun ControlCenter(
     onVisibilityChange: (visible: Boolean) -> Unit = {},
 ) = TopWindow(
     windowState = windowState,
-    onFocusChange = { hasFocus -> if (!hasFocus) controlCenterState.hide() }
+    onFocusChange = { hasFocus ->
+        if (!hasFocus) controlCenterState.hide()
+    }
 ) {
     SlidingMenu(
         modifier = modifier,

+ 3 - 1
src/main/kotlin/eu/mjdev/desktop/components/desktoppanel/DesktopPanel.kt

@@ -75,7 +75,9 @@ fun DesktopPanel(
     onMenuIconClicked: () -> Unit,
 ) = TopWindow(
     windowState = windowState,
-    onFocusChange = { hasFocus -> if (!hasFocus) panelState.hide() }
+    onFocusChange = { hasFocus ->
+        if (!hasFocus) panelState.hide()
+    }
 ) {
     SlidingMenu(
         modifier = modifier,

+ 3 - 4
src/main/kotlin/eu/mjdev/desktop/components/desktoppanel/DesktopPanelIcon.kt

@@ -73,10 +73,9 @@ fun DesktopPanelIcon(
                 iconBackgroundColor = iconBackgroundColor,
                 iconSize = iconSize,
                 innerPadding = iconPadding,
-                outerPadding = iconOuterPadding
-            ) {
-                onClick()
-            }
+                outerPadding = iconOuterPadding,
+                onClick = onClick
+            )
         }
     }
 }

+ 2 - 2
src/main/kotlin/eu/mjdev/desktop/components/fonticon/MaterialIcon.kt

@@ -46,8 +46,8 @@ fun MaterialIcon(
             modifier = Modifier.align(Alignment.Center),
             color = iconColor,
             fontSizeRange = FontSizeRange(
-                min = 16.sp,
-                max = (iconSize.height - (innerPadding.width + outerPadding.width)).sp,
+                min = 24.sp,
+                max = (iconSize.width + innerPadding.width + outerPadding.width).sp,
             ),
             fontFamily = iconicFont.fontFamily,
             textAlign = TextAlign.Center

+ 15 - 12
src/main/kotlin/eu/mjdev/desktop/components/icon/ShapedIcon.kt

@@ -37,21 +37,24 @@ fun ShapedIcon(
         .size(iconSize + innerPadding.size + outerPadding.size)
         .background(iconBackgroundColor, iconShape)
         .clip(iconShape)
-        .padding(innerPadding)
         .onClick {
             onClick()
         }
 ) {
-    if (customContent != null) {
-        customContent()
-    } else {
-        Icon(
-            modifier = Modifier.fillMaxSize(),
-            imageVector = imageVector,
-            contentDescription = contentDescription,
-            tint = iconColor
-        )
+    Box(
+        modifier = Modifier
+            .fillMaxSize()
+            .padding(innerPadding),
+    ) {
+        if (customContent != null) {
+            customContent()
+        } else {
+            Icon(
+                modifier = Modifier.fillMaxSize(),
+                imageVector = imageVector,
+                contentDescription = contentDescription,
+                tint = iconColor
+            )
+        }
     }
 }
-
-

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

@@ -10,7 +10,6 @@ import androidx.compose.ui.ExperimentalComposeUiApi
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.input.pointer.PointerEventType
 import androidx.compose.ui.input.pointer.onPointerEvent
-import eu.mjdev.dadb.helpers.log
 import eu.mjdev.desktop.components.slidemenu.VisibilityState.Companion.rememberVisibilityState
 import eu.mjdev.desktop.extensions.Compose.launchedEffect
 
@@ -22,6 +21,12 @@ fun SlidingMenu(
     modifier: Modifier = Modifier,
     state: VisibilityState = rememberVisibilityState(),
     orientation: Orientation = Horizontal,
+    onPointerEnter: () -> Unit = {
+        state.show()
+    },
+    onPointerLeave: () -> Unit = {
+//        state.hide()
+    },
     onVisibilityChange: (visible: Boolean) -> Unit = {},
     content: @Composable (isVisible: Boolean) -> Unit
 ) {
@@ -30,10 +35,8 @@ fun SlidingMenu(
             modifier = modifier
                 .fillMaxHeight()
                 .wrapContentWidth()
-                .onPointerEvent(PointerEventType.Enter) {
-                    log { "Showing sliding menu." }
-                    state.show()
-                }
+                .onPointerEvent(PointerEventType.Enter) { onPointerEnter() }
+                .onPointerEvent(PointerEventType.Exit) { onPointerLeave() }
         ) {
             content(state.isVisible)
         }

+ 18 - 0
src/main/kotlin/eu/mjdev/desktop/extensions/Modifier.kt

@@ -1,11 +1,16 @@
 package eu.mjdev.desktop.extensions
 
+import androidx.compose.animation.core.animateFloatAsState
 import androidx.compose.foundation.border
+import androidx.compose.foundation.interaction.InteractionSource
+import androidx.compose.foundation.interaction.collectIsPressedAsState
 import androidx.compose.foundation.shape.CircleShape
 import androidx.compose.foundation.shape.RoundedCornerShape
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.Stable
+import androidx.compose.runtime.getValue
 import androidx.compose.ui.Modifier
+import androidx.compose.ui.composed
 import androidx.compose.ui.draw.clip
 import androidx.compose.ui.draw.drawBehind
 import androidx.compose.ui.draw.shadow
@@ -33,6 +38,19 @@ object Modifier {
         this
     }
 
+    fun Modifier.scaleOnPress(
+        interactionSource: InteractionSource,
+        pressScale: Float = 0.95f,
+        leaveScale: Float = 1f
+    ) = composed {
+        val isPressed by interactionSource.collectIsPressedAsState()
+        val scale by animateFloatAsState(if (isPressed) pressScale else leaveScale)
+        this.graphicsLayer {
+            scaleX = scale
+            scaleY = scale
+        }
+    }
+
     @Stable
     @Composable
     fun Modifier.shadow(

+ 24 - 26
src/main/kotlin/eu/mjdev/desktop/windows/TopWindow.kt

@@ -27,33 +27,31 @@ fun TopWindow(
     onCloseRequest: () -> Unit = {},
     onFocusChange: (hasFocus: Boolean) -> Unit = {},
     content: @Composable FrameWindowScope.() -> Unit
-) {
-    Window(
-        state = windowState,
-        resizable = resizable,
-        undecorated = true,
-        onCloseRequest = onCloseRequest,
-        visible = true,
-        transparent = true,
-        title = title,
-        icon = icon,
-        focusable = focusable,
-        alwaysOnTop = true,
-        onPreviewKeyEvent = onPreviewKeyEvent,
-        onKeyEvent = onKeyEvent,
-        content = {
-            windowFocusHandler { hasFocus -> onFocusChange(hasFocus) }
-            windowState.window = window
-            AnimatedVisibility(
-                visible = windowState.isVisible,
-                enter = windowState.enter,
-                exit = windowState.exit,
-            ) {
-                content()
-            }
+) = Window(
+    state = windowState,
+    resizable = resizable,
+    undecorated = true,
+    onCloseRequest = onCloseRequest,
+    visible = true,
+    transparent = true,
+    title = title,
+    icon = icon,
+    focusable = focusable,
+    alwaysOnTop = true,
+    onPreviewKeyEvent = onPreviewKeyEvent,
+    onKeyEvent = onKeyEvent,
+    content = {
+        windowFocusHandler { hasFocus -> onFocusChange(hasFocus) }
+        windowState.window = window
+        AnimatedVisibility(
+            visible = windowState.isVisible,
+            enter = windowState.enter,
+            exit = windowState.exit,
+        ) {
+            content()
         }
-    )
-}
+    }
+)
 
 data class WindowBounds(
     val x: Dp = 0.dp,