mirror of
https://github.com/openflocon/Flocon.git
synced 2026-05-06 05:18:41 +00:00
feat: [WINDOW] enlarge window size (#53)
* feat: [WINDOW] enlarge window size * persist size and position * refactored --------- Co-authored-by: Florent Champigny <florent@bere.al>
This commit is contained in:
parent
293c7f805e
commit
af9d975123
5 changed files with 105 additions and 6 deletions
|
|
@ -1,7 +1,9 @@
|
|||
package io.github.openflocon.flocondesktop
|
||||
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.DpSize
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.Window
|
||||
|
|
@ -13,6 +15,12 @@ import coil3.compose.setSingletonImageLoaderFactory
|
|||
import coil3.network.ktor3.KtorNetworkFetcherFactory
|
||||
import flocondesktop.composeapp.generated.resources.Res
|
||||
import flocondesktop.composeapp.generated.resources.app_icon_small
|
||||
import io.github.openflocon.flocondesktop.window.MIN_WINDOW_HEIGHT
|
||||
import io.github.openflocon.flocondesktop.window.MIN_WINDOW_WIDTH
|
||||
import io.github.openflocon.flocondesktop.window.WindowStateData
|
||||
import io.github.openflocon.flocondesktop.window.WindowStateSaver
|
||||
import io.github.openflocon.flocondesktop.window.size
|
||||
import io.github.openflocon.flocondesktop.window.windowPosition
|
||||
import org.jetbrains.compose.resources.painterResource
|
||||
import java.awt.Dimension
|
||||
|
||||
|
|
@ -25,16 +33,36 @@ fun main() = application {
|
|||
add(KtorNetworkFetcherFactory())
|
||||
}.build()
|
||||
}
|
||||
|
||||
val savedState = remember {
|
||||
WindowStateSaver.load()
|
||||
}
|
||||
|
||||
val windowState = rememberWindowState(
|
||||
size = savedState.size(),
|
||||
position = savedState.windowPosition()
|
||||
)
|
||||
|
||||
Window(
|
||||
onCloseRequest = ::exitApplication,
|
||||
state = windowState,
|
||||
onCloseRequest = {
|
||||
val currentSize = windowState.size
|
||||
val currentPosition = windowState.position
|
||||
WindowStateSaver.save(
|
||||
WindowStateData(
|
||||
width = currentSize.width.value.toInt(),
|
||||
height = currentSize.height.value.toInt(),
|
||||
x = currentPosition.x.value.toInt(),
|
||||
y = currentPosition.y.value.toInt(),
|
||||
)
|
||||
)
|
||||
|
||||
exitApplication()
|
||||
},
|
||||
title = "Flocon",
|
||||
icon = painterResource(Res.drawable.app_icon_small), // Remove black behind icon
|
||||
state = rememberWindowState(
|
||||
size = DpSize(width = 1200.dp, height = 800.dp), // Définir la taille de la fenêtre ici
|
||||
position = WindowPosition(Alignment.Center),
|
||||
),
|
||||
) {
|
||||
window.minimumSize = Dimension(1200, 800)
|
||||
window.minimumSize = Dimension(MIN_WINDOW_WIDTH, MIN_WINDOW_HEIGHT)
|
||||
|
||||
App()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
package io.github.openflocon.flocondesktop.window
|
||||
|
||||
const val DEFAULT_WINDOW_WIDTH = 1550 // ~80* of fullhd 1920
|
||||
const val DEFAULT_WINDOW_HEIGHT = 900 // ~80* of fullhd 1920
|
||||
const val MIN_WINDOW_WIDTH = 1200
|
||||
const val MIN_WINDOW_HEIGHT = 800
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
package io.github.openflocon.flocondesktop.window
|
||||
|
||||
import androidx.compose.ui.unit.DpSize
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.WindowPosition
|
||||
import java.awt.Toolkit
|
||||
import kotlin.math.min
|
||||
|
||||
|
||||
fun WindowStateData?.windowPosition() = this?.let { WindowPosition(x.dp, y.dp) } ?: WindowPosition.PlatformDefault
|
||||
fun WindowStateData?.size() : DpSize {
|
||||
val screenSize = Toolkit.getDefaultToolkit().screenSize
|
||||
|
||||
val width = this?.width?.dp ?: min(
|
||||
DEFAULT_WINDOW_WIDTH,
|
||||
screenSize.width
|
||||
).dp
|
||||
val height = this?.height?.dp ?: min(
|
||||
DEFAULT_WINDOW_HEIGHT,
|
||||
screenSize.height
|
||||
).dp
|
||||
|
||||
return DpSize(
|
||||
width = width, height = height
|
||||
)
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
package io.github.openflocon.flocondesktop.window
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class WindowStateData(
|
||||
val width: Int,
|
||||
val height: Int,
|
||||
val x: Int,
|
||||
val y: Int,
|
||||
)
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
package io.github.openflocon.flocondesktop.window
|
||||
|
||||
import io.github.openflocon.flocondesktop.core.data.settings.datasource.local.createSettings
|
||||
import kotlinx.serialization.json.Json
|
||||
|
||||
object WindowStateSaver {
|
||||
|
||||
val settings = createSettings()
|
||||
|
||||
fun save(state: WindowStateData) {
|
||||
try {
|
||||
settings.putString("window", Json.encodeToString<WindowStateData>(state))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
fun load(): WindowStateData? {
|
||||
return try {
|
||||
settings.getStringOrNull("window")?.let { json ->
|
||||
Json.decodeFromString<WindowStateData>(json)
|
||||
}
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
null
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue