desktop: initialize subproject

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
Harsh Shandilya 2021-03-07 13:08:44 +05:30
parent 2a543d3aad
commit be6e0c9498
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
10 changed files with 175 additions and 8 deletions

1
.idea/gradle.xml generated
View file

@ -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" />

View file

@ -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>

View file

@ -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"

View file

@ -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 {

View file

@ -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
View 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"
}
}

View 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)
}
}

View 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),
)
}
}
}

View 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,
)
}

View file

@ -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")
}
}