mirror of
https://github.com/atom/atom.git
synced 2026-01-23 22:08:08 -05:00
Pause measurement on overflowchanged during updates
Content updates trigger overflowchanged, but we're mainly using it to detect when the editor component has been resized. Pausing measurement during content updates makes them faster.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
React = require 'react'
|
||||
{div} = require 'reactionary'
|
||||
{debounce} = require 'underscore-plus'
|
||||
|
||||
InputComponent = require './input-component'
|
||||
LinesComponent = require './lines-component'
|
||||
@@ -10,6 +11,10 @@ module.exports =
|
||||
EditorScrollViewComponent = React.createClass
|
||||
displayName: 'EditorScrollViewComponent'
|
||||
|
||||
measurementPaused: false
|
||||
measurementPending: false
|
||||
measurementRequested: false
|
||||
|
||||
render: ->
|
||||
{editor, fontSize, fontFamily, lineHeight, showIndentGuide, cursorBlinkPeriod, cursorBlinkResumeDelay} = @props
|
||||
{visibleRowRange, preservedScreenRow, pendingChanges, cursorsMoved, onInputFocused, onInputBlurred} = @props
|
||||
@@ -38,9 +43,34 @@ EditorScrollViewComponent = React.createClass
|
||||
SelectionsComponent({editor})
|
||||
|
||||
componentDidMount: ->
|
||||
@getDOMNode().addEventListener 'overflowchanged', @measureHeightAndWidth
|
||||
@getDOMNode().addEventListener 'overflowchanged', @requestMeasurement
|
||||
@measureHeightAndWidth()
|
||||
|
||||
componentDidUpdate: ->
|
||||
@pauseMeasurement()
|
||||
|
||||
requestMeasurement: ->
|
||||
if @measurementPaused
|
||||
@measurementRequested = true
|
||||
else unless @measurementPending
|
||||
@measurementPending = true
|
||||
requestAnimationFrame =>
|
||||
@measurementPending = false
|
||||
@measureHeightAndWidth()
|
||||
|
||||
pauseMeasurement: ->
|
||||
@measurementPaused = true
|
||||
@resumeOverflowChangedEventsAfterDelay ?= debounce(@resumeMeasurement, 500)
|
||||
@resumeOverflowChangedEventsAfterDelay()
|
||||
|
||||
resumeMeasurement: ->
|
||||
@measurementPaused = false
|
||||
if @measurementRequested
|
||||
@measurementRequested = false
|
||||
@requestMeasurement()
|
||||
|
||||
resumeMeasurementAfterDelay: null
|
||||
|
||||
onInput: (char, replaceLastCharacter) ->
|
||||
{editor} = @props
|
||||
|
||||
|
||||
Reference in New Issue
Block a user