|
|
|
package org.jetbrains.codeviewer.ui.common
|
|
|
|
|
|
|
|
import androidx.compose.material.Colors
|
|
|
|
import androidx.compose.material.darkColors
|
|
|
|
import androidx.compose.material.lightColors
|
|
|
|
import androidx.compose.runtime.Composable
|
|
|
|
import androidx.compose.runtime.Immutable
|
|
|
|
import androidx.compose.runtime.staticCompositionLocalOf
|
|
|
|
import androidx.compose.ui.graphics.Color
|
|
|
|
import androidx.compose.ui.text.SpanStyle
|
|
|
|
|
|
|
|
@Immutable
|
|
|
|
data class Theme(
|
|
|
|
val materialColors: Colors,
|
|
|
|
val colors: ExtendedColors,
|
|
|
|
val code: CodeStyle
|
|
|
|
) {
|
|
|
|
@Immutable
|
|
|
|
class ExtendedColors(
|
|
|
|
val codeGuide: Color
|
|
|
|
)
|
|
|
|
|
|
|
|
@Immutable
|
|
|
|
data class CodeStyle(
|
|
|
|
val simple: SpanStyle,
|
|
|
|
val value: SpanStyle,
|
|
|
|
val keyword: SpanStyle,
|
|
|
|
val punctuation: SpanStyle,
|
|
|
|
val annotation: SpanStyle,
|
|
|
|
val comment: SpanStyle
|
|
|
|
)
|
|
|
|
|
|
|
|
companion object {
|
|
|
|
val dark = Theme(
|
|
|
|
materialColors = darkColors(
|
|
|
|
background = Color(0xFF2B2B2B),
|
|
|
|
surface = Color(0xFF3C3F41)
|
|
|
|
),
|
|
|
|
colors = ExtendedColors(
|
|
|
|
codeGuide = Color(0xFF4E5254)
|
|
|
|
),
|
|
|
|
code = CodeStyle(
|
|
|
|
simple = SpanStyle(Color(0xFFA9B7C6)),
|
|
|
|
value = SpanStyle(Color(0xFF6897BB)),
|
|
|
|
keyword = SpanStyle(Color(0xFFCC7832)),
|
|
|
|
punctuation = SpanStyle(Color(0xFFA1C17E)),
|
|
|
|
annotation = SpanStyle(Color(0xFFBBB529)),
|
|
|
|
comment = SpanStyle(Color(0xFF808080))
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
val light = Theme(
|
|
|
|
materialColors = lightColors(
|
|
|
|
background = Color(0xFFF5F5F5),
|
|
|
|
surface = Color(0xFFFFFFFF)
|
|
|
|
),
|
|
|
|
colors = ExtendedColors(
|
|
|
|
codeGuide = Color(0xFF8E9294)
|
|
|
|
),
|
|
|
|
code = CodeStyle(
|
|
|
|
simple = SpanStyle(Color(0xFF000000)),
|
|
|
|
value = SpanStyle(Color(0xFF4A86E8)),
|
|
|
|
keyword = SpanStyle(Color(0xFF000080)),
|
|
|
|
punctuation = SpanStyle(Color(0xFFA1A1A1)),
|
|
|
|
annotation = SpanStyle(Color(0xFFBBB529)),
|
|
|
|
comment = SpanStyle(Color(0xFF808080))
|
|
|
|
)
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
val LocalTheme = staticCompositionLocalOf { Theme.dark }
|
|
|
|
|
|
|
|
val AppTheme
|
|
|
|
@Composable
|
|
|
|
get() = LocalTheme.current
|