mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-17 08:37:03 +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$/buildSrc" />
|
||||
<option value="$PROJECT_DIR$/database" />
|
||||
<option value="$PROJECT_DIR$/desktop" />
|
||||
</set>
|
||||
</option>
|
||||
<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="url" value="https://repo.maven.apache.org/maven2/" />
|
||||
</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>
|
||||
</project>
|
|
@ -9,13 +9,6 @@ plugins {
|
|||
`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 {
|
||||
defaultConfig {
|
||||
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.logging.TestLogEvent
|
||||
import org.gradle.api.tasks.wrapper.Wrapper
|
||||
import org.gradle.kotlin.dsl.maven
|
||||
import org.gradle.kotlin.dsl.register
|
||||
import org.gradle.kotlin.dsl.repositories
|
||||
import org.gradle.kotlin.dsl.withType
|
||||
|
@ -39,6 +40,18 @@ internal fun Project.configureForAllProjects() {
|
|||
repositories {
|
||||
google()
|
||||
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> {
|
||||
kotlinOptions {
|
||||
|
|
|
@ -25,6 +25,7 @@ object Dependencies {
|
|||
private const val version = "1.4.3"
|
||||
const val android = "org.jetbrains.kotlinx:kotlinx-coroutines-android:$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"
|
||||
include(":app", ":api", ":database")
|
||||
include(":app", ":api", ":database", ":desktop")
|
||||
enableFeaturePreview("GRADLE_METADATA")
|
||||
pluginManagement {
|
||||
repositories {
|
||||
google()
|
||||
gradlePluginPortal()
|
||||
maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue