mirror of
https://github.com/jlengrand/compose-multiplatform.git
synced 2026-03-10 08:11:20 +00:00
Codeviewer. Refactor
This commit is contained in:
@@ -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"))
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -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)
|
||||
actual fun PlatformTheme(content: @Composable () -> Unit) = DesktopMaterialTheme(content = content)
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user