Skip to content

Commit

Permalink
[orx-shapes] Add shapesFromText
Browse files Browse the repository at this point in the history
  • Loading branch information
edwinRNDR committed Oct 11, 2023
1 parent 307df63 commit 283fd93
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 1 deletion.
3 changes: 2 additions & 1 deletion orx-shapes/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,5 @@ kotlin {
}
}
}
}
}

29 changes: 29 additions & 0 deletions orx-shapes/src/commonMain/kotlin/text/TextShapes.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.openrndr.extra.shapes.text

import org.openrndr.draw.font.Face
import org.openrndr.math.Vector2
import org.openrndr.math.transforms.buildTransform
import org.openrndr.shape.Shape

fun shapesFromText(face: Face, text: String, size: Double, position: Vector2 = Vector2.ZERO): List<Shape> {
var cursor = position
return text.windowed(2, 1, partialWindows = true) {

if (it[0] == '\n') {
cursor = Vector2(position.x, cursor.y + face.lineSpace(size))
Shape.EMPTY
} else {

val glyph = face.glyphForCharacter(it.first())
val shape = glyph.shape(size).transform(buildTransform {
translate(cursor)
})
if (it.length == 2) {
cursor += Vector2(face.kernAdvance(size, it[0], it[1]), 0.0)
}
cursor += Vector2(glyph.advanceWidth(size), 0.0)
shape
}
}.filter { !it.empty }
}

31 changes: 31 additions & 0 deletions orx-shapes/src/jvmDemo/kotlin/DemoText01.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import org.openrndr.application
import org.openrndr.color.ColorRGBa
import org.openrndr.draw.font.loadFace
import org.openrndr.extra.shapes.bounds.bounds
import org.openrndr.extra.shapes.text.shapesFromText
import org.openrndr.math.Vector2
import java.io.File

fun main() {
application {

configure {
width = 720
height = 720
}
program {

val face =
loadFace("https://github.com/IBM/plex/raw/master/IBM-Plex-Mono/fonts/complete/otf/IBMPlexMono-Bold.otf")
val shapes = shapesFromText(face, "SUCH\nVECTOR\nSUCH\nTEXT", 150.0)

val bounds = shapes.bounds
extend {
drawer.clear(ColorRGBa.PINK)
drawer.translate(-bounds.corner)
drawer.translate((width - bounds.width) / 2.0, (height - bounds.height) / 2.0)
drawer.shapes(shapes)
}
}
}
}

0 comments on commit 283fd93

Please sign in to comment.