From f2ef4df76288da455021a2545bd593164607bc08 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Fri, 3 May 2024 00:48:25 +0900 Subject: [PATCH] btex: centered part title --- src/net/torvald/btex/BTeXDocument.kt | 2 +- src/net/torvald/btex/BTeXParser.kt | 61 ++++++++++++++++++++-------- 2 files changed, 45 insertions(+), 18 deletions(-) diff --git a/src/net/torvald/btex/BTeXDocument.kt b/src/net/torvald/btex/BTeXDocument.kt index 29eb81ecf..cc3f16b5d 100644 --- a/src/net/torvald/btex/BTeXDocument.kt +++ b/src/net/torvald/btex/BTeXDocument.kt @@ -377,7 +377,7 @@ class BTeXDrawCall( internal val width: Int get() = if (text != null) if (text is TypesetDrawCall) - text.movableType.width + text.movableType.width * text.movableType.font.scale else TODO() else diff --git a/src/net/torvald/btex/BTeXParser.kt b/src/net/torvald/btex/BTeXParser.kt index a2cd60e45..935535101 100644 --- a/src/net/torvald/btex/BTeXParser.kt +++ b/src/net/torvald/btex/BTeXParser.kt @@ -763,25 +763,24 @@ object BTeXParser { @CloseTag // reflective access is impossible with 'private' fun closeElemFULLPAGEBOX(handler: BTeXHandler, doc: BTeXDocument, uri: String, siblingIndex: Int) { doc.currentPageObj.let { page -> - val yStart = page.drawCalls.minOf { it.posY } - val yEnd = page.drawCalls.maxOf { it.posY + it.lineCount * doc.lineHeightInPx } - val pageHeight = doc.textHeight - - val newYpos = (pageHeight - (yEnd - yStart)) / 2 - val yDelta = newYpos - yStart - - val xStart = page.drawCalls.minOf { it.posX } - val xEnd = page.drawCalls.maxOf { it.posX + it.width } - val pageWidth = doc.textWidth - - val newXpos = (pageWidth - (xEnd - xStart)) / 2 - val xDelta = newXpos - xStart - page.drawCalls.forEach { + val yStart = it.posY + val yEnd = it.posY + it.lineCount * doc.lineHeightInPx + val pageHeight = doc.textHeight + + val newYpos = (pageHeight - (yEnd - yStart)) / 2 + val yDelta = newYpos - yStart + + val xStart = it.posX + val xEnd = it.posX + it.width + val pageWidth = doc.textWidth + + val newXpos = (pageWidth - (xEnd - xStart)) / 2 + val xDelta = newXpos - xStart + it.posX += xDelta it.posY += yDelta } - } doc.addNewPage() @@ -1012,6 +1011,7 @@ object BTeXParser { typesetParagraphs("${ccDefault}Part ${num.toRomanNum()}", handler) typesetParagraphs(titleFont, "$ccDefault$thePar\n ", handler) + // get global yDelta doc.currentPageObj.let { page -> val yStart = page.drawCalls.minOf { it.posY } val yEnd = page.drawCalls.maxOf { it.posY + it.lineCount * doc.lineHeightInPx } @@ -1020,6 +1020,30 @@ object BTeXParser { val newYpos = (pageHeight - (yEnd - yStart)) / 2 val yDelta = newYpos - yStart + + page.drawCalls.forEach { + // get individual xDelta + val xStart = it.posX + val xEnd = it.posX + it.width + val pageWidth = doc.textWidth + + val newXpos = (pageWidth - (xEnd - xStart)) / 2 + val xDelta = newXpos - xStart + + // apply the movement + it.posX += xDelta + it.posY += yDelta + } + } + + /*doc.currentPageObj.let { page -> + val yStart = page.drawCalls.minOf { it.posY } + val yEnd = page.drawCalls.maxOf { it.posY + it.lineCount * doc.lineHeightInPx } + val pageHeight = doc.textHeight + + val newYpos = (pageHeight - (yEnd - yStart)) / 2 + val yDelta = newYpos - yStart + val xStart = page.drawCalls.minOf { it.posX } val xEnd = page.drawCalls.maxOf { it.posX + it.width } val pageWidth = doc.textWidth @@ -1032,9 +1056,12 @@ object BTeXParser { it.posY += yDelta } - } + }*/ + + + if (doc.currentPage % 2 == 0) + doc.addNewPage() - doc.addNewPage() doc.addNewPage() }