Skip to content

Commit

Permalink
refactor: move word splitting to ParagraphCompositeDrawable.Builder
Browse files Browse the repository at this point in the history
  • Loading branch information
shaksternano committed May 28, 2024
1 parent 5d129cf commit 7c572bf
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 36 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.github.shaksternano.borgar.core.graphics.drawable

import io.github.shaksternano.borgar.core.graphics.TextAlignment
import io.github.shaksternano.borgar.core.util.splitWords
import java.awt.Graphics2D
import java.util.*
import kotlin.math.max
Expand Down Expand Up @@ -141,13 +142,14 @@ class ParagraphCompositeDrawable(
it.putAll(nonTextParts)
}

fun addWords(
words: Iterable<String>,
fun addText(
text: String,
customTextDrawableFactory: ((String) -> Drawable)? = null,
): Builder = apply {
words.forEach {
): Builder {
text.splitWords().forEach {
addWord(it, customTextDrawableFactory)
}
return this
}

private fun addWord(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import io.github.shaksternano.borgar.core.graphics.drawable.ParagraphCompositeDr
import io.github.shaksternano.borgar.core.graphics.fitFontWidth
import io.github.shaksternano.borgar.core.io.closeAll
import io.github.shaksternano.borgar.core.media.*
import io.github.shaksternano.borgar.core.util.splitWords
import kotlinx.coroutines.flow.Flow
import java.awt.Color
import java.awt.Font
Expand All @@ -31,13 +30,11 @@ class CaptionTask(
}

private class CaptionProcessor(
caption: String,
private val caption: String,
private val isCaption2: Boolean,
private val nonTextParts: Map<String, Drawable>,
) : ImageProcessor<CaptionData> {

private val words: List<String> = caption.splitWords()

override suspend fun constantData(
firstFrame: ImageFrame,
imageSource: Flow<ImageFrame>,
Expand Down Expand Up @@ -67,7 +64,7 @@ private class CaptionProcessor(
}

val paragraph = ParagraphCompositeDrawable.Builder(nonTextParts)
.addWords(words)
.addText(caption)
.build(textAlignment, maxWidth)

graphics.fitFontWidth(maxWidth, paragraph)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import io.github.shaksternano.borgar.core.graphics.drawable.draw
import io.github.shaksternano.borgar.core.graphics.fillRect
import io.github.shaksternano.borgar.core.io.closeAll
import io.github.shaksternano.borgar.core.media.*
import io.github.shaksternano.borgar.core.util.splitWords
import kotlinx.coroutines.flow.Flow
import java.awt.Color
import java.awt.Font
Expand All @@ -36,18 +35,11 @@ class DemotivateTask(
}

private class DemotivateProcessor(
text: String,
subText: String,
private val text: String,
private val subText: String,
private val nonTextParts: Map<String, Drawable>,
) : ImageProcessor<DemotivateData> {

private val text: List<String> = text.splitWords()
private val subText: List<String> = if (subText.isBlank()) {
emptyList()
} else {
subText.splitWords()
}

override suspend fun constantData(
firstFrame: ImageFrame,
imageSource: Flow<ImageFrame>,
Expand All @@ -69,13 +61,13 @@ private class DemotivateProcessor(

val textAlignment = TextAlignment.CENTRE
val paragraph = ParagraphCompositeDrawable.Builder(nonTextParts)
.addWords(text)
.addText(text)
.build(textAlignment, imageWidth)

val paragraphHeight = paragraph.getHeight(graphics)

val subParagraph = ParagraphCompositeDrawable.Builder(nonTextParts)
.addWords(subText)
.addText(subText)
.build(textAlignment, imageWidth)
graphics.font = subFont
val subParagraphHeight = subParagraph.getHeight(graphics)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import io.github.shaksternano.borgar.core.media.ImageFrame
import io.github.shaksternano.borgar.core.media.ImageProcessor
import io.github.shaksternano.borgar.core.media.MediaProcessingConfig
import io.github.shaksternano.borgar.core.media.SimpleMediaProcessingConfig
import io.github.shaksternano.borgar.core.util.splitWords
import kotlinx.coroutines.flow.Flow
import java.awt.Color
import java.awt.Font
Expand All @@ -36,14 +35,11 @@ class MemeTask(
}

private class MemeProcessor(
topText: String,
bottomText: String,
private val topText: String,
private val bottomText: String,
private val nonTextParts: Map<String, Drawable>,
) : ImageProcessor<MemeData> {

private val topText: List<String> = topText.splitWords()
private val bottomText: List<String> = bottomText.splitWords()

override suspend fun constantData(
firstFrame: ImageFrame,
imageSource: Flow<ImageFrame>,
Expand All @@ -62,12 +58,12 @@ private class MemeProcessor(
val bottomParagraphY = firstImage.height - textHeight - padding

val topParagraph = ParagraphCompositeDrawable.Builder(nonTextParts)
.addWords(topText) {
.addText(topText) {
createText(it)
}
.build(TextAlignment.CENTRE, textWidth)
val bottomParagraph = ParagraphCompositeDrawable.Builder(nonTextParts)
.addWords(bottomText) {
.addText(bottomText) {
createText(it)
}
.build(TextAlignment.CENTRE, textWidth)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import io.github.shaksternano.borgar.core.media.reader.ImageReader
import io.github.shaksternano.borgar.core.media.reader.ZippedImageReader
import io.github.shaksternano.borgar.core.media.reader.transform
import io.github.shaksternano.borgar.core.media.template.Template
import io.github.shaksternano.borgar.core.util.splitWords
import kotlinx.coroutines.flow.Flow
import java.awt.Color
import java.awt.Shape
Expand Down Expand Up @@ -141,19 +140,17 @@ private class ImageContentData(
)

private class TemplateTextContentProcessor(
text: String,
private val text: String,
private val nonTextParts: Map<String, Drawable>,
private val template: Template,
) : ImageProcessor<TextDrawData> {

private val words: List<String> = text.splitWords()

override suspend fun constantData(
firstFrame: ImageFrame,
imageSource: Flow<ImageFrame>,
outputFormat: String,
): TextDrawData =
getTextDrawData(firstFrame.content, words, nonTextParts, template)
getTextDrawData(firstFrame.content, text, nonTextParts, template)

override suspend fun transformImage(frame: ImageFrame, constantData: TextDrawData): BufferedImage =
drawText(frame.content, constantData, frame.timestamp, template)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -420,12 +420,12 @@ data class TextDrawData(

fun getTextDrawData(
image: BufferedImage,
words: List<String>,
text: String,
nonTextParts: Map<String, Drawable>,
template: Template,
): TextDrawData {
val paragraph = ParagraphCompositeDrawable.Builder(nonTextParts)
.addWords(words, template.customTextDrawableSupplier)
.addText(text, template.customTextDrawableSupplier)
.build(template.textContentAlignment, template.textContentWidth)

val graphics = image.createGraphics()
Expand Down

0 comments on commit 7c572bf

Please sign in to comment.