From aa531e7b32d49907476a18bde4f09fed5a5c2eca Mon Sep 17 00:00:00 2001 From: Igor Demin Date: Tue, 3 Aug 2021 13:09:36 +0300 Subject: [PATCH] Codeviewer. Refactor --- examples/codeviewer/build.gradle.kts | 2 +- .../jetbrains/codeviewer/ui/editor/Editor.kt | 5 +--- .../jetbrains/codeviewer/platform/Mouse.kt | 19 ++++++++----- .../jetbrains/codeviewer/platform/Theme.kt | 4 +-- .../kotlin/org/jetbrains/codeviewer/main.kt | 28 ++++++++----------- 5 files changed, 28 insertions(+), 30 deletions(-) diff --git a/examples/codeviewer/build.gradle.kts b/examples/codeviewer/build.gradle.kts index dffa99fada..751200e9c6 100644 --- a/examples/codeviewer/build.gradle.kts +++ b/examples/codeviewer/build.gradle.kts @@ -8,7 +8,7 @@ buildscript { dependencies { // __LATEST_COMPOSE_RELEASE_VERSION__ - classpath("org.jetbrains.compose:compose-gradle-plugin:1.0.0-alpha1-rc1") + classpath("org.jetbrains.compose:compose-gradle-plugin:1.0.0-alpha1-rc3") classpath("com.android.tools.build:gradle:4.0.1") // __KOTLIN_COMPOSE_VERSION__ classpath(kotlin("gradle-plugin", version = "1.5.21")) diff --git a/examples/codeviewer/common/src/commonMain/kotlin/org/jetbrains/codeviewer/ui/editor/Editor.kt b/examples/codeviewer/common/src/commonMain/kotlin/org/jetbrains/codeviewer/ui/editor/Editor.kt index c02c21fab9..30676f1ed6 100644 --- a/examples/codeviewer/common/src/commonMain/kotlin/org/jetbrains/codeviewer/ui/editor/Editor.kt +++ b/examples/codeviewer/common/src/commonMain/kotlin/org/jetbrains/codeviewer/ui/editor/Editor.kt @@ -45,10 +45,7 @@ fun Editor(file: File) = Editor( fun content(index: Int): Editor.Content { val text = textLines.get(index) - .trim('\n') // fix for native crash in Skia. - // Workaround for another Skia problem with empty line layout. - // TODO: maybe use another symbols, i.e. \u2800 or \u00a0. - val state = mutableStateOf(if (text.isEmpty()) " " else text) + val state = mutableStateOf(text) return Editor.Content(state, isCode) } diff --git a/examples/codeviewer/common/src/desktopMain/kotlin/org/jetbrains/codeviewer/platform/Mouse.kt b/examples/codeviewer/common/src/desktopMain/kotlin/org/jetbrains/codeviewer/platform/Mouse.kt index 32609e72fb..793c816723 100644 --- a/examples/codeviewer/common/src/desktopMain/kotlin/org/jetbrains/codeviewer/platform/Mouse.kt +++ b/examples/codeviewer/common/src/desktopMain/kotlin/org/jetbrains/codeviewer/platform/Mouse.kt @@ -1,13 +1,15 @@ package org.jetbrains.codeviewer.platform -import androidx.compose.desktop.LocalAppWindow import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.composed import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.input.pointer.awtCursor +import androidx.compose.ui.input.pointer.pointerIcon import androidx.compose.ui.input.pointer.pointerMoveFilter import java.awt.Cursor @@ -17,17 +19,20 @@ actual fun Modifier.pointerMoveFilter( onMove: (Offset) -> Boolean ): Modifier = this.pointerMoveFilter(onEnter = onEnter, onExit = onExit, onMove = onMove) +@OptIn(ExperimentalComposeUiApi::class) actual fun Modifier.cursorForHorizontalResize(): Modifier = composed { var isHover by remember { mutableStateOf(false) } - if (isHover) { - LocalAppWindow.current.window.cursor = Cursor(Cursor.E_RESIZE_CURSOR) - } else { - LocalAppWindow.current.window.cursor = Cursor.getDefaultCursor() - } - pointerMoveFilter( onEnter = { isHover = true; true }, onExit = { isHover = false; true } + ).pointerIcon( + awtCursor( + if (isHover) { + Cursor(Cursor.E_RESIZE_CURSOR) + } else { + Cursor.getDefaultCursor() + } + ) ) } \ No newline at end of file diff --git a/examples/codeviewer/common/src/desktopMain/kotlin/org/jetbrains/codeviewer/platform/Theme.kt b/examples/codeviewer/common/src/desktopMain/kotlin/org/jetbrains/codeviewer/platform/Theme.kt index c3da0e1b4c..2fc250cd76 100644 --- a/examples/codeviewer/common/src/desktopMain/kotlin/org/jetbrains/codeviewer/platform/Theme.kt +++ b/examples/codeviewer/common/src/desktopMain/kotlin/org/jetbrains/codeviewer/platform/Theme.kt @@ -1,7 +1,7 @@ package org.jetbrains.codeviewer.platform -import androidx.compose.desktop.DesktopTheme +import androidx.compose.desktop.DesktopMaterialTheme import androidx.compose.runtime.Composable @Composable -actual fun PlatformTheme(content: @Composable () -> Unit) = DesktopTheme(content = content) \ No newline at end of file +actual fun PlatformTheme(content: @Composable () -> Unit) = DesktopMaterialTheme(content = content) \ No newline at end of file diff --git a/examples/codeviewer/desktop/src/jvmMain/kotlin/org/jetbrains/codeviewer/main.kt b/examples/codeviewer/desktop/src/jvmMain/kotlin/org/jetbrains/codeviewer/main.kt index f30818eb08..1c9c308567 100644 --- a/examples/codeviewer/desktop/src/jvmMain/kotlin/org/jetbrains/codeviewer/main.kt +++ b/examples/codeviewer/desktop/src/jvmMain/kotlin/org/jetbrains/codeviewer/main.kt @@ -1,23 +1,19 @@ package org.jetbrains.codeviewer -import androidx.compose.desktop.Window -import androidx.compose.ui.unit.IntSize +import androidx.compose.ui.ExperimentalComposeUiApi +import androidx.compose.ui.graphics.painter.BitmapPainter +import androidx.compose.ui.res.loadImageBitmap +import androidx.compose.ui.res.useResource +import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.WindowState +import androidx.compose.ui.window.singleWindowApplication import org.jetbrains.codeviewer.ui.MainView -import java.awt.image.BufferedImage -import javax.imageio.ImageIO -fun main() = Window( +@OptIn(ExperimentalComposeUiApi::class) +fun main() = singleWindowApplication( title = "Code Viewer", - size = IntSize(1280, 768), - icon = loadImageResource("ic_launcher.png"), + state = WindowState(width = 1280.dp, height = 768.dp), + icon = BitmapPainter(useResource("ic_launcher.png", ::loadImageBitmap)), ) { MainView() -} - - -@Suppress("SameParameterValue") -private fun loadImageResource(path: String): BufferedImage { - val resource = Thread.currentThread().contextClassLoader.getResource(path) - requireNotNull(resource) { "Resource $path not found" } - return resource.openStream().use(ImageIO::read) -} +} \ No newline at end of file