Refactor on the Keyboard handlers.

This commit is contained in:
Andres Gomez, Thomas (ITDV RL) 2025-03-19 10:54:06 +01:00
parent edbb508f6a
commit 2b37dc2529
4 changed files with 78 additions and 44 deletions

View file

@ -60,16 +60,11 @@ fun RollOverlay(
else -> Box( else -> Box(
modifier = Modifier.fillMaxSize() modifier = Modifier.fillMaxSize()
) { ) {
KeyHandler { RollOverlayKeyHandler(
when { onDismissRequest = {
it.type == KeyEventType.KeyUp && it.key == Key.Escape -> { roll.action(result = viewModel.lastRollResult)
roll.action(result = viewModel.lastRollResult)
true
}
else -> false
} }
} )
RollPage( RollPage(
viewModel = viewModel, viewModel = viewModel,
@ -86,3 +81,19 @@ fun RollOverlay(
} }
} }
} }
@Composable
private fun RollOverlayKeyHandler(
onDismissRequest: () -> Unit,
) {
KeyHandler {
when {
it.type == KeyEventType.KeyUp && it.key == Key.Escape -> {
onDismissRequest()
true
}
else -> false
}
}
}

View file

@ -35,14 +35,14 @@ import com.pixelized.desktop.lwa.ui.composable.character.characteristic.Characte
import com.pixelized.desktop.lwa.ui.composable.key.KeyHandler import com.pixelized.desktop.lwa.ui.composable.key.KeyHandler
import com.pixelized.desktop.lwa.ui.navigation.screen.LocalScreenController import com.pixelized.desktop.lwa.ui.navigation.screen.LocalScreenController
import com.pixelized.desktop.lwa.ui.navigation.screen.destination.navigateToLevelScreen import com.pixelized.desktop.lwa.ui.navigation.screen.destination.navigateToLevelScreen
import com.pixelized.desktop.lwa.ui.screen.campaign.text.CampaignChat
import com.pixelized.desktop.lwa.ui.screen.campaign.text.CampaignChatViewModel
import com.pixelized.desktop.lwa.ui.screen.campaign.player.ribbon.npc.NpcRibbon
import com.pixelized.desktop.lwa.ui.screen.campaign.player.detail.CharacterDetailPanel import com.pixelized.desktop.lwa.ui.screen.campaign.player.detail.CharacterDetailPanel
import com.pixelized.desktop.lwa.ui.screen.campaign.player.detail.CharacterDetailViewModel import com.pixelized.desktop.lwa.ui.screen.campaign.player.detail.CharacterDetailViewModel
import com.pixelized.desktop.lwa.ui.screen.campaign.player.detail.CharacterDiminishedViewModel import com.pixelized.desktop.lwa.ui.screen.campaign.player.detail.CharacterDiminishedViewModel
import com.pixelized.desktop.lwa.ui.screen.campaign.player.detail.rememberTransitionAnimation import com.pixelized.desktop.lwa.ui.screen.campaign.player.detail.rememberTransitionAnimation
import com.pixelized.desktop.lwa.ui.screen.campaign.player.ribbon.npc.NpcRibbon
import com.pixelized.desktop.lwa.ui.screen.campaign.player.ribbon.player.PlayerRibbon import com.pixelized.desktop.lwa.ui.screen.campaign.player.ribbon.player.PlayerRibbon
import com.pixelized.desktop.lwa.ui.screen.campaign.text.CampaignChat
import com.pixelized.desktop.lwa.ui.screen.campaign.text.CampaignChatViewModel
import com.pixelized.desktop.lwa.ui.screen.campaign.toolbar.CampaignToolbar import com.pixelized.desktop.lwa.ui.screen.campaign.toolbar.CampaignToolbar
import com.pixelized.desktop.lwa.ui.screen.campaign.toolbar.CampaignToolbarViewModel import com.pixelized.desktop.lwa.ui.screen.campaign.toolbar.CampaignToolbarViewModel
import com.pixelized.desktop.lwa.ui.screen.characterSheet.detail.dialog.DiminishedStatDialog import com.pixelized.desktop.lwa.ui.screen.characterSheet.detail.dialog.DiminishedStatDialog
@ -66,18 +66,6 @@ fun CampaignScreen(
val blurController = rememberBlurContentController() val blurController = rememberBlurContentController()
val scope = rememberCoroutineScope() val scope = rememberCoroutineScope()
KeyHandler {
when {
it.type == KeyEventType.KeyUp && it.key == Key.Escape -> {
playerDetailViewModel.hideCharacter()
npcDetailViewModel.hideCharacter()
true
}
else -> false
}
}
Surface( Surface(
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
) { ) {
@ -191,6 +179,13 @@ fun CampaignScreen(
}, },
) )
} }
CampaignKeyHandler(
onDismissRequest = {
playerDetailViewModel.hideCharacter()
npcDetailViewModel.hideCharacter()
}
)
} }
@Composable @Composable
@ -280,6 +275,29 @@ private fun CampaignLayout(
} }
} }
@Composable
private fun CampaignKeyHandler(
onDismissRequest: () -> Unit,
) {
KeyHandler {
when {
it.type == KeyEventType.KeyUp && it.key == Key.Escape -> {
onDismissRequest()
true
}
else -> false
}
}
}
private fun IntSize.toDp(density: Density) = with(density) {
DpSize(
width = width.toDp(),
height = height.toDp(),
)
}
@Stable @Stable
data class CampaignLayoutScope( data class CampaignLayoutScope(
val leftOverlay: State<DpSize>, val leftOverlay: State<DpSize>,
@ -288,10 +306,3 @@ data class CampaignLayoutScope(
val rightPanel: State<DpSize>, val rightPanel: State<DpSize>,
val chatOverlay: State<DpSize>, val chatOverlay: State<DpSize>,
) )
private fun IntSize.toDp(density: Density) = with(density) {
DpSize(
width = width.toDp(),
height = height.toDp(),
)
}

View file

@ -202,7 +202,7 @@ private fun GameMasterContent(
items = tags.value, items = tags.value,
) { tag -> ) { tag ->
GMTag( GMTag(
style = MaterialTheme.lwa.typography.base.body1, style = MaterialTheme.lwa.typography.base.caption,
tag = tag, tag = tag,
onTag = { onTag(tag.id) }, onTag = { onTag(tag.id) },
) )

View file

@ -53,17 +53,6 @@ fun SettingsScreen(
) { ) {
val screen = LocalScreenController.current val screen = LocalScreenController.current
KeyHandler {
when {
it.type == KeyEventType.KeyUp && it.key == Key.Escape -> {
screen.navigateBack()
true
}
else -> false
}
}
Surface { Surface {
SettingsContent( SettingsContent(
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
@ -74,6 +63,12 @@ fun SettingsScreen(
onReset = viewModel::onReset onReset = viewModel::onReset
) )
} }
SettingsKeyHandler(
onDismissRequest = {
screen.navigateBack()
}
)
} }
@Composable @Composable
@ -114,8 +109,9 @@ private fun SettingsContent(
content = { paddingValues -> content = { paddingValues ->
Column( Column(
modifier = Modifier modifier = Modifier
.verticalScroll(state = state)
.padding(paddingValues = paddingValues) .padding(paddingValues = paddingValues)
.verticalScroll(state = state), .padding(bottom = spacing),
verticalArrangement = Arrangement.spacedBy(space = spacing), verticalArrangement = Arrangement.spacedBy(space = spacing),
) { ) {
items.forEach { items.forEach {
@ -130,6 +126,22 @@ private fun SettingsContent(
) )
} }
@Composable
private fun SettingsKeyHandler(
onDismissRequest: () -> Unit,
) {
KeyHandler {
when {
it.type == KeyEventType.KeyUp && it.key == Key.Escape -> {
onDismissRequest()
true
}
else -> false
}
}
}
private fun NavHostController.navigateBack() = popBackStack( private fun NavHostController.navigateBack() = popBackStack(
route = SettingsDestination.baseRoute(), route = SettingsDestination.baseRoute(),
inclusive = true, inclusive = true,