Reword the windows height management to avoid too big windows.
This commit is contained in:
parent
f715b973ff
commit
8fd2ff3cc4
7 changed files with 71 additions and 35 deletions
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -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,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -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,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -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() }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 = {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue