|
@@ -7,6 +7,7 @@ import androidx.compose.foundation.layout.fillMaxSize
|
|
|
import androidx.compose.foundation.layout.size
|
|
import androidx.compose.foundation.layout.size
|
|
|
import androidx.compose.material.Button
|
|
import androidx.compose.material.Button
|
|
|
import androidx.compose.material.ButtonDefaults
|
|
import androidx.compose.material.ButtonDefaults
|
|
|
|
|
+import androidx.compose.material.CircularProgressIndicator
|
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.Composable
|
|
|
import androidx.compose.runtime.MutableState
|
|
import androidx.compose.runtime.MutableState
|
|
|
import androidx.compose.runtime.mutableStateOf
|
|
import androidx.compose.runtime.mutableStateOf
|
|
@@ -14,25 +15,30 @@ import androidx.compose.runtime.remember
|
|
|
import androidx.compose.ui.ExperimentalComposeUiApi
|
|
import androidx.compose.ui.ExperimentalComposeUiApi
|
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.Modifier
|
|
|
import androidx.compose.ui.graphics.Color
|
|
import androidx.compose.ui.graphics.Color
|
|
|
|
|
+import androidx.compose.ui.hapticfeedback.HapticFeedback
|
|
|
|
|
+import androidx.compose.ui.hapticfeedback.HapticFeedbackType
|
|
|
import androidx.compose.ui.input.pointer.PointerEventType
|
|
import androidx.compose.ui.input.pointer.PointerEventType
|
|
|
import androidx.compose.ui.input.pointer.onPointerEvent
|
|
import androidx.compose.ui.input.pointer.onPointerEvent
|
|
|
|
|
+import androidx.compose.ui.platform.LocalHapticFeedback
|
|
|
import androidx.compose.ui.unit.DpSize
|
|
import androidx.compose.ui.unit.DpSize
|
|
|
import androidx.compose.ui.unit.dp
|
|
import androidx.compose.ui.unit.dp
|
|
|
import eu.mjdev.desktop.components.fonticon.FontIcon
|
|
import eu.mjdev.desktop.components.fonticon.FontIcon
|
|
|
|
|
+import eu.mjdev.desktop.data.App
|
|
|
import eu.mjdev.desktop.extensions.Compose.color
|
|
import eu.mjdev.desktop.extensions.Compose.color
|
|
|
import eu.mjdev.desktop.extensions.Compose.noElevation
|
|
import eu.mjdev.desktop.extensions.Compose.noElevation
|
|
|
import eu.mjdev.desktop.extensions.Modifier.clipRect
|
|
import eu.mjdev.desktop.extensions.Modifier.clipRect
|
|
|
import eu.mjdev.desktop.provider.DesktopProvider
|
|
import eu.mjdev.desktop.provider.DesktopProvider
|
|
|
import eu.mjdev.desktop.provider.DesktopProvider.Companion.LocalDesktop
|
|
import eu.mjdev.desktop.provider.DesktopProvider.Companion.LocalDesktop
|
|
|
-import eu.mjdev.desktop.provider.data.App
|
|
|
|
|
|
|
|
|
|
@OptIn(ExperimentalComposeUiApi::class)
|
|
@OptIn(ExperimentalComposeUiApi::class)
|
|
|
@Preview
|
|
@Preview
|
|
|
@Composable
|
|
@Composable
|
|
|
fun DesktopPanelIcon(
|
|
fun DesktopPanelIcon(
|
|
|
api: DesktopProvider = LocalDesktop.current,
|
|
api: DesktopProvider = LocalDesktop.current,
|
|
|
|
|
+ hapticFeedback: HapticFeedback = LocalHapticFeedback.current,
|
|
|
app: App? = null,
|
|
app: App? = null,
|
|
|
isRunning: Boolean = false,
|
|
isRunning: Boolean = false,
|
|
|
|
|
+ isStarting: Boolean = false,
|
|
|
icon: String? = null,
|
|
icon: String? = null,
|
|
|
iconColor: Color = Color.Black,
|
|
iconColor: Color = Color.Black,
|
|
|
iconBackgroundColor: Color = Color.White,
|
|
iconBackgroundColor: Color = Color.White,
|
|
@@ -47,7 +53,10 @@ fun DesktopPanelIcon(
|
|
|
) {
|
|
) {
|
|
|
val iconName = app?.name ?: icon
|
|
val iconName = app?.name ?: icon
|
|
|
val materialIcon = api.currentUser.theme.iconSet.iconForName(iconName) ?: "?".toInt()
|
|
val materialIcon = api.currentUser.theme.iconSet.iconForName(iconName) ?: "?".toInt()
|
|
|
- val background = if (iconState.value || isRunning) iconBackgroundHover else Color.Transparent
|
|
|
|
|
|
|
+ val background = when {
|
|
|
|
|
+ (iconState.value || isRunning) -> iconBackgroundHover
|
|
|
|
|
+ else -> Color.Transparent
|
|
|
|
|
+ }
|
|
|
Box(
|
|
Box(
|
|
|
modifier = Modifier
|
|
modifier = Modifier
|
|
|
.size(iconSize)
|
|
.size(iconSize)
|
|
@@ -77,7 +86,18 @@ fun DesktopPanelIcon(
|
|
|
iconSize = iconSize,
|
|
iconSize = iconSize,
|
|
|
innerPadding = iconPadding,
|
|
innerPadding = iconPadding,
|
|
|
outerPadding = iconOuterPadding,
|
|
outerPadding = iconOuterPadding,
|
|
|
- onClick = onClick
|
|
|
|
|
|
|
+ onClick = {
|
|
|
|
|
+ hapticFeedback.performHapticFeedback(HapticFeedbackType.LongPress)
|
|
|
|
|
+ onClick()
|
|
|
|
|
+ }
|
|
|
|
|
+ )
|
|
|
|
|
+ }
|
|
|
|
|
+ if (isStarting) {
|
|
|
|
|
+ CircularProgressIndicator(
|
|
|
|
|
+ modifier = Modifier.size(iconSize),
|
|
|
|
|
+ color = Color.White,
|
|
|
|
|
+ strokeWidth = 10.dp,
|
|
|
|
|
+ backgroundColor = Color.Transparent
|
|
|
)
|
|
)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|