diff --git a/src/net/torvald/btex/BTeXDocument.kt b/src/net/torvald/btex/BTeXDocument.kt index b1d4d8552..c510be69f 100644 --- a/src/net/torvald/btex/BTeXDocument.kt +++ b/src/net/torvald/btex/BTeXDocument.kt @@ -30,8 +30,8 @@ class BTeXDocument { get() = 2 * pageMarginV + textHeight companion object { - val DEFAULT_PAGE_BACK = Color(0xe1e1d7ff.toInt()) - val DEFAULT_PAGE_FORE = Color(0x131311ff) + val DEFAULT_PAGE_BACK = Color(0xe0dfdb_ff.toInt()) + val DEFAULT_PAGE_FORE = Color(0x151110ff) } private val pages = ArrayList() diff --git a/src/net/torvald/btex/BTeXParser.kt b/src/net/torvald/btex/BTeXParser.kt index 2ba12648a..36e535a53 100644 --- a/src/net/torvald/btex/BTeXParser.kt +++ b/src/net/torvald/btex/BTeXParser.kt @@ -2,9 +2,12 @@ package net.torvald.btex import com.badlogic.gdx.files.FileHandle import com.badlogic.gdx.graphics.Color -import com.badlogic.gdx.graphics.g2d.SpriteBatch +import com.jme3.math.FastMath.DEG_TO_RAD +import net.torvald.colourutil.OKLch +import net.torvald.colourutil.tosRGB import net.torvald.terrarum.App import net.torvald.terrarum.btex.BTeXDocument +import net.torvald.terrarum.btex.BTeXDocument.Companion.DEFAULT_PAGE_FORE import net.torvald.terrarum.btex.BTeXDrawCall import net.torvald.terrarum.btex.MovableTypeDrawCall import net.torvald.terrarum.gameitems.ItemID @@ -14,8 +17,9 @@ import net.torvald.terrarumsansbitmap.gdx.TerrarumSansBitmap import org.xml.sax.Attributes import org.xml.sax.InputSource import org.xml.sax.helpers.DefaultHandler -import java.io.* -import java.util.* +import java.io.File +import java.io.FileInputStream +import java.io.StringReader import javax.xml.parsers.SAXParserFactory import kotlin.reflect.KFunction import kotlin.reflect.full.declaredFunctions @@ -47,7 +51,7 @@ object BTeXParser { } internal class BTeXHandler(val doc: BTeXDocument) : DefaultHandler() { - private val DEFAULT_FONTCOL = Color(0x222222ff) + private val DEFAULT_FONTCOL = DEFAULT_PAGE_FORE private val LINE_HEIGHT = doc.lineHeightInPx private var cover = "" @@ -472,7 +476,10 @@ object BTeXParser { @OpenTag // reflective access is impossible with 'private' fun processElemCOVER(handler: BTeXHandler, doc: BTeXDocument, theTag: String, uri: String, attribs: HashMap, siblingIndex: Int) { - doc.addNewPage(Color(0x6f4a45ff)) + val hue = (attribs["hue"]?.toFloatOrNull() ?: 28f) * DEG_TO_RAD + val coverCol = OKLch(hue, 0.05f, 0.36f) + val (r, g, b) = coverCol.tosRGB() + doc.addNewPage(Color(r, g, b, 1f)) handler.spanColour = "white" } diff --git a/src/net/torvald/colourutil/OKHsvUtil.kt b/src/net/torvald/colourutil/OKHsvUtil.kt index 3c3842bf3..f535a1d28 100644 --- a/src/net/torvald/colourutil/OKHsvUtil.kt +++ b/src/net/torvald/colourutil/OKHsvUtil.kt @@ -44,6 +44,10 @@ import kotlin.math.min data class OKHsv(var h: Float, var s: Float, var v: Float) data class OKHsl(var h: Float, var s: Float, var l: Float) data class OKLab(var L: Float, var a: Float, var b: Float) +data class OKLch(var H: Float, var C: Float, var L: Float) + +fun OKLch.toOKLab() = OKLab(L, C * cos(H), C * sin(H)) +fun OKLch.tosRGB() = this.toOKLab().toLinearRGB().unLinearise() object OKHsvUtil { internal data class LC(var L: Float, var C: Float) diff --git a/src/net/torvald/terrarum/tests/BTeXTest.kt b/src/net/torvald/terrarum/tests/BTeXTest.kt index bac509aa2..641aeacee 100644 --- a/src/net/torvald/terrarum/tests/BTeXTest.kt +++ b/src/net/torvald/terrarum/tests/BTeXTest.kt @@ -28,7 +28,7 @@ class BTeXTest : ApplicationAdapter() { val csi0 = "\u001B[m" val tex = """ - + The Way to Mastery of Lorem Ipsum<br />Or, How To Write and Publish a Book Terran Publishing Test Edition