mirror of
https://github.com/atom/atom.git
synced 2026-01-29 00:38:11 -05:00
Render the longest screen row without painting it
This commit is contained in:
@@ -219,6 +219,54 @@ describe "TextEditorComponent", ->
|
||||
expectTileContainsRow(tilesNodes[2], 7, top: 1 * lineHeightInPixels)
|
||||
expectTileContainsRow(tilesNodes[2], 8, top: 2 * lineHeightInPixels)
|
||||
|
||||
fffit "renders the longest screen row even when it's not visible", ->
|
||||
wrapperNode.style.height = 2 * lineHeightInPixels + 'px'
|
||||
component.measureDimensions()
|
||||
nextAnimationFrame()
|
||||
|
||||
tileNodes = component.tileNodesForLines()
|
||||
expect(tileNodes.length).toBe(3)
|
||||
|
||||
expect(getComputedStyle(tileNodes[0]).visibility).toBe("visible")
|
||||
expect(tileNodes[0].querySelectorAll(".line").length).toBe(3)
|
||||
|
||||
expect(getComputedStyle(tileNodes[1]).visibility).toBe("visible")
|
||||
expect(tileNodes[1].querySelectorAll(".line").length).toBe(3)
|
||||
|
||||
# tile with the longest screen row
|
||||
expect(getComputedStyle(tileNodes[2]).visibility).toBe("hidden")
|
||||
expect(tileNodes[2].querySelectorAll(".line").length).toBe(1)
|
||||
|
||||
verticalScrollbarNode.scrollTop = 4 * lineHeightInPixels
|
||||
verticalScrollbarNode.dispatchEvent(new UIEvent('scroll'))
|
||||
nextAnimationFrame()
|
||||
|
||||
tileNodes = component.tileNodesForLines()
|
||||
expect(tileNodes.length).toBe(2) # don't render an extra tile if the longest screen row is already visible
|
||||
|
||||
expect(getComputedStyle(tileNodes[0]).visibility).toBe("visible")
|
||||
expect(tileNodes[0].querySelectorAll(".line").length).toBe(3)
|
||||
|
||||
expect(getComputedStyle(tileNodes[1]).visibility).toBe("visible")
|
||||
expect(tileNodes[1].querySelectorAll(".line").length).toBe(3)
|
||||
|
||||
verticalScrollbarNode.scrollTop = 0 * lineHeightInPixels
|
||||
verticalScrollbarNode.dispatchEvent(new UIEvent('scroll'))
|
||||
nextAnimationFrame()
|
||||
|
||||
tileNodes = component.tileNodesForLines()
|
||||
expect(tileNodes.length).toBe(3)
|
||||
|
||||
expect(getComputedStyle(tileNodes[0]).visibility).toBe("visible")
|
||||
expect(tileNodes[0].querySelectorAll(".line").length).toBe(3)
|
||||
|
||||
expect(getComputedStyle(tileNodes[1]).visibility).toBe("visible")
|
||||
expect(tileNodes[1].querySelectorAll(".line").length).toBe(3)
|
||||
|
||||
# tile with the longest screen row
|
||||
expect(getComputedStyle(tileNodes[2]).visibility).toBe("hidden")
|
||||
expect(tileNodes[2].querySelectorAll(".line").length).toBe(1)
|
||||
|
||||
it "updates the lines when lines are inserted or removed above the rendered row range", ->
|
||||
wrapperNode.style.height = 4.5 * lineHeightInPixels + 'px'
|
||||
component.measureDimensions()
|
||||
@@ -2986,7 +3034,7 @@ describe "TextEditorComponent", ->
|
||||
|
||||
atom.views.performDocumentPoll()
|
||||
nextAnimationFrame()
|
||||
expect(componentNode.querySelectorAll('.line')).toHaveLength(6)
|
||||
expect(componentNode.querySelectorAll('.line')).toHaveLength(7) # visible rows + the longest screen row
|
||||
|
||||
gutterWidth = componentNode.querySelector('.gutter').offsetWidth
|
||||
componentNode.style.width = gutterWidth + 14 * charWidth + editor.getVerticalScrollbarWidth() + 'px'
|
||||
|
||||
@@ -47,6 +47,10 @@ class LinesTileComponent
|
||||
@domNode.style.zIndex = @newTileState.zIndex
|
||||
@oldTileState.zIndex = @newTileState.zIndex
|
||||
|
||||
if @newTileState.visibility isnt @oldTileState.visibility
|
||||
@domNode.style.visibility = @newTileState.visibility
|
||||
@oldTileState.visibility = @newTileState.visibility
|
||||
|
||||
if @newTileState.display isnt @oldTileState.display
|
||||
@domNode.style.display = @newTileState.display
|
||||
@oldTileState.display = @newTileState.display
|
||||
|
||||
Reference in New Issue
Block a user