mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-17 16:47:01 +05:30
desktop: initialize subproject
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
parent
2a543d3aad
commit
be6e0c9498
10 changed files with 175 additions and 8 deletions
1
.idea/gradle.xml
generated
1
.idea/gradle.xml
generated
|
@ -15,6 +15,7 @@
|
||||||
<option value="$PROJECT_DIR$/app" />
|
<option value="$PROJECT_DIR$/app" />
|
||||||
<option value="$PROJECT_DIR$/buildSrc" />
|
<option value="$PROJECT_DIR$/buildSrc" />
|
||||||
<option value="$PROJECT_DIR$/database" />
|
<option value="$PROJECT_DIR$/database" />
|
||||||
|
<option value="$PROJECT_DIR$/desktop" />
|
||||||
</set>
|
</set>
|
||||||
</option>
|
</option>
|
||||||
<option name="resolveModulePerSourceSet" value="false" />
|
<option name="resolveModulePerSourceSet" value="false" />
|
||||||
|
|
10
.idea/jarRepositories.xml
generated
10
.idea/jarRepositories.xml
generated
|
@ -21,5 +21,15 @@
|
||||||
<option name="name" value="MavenRepo" />
|
<option name="name" value="MavenRepo" />
|
||||||
<option name="url" value="https://repo.maven.apache.org/maven2/" />
|
<option name="url" value="https://repo.maven.apache.org/maven2/" />
|
||||||
</remote-repository>
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="BintrayJCenter" />
|
||||||
|
<option name="name" value="BintrayJCenter" />
|
||||||
|
<option name="url" value="https://jcenter.bintray.com/" />
|
||||||
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="maven" />
|
||||||
|
<option name="name" value="maven" />
|
||||||
|
<option name="url" value="https://maven.pkg.jetbrains.space/public/p/compose/dev" />
|
||||||
|
</remote-repository>
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
|
@ -9,13 +9,6 @@ plugins {
|
||||||
`core-library-desugaring`
|
`core-library-desugaring`
|
||||||
}
|
}
|
||||||
|
|
||||||
repositories {
|
|
||||||
// kotlinx-collections-immutable-jvm used by Compose is stored here.
|
|
||||||
maven("https://dl.bintray.com/kotlin/kotlinx") {
|
|
||||||
name = "KotlinX Bintray"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
android {
|
android {
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId = "dev.msfjarvis.lobsters"
|
applicationId = "dev.msfjarvis.lobsters"
|
||||||
|
|
|
@ -11,6 +11,7 @@ import org.gradle.api.tasks.Delete
|
||||||
import org.gradle.api.tasks.testing.Test
|
import org.gradle.api.tasks.testing.Test
|
||||||
import org.gradle.api.tasks.testing.logging.TestLogEvent
|
import org.gradle.api.tasks.testing.logging.TestLogEvent
|
||||||
import org.gradle.api.tasks.wrapper.Wrapper
|
import org.gradle.api.tasks.wrapper.Wrapper
|
||||||
|
import org.gradle.kotlin.dsl.maven
|
||||||
import org.gradle.kotlin.dsl.register
|
import org.gradle.kotlin.dsl.register
|
||||||
import org.gradle.kotlin.dsl.repositories
|
import org.gradle.kotlin.dsl.repositories
|
||||||
import org.gradle.kotlin.dsl.withType
|
import org.gradle.kotlin.dsl.withType
|
||||||
|
@ -39,6 +40,18 @@ internal fun Project.configureForAllProjects() {
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
jcenter {
|
||||||
|
content {
|
||||||
|
includeGroup("org.jetbrains.compose.*")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
maven("https://dl.bintray.com/kotlin/kotlinx") {
|
||||||
|
name = "KotlinX Bintray"
|
||||||
|
content {
|
||||||
|
includeModule("org.jetbrains.kotlinx", "kotlinx-collections-immutable")
|
||||||
|
includeModule("org.jetbrains.kotlinx", "kotlinx-collections-immutable-jvm")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
tasks.withType<KotlinCompile> {
|
tasks.withType<KotlinCompile> {
|
||||||
kotlinOptions {
|
kotlinOptions {
|
||||||
|
|
|
@ -25,6 +25,7 @@ object Dependencies {
|
||||||
private const val version = "1.4.3"
|
private const val version = "1.4.3"
|
||||||
const val android = "org.jetbrains.kotlinx:kotlinx-coroutines-android:$version"
|
const val android = "org.jetbrains.kotlinx:kotlinx-coroutines-android:$version"
|
||||||
const val core = "org.jetbrains.kotlinx:kotlinx-coroutines-core:$version"
|
const val core = "org.jetbrains.kotlinx:kotlinx-coroutines-core:$version"
|
||||||
|
const val jvmCore = "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:$version"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
26
desktop/build.gradle.kts
Normal file
26
desktop/build.gradle.kts
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
import org.jetbrains.compose.compose
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
kotlin("jvm")
|
||||||
|
id("org.jetbrains.compose") version "0.4.0-build173"
|
||||||
|
`lobsters-plugin`
|
||||||
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation(project(":api"))
|
||||||
|
implementation(project(":database"))
|
||||||
|
implementation(compose.desktop.currentOs)
|
||||||
|
implementation(compose.runtime)
|
||||||
|
implementation(compose.material)
|
||||||
|
implementation(Dependencies.Kotlin.Coroutines.jvmCore)
|
||||||
|
}
|
||||||
|
|
||||||
|
compose.desktop {
|
||||||
|
application {
|
||||||
|
mainClass = "MainKt"
|
||||||
|
}
|
||||||
|
}
|
31
desktop/src/main/kotlin/LobstersItem.kt
Normal file
31
desktop/src/main/kotlin/LobstersItem.kt
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
import androidx.compose.foundation.clickable
|
||||||
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
|
import androidx.compose.foundation.layout.requiredHeight
|
||||||
|
import androidx.compose.material.Surface
|
||||||
|
import androidx.compose.material.Text
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import dev.msfjarvis.lobsters.data.local.SavedPost
|
||||||
|
import java.awt.Desktop
|
||||||
|
import java.net.URI
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun LobstersItem(
|
||||||
|
post: SavedPost,
|
||||||
|
) {
|
||||||
|
Surface(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.requiredHeight(48.dp)
|
||||||
|
.clickable {
|
||||||
|
if (Desktop.isDesktopSupported() && Desktop.getDesktop()
|
||||||
|
.isSupported(Desktop.Action.BROWSE)
|
||||||
|
) {
|
||||||
|
Desktop.getDesktop().browse(URI(post.url))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
Text(post.title)
|
||||||
|
}
|
||||||
|
}
|
49
desktop/src/main/kotlin/Main.kt
Normal file
49
desktop/src/main/kotlin/Main.kt
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
import androidx.compose.desktop.Window
|
||||||
|
import androidx.compose.foundation.VerticalScrollbar
|
||||||
|
import androidx.compose.foundation.layout.Box
|
||||||
|
import androidx.compose.foundation.layout.Column
|
||||||
|
import androidx.compose.foundation.layout.fillMaxHeight
|
||||||
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
|
import androidx.compose.foundation.rememberScrollState
|
||||||
|
import androidx.compose.foundation.rememberScrollbarAdapter
|
||||||
|
import androidx.compose.foundation.verticalScroll
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import dev.msfjarvis.lobsters.data.local.SavedPost
|
||||||
|
|
||||||
|
val TEST_POST = SavedPost(
|
||||||
|
shortId = "zqyydb",
|
||||||
|
title = "k2k20 hackathon report: Bob Beck on LibreSSL progress",
|
||||||
|
url = "https://undeadly.org/cgi?action=article;sid=20200921105847",
|
||||||
|
createdAt = "2020-09-21T07:11:14.000-05:00",
|
||||||
|
commentsUrl = "https://lobste.rs/s/zqyydb/k2k20_hackathon_report_bob_beck_on",
|
||||||
|
submitterName = "Vigdis",
|
||||||
|
submitterAvatarUrl = "/avatars/Vigdis-100.png",
|
||||||
|
tags = listOf("openbsd", "linux", "containers", "hack the planet", "no thanks"),
|
||||||
|
)
|
||||||
|
|
||||||
|
@OptIn(ExperimentalStdlibApi::class)
|
||||||
|
fun main() = Window(title = "Claw for lobste.rs") {
|
||||||
|
LobstersTheme {
|
||||||
|
Box(
|
||||||
|
modifier = Modifier.fillMaxSize(),
|
||||||
|
) {
|
||||||
|
val stateVertical = rememberScrollState(0)
|
||||||
|
Box(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxSize()
|
||||||
|
.verticalScroll(stateVertical),
|
||||||
|
) {
|
||||||
|
Column {
|
||||||
|
repeat(50) {
|
||||||
|
LobstersItem(TEST_POST)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
VerticalScrollbar(
|
||||||
|
modifier = Modifier.align(Alignment.CenterEnd).fillMaxHeight(),
|
||||||
|
adapter = rememberScrollbarAdapter(stateVertical),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
42
desktop/src/main/kotlin/Theme.kt
Normal file
42
desktop/src/main/kotlin/Theme.kt
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
@file:Suppress("UNUSED")
|
||||||
|
|
||||||
|
import androidx.compose.material.MaterialTheme
|
||||||
|
import androidx.compose.material.darkColors
|
||||||
|
import androidx.compose.material.lightColors
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
|
|
||||||
|
val titleColor = Color(0xFF7395D9)
|
||||||
|
|
||||||
|
val lightColors = lightColors(
|
||||||
|
primary = Color.White,
|
||||||
|
secondary = Color(0xFF6C0000),
|
||||||
|
background = Color.White,
|
||||||
|
surface = Color.White,
|
||||||
|
onPrimary = Color.DarkGray,
|
||||||
|
onSecondary = Color.White,
|
||||||
|
onBackground = Color.White,
|
||||||
|
onSurface = Color.White,
|
||||||
|
)
|
||||||
|
|
||||||
|
val darkColors = darkColors(
|
||||||
|
primary = Color.White,
|
||||||
|
secondary = Color(0xFF6C0000),
|
||||||
|
background = Color.Black,
|
||||||
|
surface = Color.Black,
|
||||||
|
onPrimary = Color.Black,
|
||||||
|
onSecondary = Color.White,
|
||||||
|
onBackground = Color.White,
|
||||||
|
onSurface = Color.White,
|
||||||
|
)
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun LobstersTheme(
|
||||||
|
useLightColors: Boolean = true,
|
||||||
|
children: @Composable () -> Unit
|
||||||
|
) {
|
||||||
|
MaterialTheme(
|
||||||
|
colors = if (useLightColors) lightColors else darkColors,
|
||||||
|
content = children,
|
||||||
|
)
|
||||||
|
}
|
|
@ -1,9 +1,10 @@
|
||||||
rootProject.name = "Claw"
|
rootProject.name = "Claw"
|
||||||
include(":app", ":api", ":database")
|
include(":app", ":api", ":database", ":desktop")
|
||||||
enableFeaturePreview("GRADLE_METADATA")
|
enableFeaturePreview("GRADLE_METADATA")
|
||||||
pluginManagement {
|
pluginManagement {
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
gradlePluginPortal()
|
gradlePluginPortal()
|
||||||
|
maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue