LineBreakMeasurer的性能优化

时间:2017-12-27 06:32:21

标签: java text kotlin awt

我目前正在编写一个在OpenGL中使用语法高亮显示的文本块,并使用换行符正确布局我的行我使用AWT LineBreakMeasurer。视觉效果非常完美,性能还可以,但是我想知道是否有可能让它更快一些。目前,一行文本的布局平均需要2-3毫秒。

所以这是当前用于进行布局的代码

private fun calculateLineLayout(line: AttributedString, graphics: Graphics2D, width: Int, layouts: ArrayList<TextLayout>): Float {
    val iterator = line.iterator
    if(iterator.beginIndex >= iterator.endIndex) {
        return 0.0f
    }

    val end = iterator.endIndex
    val measurer = LineBreakMeasurer(iterator, graphics.fontRenderContext)
    measurer.position = iterator.beginIndex

    var sizeY = 0.0f
    while(measurer.position < end) {
        val layout = measurer.nextLayout(width.toFloat())
        layouts.add(layout)
        sizeY += layout.ascent + layout.descent + layout.leading
    }

    return sizeY
}

我的问题是

  • AWT的LineBreakMeasurer是否有更高效的替代方案?
  • 事实上是否存在优化潜力,字体将始终是等宽的,因此一行中的字符数已经可以从宽度中扣除?

0 个答案:

没有答案