@@ -36,25 +36,25 @@ object TextLayout:
3636 chars : List [RenderOp .DrawChar ],
3737 areaWidth : Int ,
3838 alignment : HorizontalAlignment
39- ): List [RenderOp .DrawChar ] =
40- if (chars.isEmpty) chars
39+ ): Iterator [RenderOp .DrawChar ] =
40+ if (chars.isEmpty) Iterator .empty
4141 else
4242 val minX = chars.foldLeft(Int .MaxValue )((acc, c) => math.min(acc, c.area.x))
4343 val maxX = chars.foldLeft(0 )((acc, c) => math.max(acc, c.area.x + c.area.w))
4444 val deltaX = alignment.ordinal * (areaWidth - (maxX - minX)) / 2
45- chars.map(c => c.copy(area = c.area.copy(x = c.area.x + deltaX)))
45+ chars.iterator. map(c => c.copy(area = c.area.copy(x = c.area.x + deltaX)))
4646
4747 private def alignV (
4848 chars : List [RenderOp .DrawChar ],
4949 areaHeight : Int ,
5050 alignment : VerticalAlignment
51- ): List [RenderOp .DrawChar ] =
52- if (chars.isEmpty) chars
51+ ): Iterator [RenderOp .DrawChar ] =
52+ if (chars.isEmpty) Iterator .empty
5353 else
5454 val minY = chars.foldLeft(Int .MaxValue )((acc, c) => math.min(acc, c.area.y))
5555 val maxY = chars.foldLeft(0 )((acc, c) => math.max(acc, c.area.y + c.area.h))
5656 val deltaY = alignment.ordinal * (areaHeight - (maxY - minY)) / 2
57- chars.map(c => c.copy(area = c.area.copy(y = c.area.y + deltaY)))
57+ chars.iterator. map(c => c.copy(area = c.area.copy(y = c.area.y + deltaY)))
5858
5959 private [interim] def asDrawChars (
6060 textOp : RenderOp .DrawText
@@ -63,12 +63,12 @@ object TextLayout:
6363 def layout (
6464 remaining : String ,
6565 dy : Int ,
66- textAcc : List [RenderOp .DrawChar ]
67- ): List [RenderOp .DrawChar ] =
66+ textAcc : List [Iterator [ RenderOp .DrawChar ] ]
67+ ): Iterator [RenderOp .DrawChar ] =
6868 remaining match
6969 case " " =>
7070 alignV(
71- textAcc,
71+ textAcc.flatten ,
7272 textOp.textArea.h,
7373 textOp.verticalAlignment
7474 )
@@ -91,9 +91,9 @@ object TextLayout:
9191 layout(
9292 nextLine,
9393 dy + textOp.font.lineHeight,
94- alignH(ops.toList, textOp.textArea.w, textOp.horizontalAlignment) ++ textAcc
94+ alignH(ops.toList, textOp.textArea.w, textOp.horizontalAlignment) :: textAcc
9595 )
96- layout(textOp.text, 0 , Nil ).filter(char => (char.area & textOp.area) == char.area)
96+ layout(textOp.text, 0 , Nil ).filter(char => (char.area & textOp.area) == char.area).toList
9797
9898 /** Computes the area that some text will occupy
9999 *
0 commit comments