mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-20 07:28:08 +03:00
Merge pull request #5951 from atom/as-visible-row-range
Adjust `DisplayBuffer#getVisibleRowRange` logic
This commit is contained in:
commit
7d77e90e45
@ -1247,3 +1247,28 @@ describe "DisplayBuffer", ->
|
||||
|
||||
expect(displayBuffer.getScrollWidth()).toBe 10 * 63 + operatorWidth * 2 + cursorWidth
|
||||
expect(changedSpy.callCount).toBe 1
|
||||
|
||||
describe "::getVisibleRowRange()", ->
|
||||
beforeEach ->
|
||||
displayBuffer.setLineHeightInPixels(10)
|
||||
displayBuffer.setHeight(100)
|
||||
|
||||
it "returns the first and the last visible rows", ->
|
||||
displayBuffer.setScrollTop(0)
|
||||
|
||||
expect(displayBuffer.getVisibleRowRange()).toEqual [0, 9]
|
||||
|
||||
it "includes partially visible rows in the range", ->
|
||||
displayBuffer.setScrollTop(5)
|
||||
|
||||
expect(displayBuffer.getVisibleRowRange()).toEqual [0, 10]
|
||||
|
||||
it "returns an empty range when lineHeight is 0", ->
|
||||
displayBuffer.setLineHeightInPixels(0)
|
||||
|
||||
expect(displayBuffer.getVisibleRowRange()).toEqual [0, 0]
|
||||
|
||||
it "ends at last buffer row even if there's more space available", ->
|
||||
displayBuffer.setScrollTop(60)
|
||||
|
||||
expect(displayBuffer.getVisibleRowRange()).toEqual [6, 13]
|
||||
|
@ -348,12 +348,13 @@ class DisplayBuffer extends Model
|
||||
getScrollWidth: ->
|
||||
@scrollWidth
|
||||
|
||||
# Returns an {Array} of two numbers representing the first and the last visible rows.
|
||||
getVisibleRowRange: ->
|
||||
return [0, 0] unless @getLineHeightInPixels() > 0
|
||||
|
||||
heightInLines = Math.ceil(@getHeight() / @getLineHeightInPixels()) + 1
|
||||
startRow = Math.floor(@getScrollTop() / @getLineHeightInPixels())
|
||||
endRow = Math.min(@getLineCount(), startRow + heightInLines)
|
||||
endRow = Math.ceil((@getScrollTop() + @getHeight()) / @getLineHeightInPixels()) - 1
|
||||
endRow = Math.min(@getLineCount(), endRow)
|
||||
|
||||
[startRow, endRow]
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user