Delay creating range and node iterator until we actually need to measure

This commit is contained in:
Nathan Sobo
2014-04-16 14:51:39 -06:00
parent 6607f99c6c
commit 216d561c79

View File

@@ -64,14 +64,21 @@ LinesComponent = React.createClass
measureCharactersInLine: (tokenizedLine, lineNode) ->
{editor} = @props
iterator = document.createNodeIterator(lineNode, NodeFilter.SHOW_TEXT, AcceptFilter)
rangeForMeasurement = document.createRange()
rangeForMeasurement = null
iterator = null
iteratorIndex = -1
for {value, scopes} in tokenizedLine.tokens
textNode = iterator.nextNode()
for {value, scopes}, tokenIndex in tokenizedLine.tokens
charWidths = editor.getScopedCharWidths(scopes)
for char, i in value
unless charWidths[char]?
rangeForMeasurement ?= document.createRange()
iterator ?= document.createNodeIterator(lineNode, NodeFilter.SHOW_TEXT, AcceptFilter)
while iteratorIndex < tokenIndex
textNode = iterator.nextNode()
iteratorIndex++
rangeForMeasurement.setStart(textNode, i)
rangeForMeasurement.setEnd(textNode, i + 1)
charWidth = rangeForMeasurement.getBoundingClientRect().width