Reword the windows height management to avoid too big windows.

This commit is contained in:
Thomas Andres Gomez 2025-02-05 11:39:44 +01:00
parent f715b973ff
commit 8fd2ff3cc4
7 changed files with 71 additions and 35 deletions

View file

@ -25,8 +25,10 @@ import androidx.compose.runtime.remember
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.graphics.Shape import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.min
import androidx.compose.ui.window.ApplicationScope import androidx.compose.ui.window.ApplicationScope
import androidx.compose.ui.window.Window import androidx.compose.ui.window.Window
import androidx.compose.ui.window.rememberWindowState import androidx.compose.ui.window.rememberWindowState
@ -40,6 +42,7 @@ import com.pixelized.desktop.lwa.navigation.window.WindowsNavHost
import com.pixelized.desktop.lwa.navigation.window.destination.CharacterSheetEditWindow import com.pixelized.desktop.lwa.navigation.window.destination.CharacterSheetEditWindow
import com.pixelized.desktop.lwa.navigation.window.destination.CharacterSheetWindow import com.pixelized.desktop.lwa.navigation.window.destination.CharacterSheetWindow
import com.pixelized.desktop.lwa.navigation.window.destination.RollHistoryWindow import com.pixelized.desktop.lwa.navigation.window.destination.RollHistoryWindow
import com.pixelized.desktop.lwa.navigation.window.rememberMaxWindowHeight
import com.pixelized.desktop.lwa.repository.network.NetworkRepository import com.pixelized.desktop.lwa.repository.network.NetworkRepository
import com.pixelized.desktop.lwa.repository.network.NetworkRepository.Status import com.pixelized.desktop.lwa.repository.network.NetworkRepository.Status
import com.pixelized.desktop.lwa.screen.characterSheet.CharacterSheetMainNavHost import com.pixelized.desktop.lwa.screen.characterSheet.CharacterSheetMainNavHost
@ -52,6 +55,7 @@ import lwacharactersheet.composeapp.generated.resources.network__disconnect__mes
import org.jetbrains.compose.resources.getString import org.jetbrains.compose.resources.getString
import org.jetbrains.compose.ui.tooling.preview.Preview import org.jetbrains.compose.ui.tooling.preview.Preview
import org.koin.compose.koinInject import org.koin.compose.koinInject
import java.awt.Toolkit
val LocalWindowController = compositionLocalOf<WindowController> { val LocalWindowController = compositionLocalOf<WindowController> {
error("Local Window Controller is not yet ready") error("Local Window Controller is not yet ready")
@ -68,9 +72,11 @@ val LocalErrorSnackHost = compositionLocalOf<SnackbarHostState> {
@Composable @Composable
@Preview @Preview
fun ApplicationScope.App() { fun ApplicationScope.App() {
val maxWindowHeight = rememberMaxWindowHeight()
val snackHostState = remember { SnackbarHostState() } val snackHostState = remember { SnackbarHostState() }
val errorSnackHostState = remember { SnackbarHostState() } val errorSnackHostState = remember { SnackbarHostState() }
val windowController = remember { WindowController() } val windowController = remember { WindowController(maxWindowHeight) }
val keyEventHandlers = remember { mutableStateListOf<KeyEventHandler>() } val keyEventHandlers = remember { mutableStateListOf<KeyEventHandler>() }
CompositionLocalProvider( CompositionLocalProvider(

View file

@ -9,12 +9,16 @@ import androidx.compose.runtime.key
import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Window import androidx.compose.ui.window.Window
import androidx.compose.ui.window.WindowState import androidx.compose.ui.window.WindowState
import androidx.compose.ui.window.rememberWindowState import androidx.compose.ui.window.rememberWindowState
import com.pixelized.desktop.lwa.composable.key.KeyEventHandler import com.pixelized.desktop.lwa.composable.key.KeyEventHandler
import com.pixelized.desktop.lwa.composable.key.LocalKeyEventHandlers import com.pixelized.desktop.lwa.composable.key.LocalKeyEventHandlers
import com.pixelized.desktop.lwa.navigation.window.destination.Window import com.pixelized.desktop.lwa.navigation.window.destination.Window
import java.awt.Toolkit
val LocalWindow = compositionLocalOf<Window> { val LocalWindow = compositionLocalOf<Window> {
error("Local Window is not yet ready") error("Local Window is not yet ready")
@ -24,7 +28,9 @@ val LocalWindowState = compositionLocalOf<WindowState> {
} }
@Stable @Stable
class WindowController { class WindowController(
val maxWindowHeight: Dp,
) {
private val _windows = mutableStateOf<Map<String, Window>>(emptyMap()) private val _windows = mutableStateOf<Map<String, Window>>(emptyMap())
val windows: State<Map<String, Window>> get() = _windows val windows: State<Map<String, Window>> get() = _windows
@ -41,6 +47,18 @@ class WindowController {
} }
} }
@Composable
@Stable
fun rememberMaxWindowHeight(): Dp {
val density = LocalDensity.current
val maxWindowHeight = remember(density) {
val screenSize = Toolkit.getDefaultToolkit().screenSize
val screenHeight = screenSize.height
with(density) { screenHeight.toDp() - 128.dp }
}
return maxWindowHeight
}
@Composable @Composable
fun WindowsNavHost( fun WindowsNavHost(
controller: WindowController, controller: WindowController,

View file

@ -7,25 +7,26 @@ import com.pixelized.desktop.lwa.navigation.window.WindowController
@Stable @Stable
class CharacterSheetEditWindow( class CharacterSheetEditWindow(
title: String,
val sheetId: String?, val sheetId: String?,
title: String,
size: DpSize,
) : Window( ) : Window(
title = title, title = title,
size = size, size = size,
) { )
companion object {
val size = DpSize(600.dp, 900.dp)
}
}
fun WindowController.navigateToCharacterSheetEdit( fun WindowController.navigateToCharacterSheetEdit(
title: String,
characterId: String?, characterId: String?,
title: String,
) { ) {
showWindow( showWindow(
window = CharacterSheetEditWindow( window = CharacterSheetEditWindow(
title = title,
sheetId = characterId, sheetId = characterId,
title = title,
size = DpSize(
width = 600.dp,
height = maxWindowHeight,
),
) )
) )
} }

View file

@ -7,28 +7,26 @@ import com.pixelized.desktop.lwa.navigation.window.WindowController
@Stable @Stable
class CharacterSheetWindow( class CharacterSheetWindow(
title: String,
val characterId: String, val characterId: String,
title: String,
size: DpSize,
) : Window( ) : Window(
title = title, title = title,
size = size, size = size,
) { )
companion object {
val size = DpSize(
width = 400.dp + 64.dp,
height = 900.dp,
)
}
}
fun WindowController.navigateToCharacterSheet( fun WindowController.navigateToCharacterSheet(
title: String,
characterId: String, characterId: String,
title: String,
) { ) {
showWindow( showWindow(
window = CharacterSheetWindow( window = CharacterSheetWindow(
title = title,
characterId = characterId, characterId = characterId,
title = title,
size = DpSize(
width = 400.dp + 64.dp,
height = maxWindowHeight,
),
) )
) )
} }

View file

@ -1,21 +1,28 @@
package com.pixelized.desktop.lwa.navigation.window.destination package com.pixelized.desktop.lwa.navigation.window.destination
import androidx.compose.runtime.Stable
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 com.pixelized.desktop.lwa.navigation.window.WindowController import com.pixelized.desktop.lwa.navigation.window.WindowController
class RollHistoryWindow: Window( @Stable
title = "", class RollHistoryWindow(
title: String,
size: DpSize,
) : Window(
title = title,
size = size, size = size,
) { )
companion object {
val size = DpSize(
width = 400.dp + 64.dp,
height = 900.dp,
)
}
}
fun WindowController.navigateToRollHistory() { fun WindowController.navigateToRollHistory(
showWindow(window = RollHistoryWindow()) title: String = "",
) {
showWindow(
window = RollHistoryWindow(
title = title, size = DpSize(
width = 400.dp + 64.dp,
height = maxWindowHeight,
)
)
)
} }

View file

@ -49,10 +49,13 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.min
import com.pixelized.desktop.lwa.LocalWindowController import com.pixelized.desktop.lwa.LocalWindowController
import com.pixelized.desktop.lwa.composable.blur.BlurContent import com.pixelized.desktop.lwa.composable.blur.BlurContent
import com.pixelized.desktop.lwa.composable.blur.BlurContentController import com.pixelized.desktop.lwa.composable.blur.BlurContentController
@ -83,6 +86,7 @@ import org.jetbrains.compose.resources.getString
import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.painterResource
import org.jetbrains.compose.resources.stringResource import org.jetbrains.compose.resources.stringResource
import org.koin.compose.viewmodel.koinViewModel import org.koin.compose.viewmodel.koinViewModel
import java.awt.Toolkit
@Stable @Stable
data class CharacterSheetPageUio( data class CharacterSheetPageUio(
@ -125,8 +129,9 @@ fun CharacterSheetPage(
rollViewModel: RollViewModel = koinViewModel(), rollViewModel: RollViewModel = koinViewModel(),
) { ) {
val windowController = LocalWindowController.current val windowController = LocalWindowController.current
val window = LocalWindow.current
val screen = LocalScreenController.current val screen = LocalScreenController.current
val window = LocalWindow.current
val density = LocalDensity.current
val scope = rememberCoroutineScope() val scope = rememberCoroutineScope()
val blurController = remember { BlurContentController() } val blurController = remember { BlurContentController() }

View file

@ -22,6 +22,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.pixelized.desktop.lwa.LocalWindowController import com.pixelized.desktop.lwa.LocalWindowController
import com.pixelized.desktop.lwa.navigation.screen.LocalScreenController import com.pixelized.desktop.lwa.navigation.screen.LocalScreenController
@ -79,8 +80,8 @@ fun MainPage(
}, },
onCreateCharacter = { onCreateCharacter = {
window.navigateToCharacterSheetEdit( window.navigateToCharacterSheetEdit(
title = runBlocking { getString(Res.string.character_sheet_edit__create__title) },
characterId = null, characterId = null,
title = runBlocking { getString(Res.string.character_sheet_edit__create__title) },
) )
}, },
onRollHistory = { onRollHistory = {