mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-11 19:14:05 +09:00
btex: finally working <a> tag
This commit is contained in:
@@ -41,42 +41,68 @@ class BTeXDocViewer(val doc: BTeXDocument) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private var x1: Int = 0
|
||||||
|
private var x2: Int = 0
|
||||||
|
private var y: Int = 0
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param x top-centre
|
* @param x top-centre
|
||||||
* @param y top-centre
|
* @param y top-centre
|
||||||
*/
|
*/
|
||||||
fun render(batch: SpriteBatch, x: Float, y: Float) {
|
fun render(batch: SpriteBatch, x: Float, y: Float) {
|
||||||
val x1 = if (isTome)
|
x1 = if (isTome)
|
||||||
x.toInt() - pageGap/2 - doc.pageDimensionWidth
|
x.toInt() - pageGap/2 - doc.pageDimensionWidth
|
||||||
else
|
else
|
||||||
x.toInt() - doc.pageDimensionWidth / 2
|
x.toInt() - doc.pageDimensionWidth / 2
|
||||||
|
|
||||||
val x2 = if (isTome)
|
x2 = if (isTome)
|
||||||
x.toInt() + pageGap/2
|
x.toInt() + pageGap/2
|
||||||
else
|
else
|
||||||
0
|
0
|
||||||
|
|
||||||
val y = y.toInt()
|
this.y = y.toInt()
|
||||||
|
|
||||||
if (doc.isFinalised || doc.fromArchive) {
|
if (doc.isFinalised || doc.fromArchive) {
|
||||||
if (isTome) {
|
if (isTome) {
|
||||||
batch.color = Color.WHITE
|
batch.color = Color.WHITE
|
||||||
|
|
||||||
if (currentPage - 1 in doc.pageIndices)
|
if (currentPage - 1 in doc.pageIndices)
|
||||||
doc.render(0f, batch, currentPage - 1, x1, y)
|
doc.render(0f, batch, currentPage - 1, x1, this.y)
|
||||||
if (currentPage in doc.pageIndices)
|
if (currentPage in doc.pageIndices)
|
||||||
doc.render(0f, batch, currentPage, x2, y)
|
doc.render(0f, batch, currentPage, x2, this.y)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
batch.color = Color.WHITE
|
batch.color = Color.WHITE
|
||||||
|
|
||||||
if (currentPage in doc.pageIndices)
|
if (currentPage in doc.pageIndices)
|
||||||
doc.render(0f, batch, currentPage, x1, y)
|
doc.render(0f, batch, currentPage, x1, this.y)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private var clickLatched = false//true
|
||||||
|
|
||||||
|
fun touchDown(screenX: Int, screenY: Int, pointer: Int, button: Int) {
|
||||||
|
if (!clickLatched) {
|
||||||
|
clickLatched = true
|
||||||
|
|
||||||
|
if (isTome) {
|
||||||
|
if (currentPage - 1 in doc.pageIndices)
|
||||||
|
doc.pages[currentPage - 1].touchDown(this, screenX - x1, screenY - y, pointer, button)
|
||||||
|
if (currentPage in doc.pageIndices)
|
||||||
|
doc.pages[currentPage].touchDown(this, screenX - x2, screenY - y, pointer, button)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (currentPage in doc.pageIndices)
|
||||||
|
doc.pages[currentPage].touchDown(this, screenX - x1, screenY - y, pointer, button)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun touchUp(screenX: Int, screenY: Int, pointer: Int, button: Int) {
|
||||||
|
clickLatched = false
|
||||||
|
}
|
||||||
|
|
||||||
fun prevPage() {
|
fun prevPage() {
|
||||||
if (isTome) {
|
if (isTome) {
|
||||||
currentPage = (currentPage - 2).coerceAtLeast(0)
|
currentPage = (currentPage - 2).coerceAtLeast(0)
|
||||||
|
|||||||
@@ -398,24 +398,17 @@ class BTeXPage(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun touchDown(viewer: BTeXDocViewer, screenX: Int, screenY: Int, pointer: Int, button: Int) {
|
fun touchDown(viewer: BTeXDocViewer, pageRelX: Int, pageRelY: Int, pointer: Int, button: Int) {
|
||||||
val pageRelX = screenX - drawX
|
|
||||||
val pageRelY = screenY - drawY
|
|
||||||
// filter clickable elements that are under the cursor
|
// filter clickable elements that are under the cursor
|
||||||
clickableElements.filter {
|
clickableElements.filter {
|
||||||
pageRelX in it.posX until it.posX+it.width &&
|
it.pointInHitbox(doc, pageRelX, pageRelY)
|
||||||
pageRelY in it.posY until it.posY+it.height
|
}.lastOrNull()?.let { it.onClick(viewer) }
|
||||||
}.forEach { it.onClick(viewer) }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun isEmpty() = drawCalls.isEmpty()
|
fun isEmpty() = drawCalls.isEmpty()
|
||||||
fun isNotEmpty() = drawCalls.isNotEmpty()
|
fun isNotEmpty() = drawCalls.isNotEmpty()
|
||||||
|
|
||||||
private var drawX = 0
|
|
||||||
private var drawY = 0
|
|
||||||
|
|
||||||
fun renderToPixmap(pixmap: Pixmap, x: Int, y: Int, marginH: Int, marginV: Int) {
|
fun renderToPixmap(pixmap: Pixmap, x: Int, y: Int, marginH: Int, marginV: Int) {
|
||||||
drawX = x; drawY = y
|
|
||||||
drawCalls.sortedBy { if (it.text != null) 16 else 0 }.let { drawCalls ->
|
drawCalls.sortedBy { if (it.text != null) 16 else 0 }.let { drawCalls ->
|
||||||
// paint background
|
// paint background
|
||||||
val backCol = back.cpy().also { it.a = 0.93f }
|
val backCol = back.cpy().also { it.a = 0.93f }
|
||||||
@@ -425,7 +418,8 @@ class BTeXPage(
|
|||||||
// debug underlines on clickableElements
|
// debug underlines on clickableElements
|
||||||
clickableElements.forEach {
|
clickableElements.forEach {
|
||||||
pixmap.setColor(HREF_UNDERLINE)
|
pixmap.setColor(HREF_UNDERLINE)
|
||||||
it.debugDrawHitboxToPixmap(pixmap, doc)
|
// it.debugDrawHitboxToPixmap(pixmap, doc)
|
||||||
|
// TODO actually draw underlines
|
||||||
}
|
}
|
||||||
|
|
||||||
// print texts
|
// print texts
|
||||||
|
|||||||
@@ -1929,7 +1929,10 @@ object BTeXParser {
|
|||||||
val target = pageNumInt
|
val target = pageNumInt
|
||||||
val thePage = call.pageObject
|
val thePage = call.pageObject
|
||||||
|
|
||||||
thePage.appendClickable(BTeXClickable(boxx, boxy, boxw, boxh) { it.gotoPage(target) })
|
thePage.appendClickable(BTeXClickable(boxx, boxy, boxw, boxh) {
|
||||||
|
printdbg("Goto page p. ${target+1}")
|
||||||
|
it.gotoPage(target)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ package net.torvald.terrarum.tests
|
|||||||
import com.badlogic.gdx.ApplicationAdapter
|
import com.badlogic.gdx.ApplicationAdapter
|
||||||
import com.badlogic.gdx.Gdx
|
import com.badlogic.gdx.Gdx
|
||||||
import com.badlogic.gdx.Input
|
import com.badlogic.gdx.Input
|
||||||
|
import com.badlogic.gdx.InputAdapter
|
||||||
|
import com.badlogic.gdx.InputProcessor
|
||||||
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application
|
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application
|
||||||
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration
|
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration
|
||||||
import com.badlogic.gdx.graphics.Color
|
import com.badlogic.gdx.graphics.Color
|
||||||
@@ -106,6 +108,21 @@ class BTeXTest : ApplicationAdapter() {
|
|||||||
println("Time spent on loading [ms]: $it")
|
println("Time spent on loading [ms]: $it")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Gdx.input.inputProcessor = object : InputAdapter() {
|
||||||
|
override fun touchDown(screenX: Int, screenY: Int, pointer: Int, button: Int): Boolean {
|
||||||
|
if (::viewer.isInitialized)
|
||||||
|
viewer.touchDown(screenX, screenY, pointer, button)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun touchUp(screenX: Int, screenY: Int, pointer: Int, button: Int): Boolean {
|
||||||
|
if (::viewer.isInitialized)
|
||||||
|
viewer.touchUp(screenX, screenY, pointer, button)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var init = false
|
var init = false
|
||||||
|
|||||||
Reference in New Issue
Block a user