mirror of
https://github.com/atom/atom.git
synced 2026-02-10 14:45:11 -05:00
Renderer indicates when a screen line starts a foldable region
This commit is contained in:
6
src/app/ace-fold-adaptor.coffee
Normal file
6
src/app/ace-fold-adaptor.coffee
Normal file
@@ -0,0 +1,6 @@
|
||||
module.exports =
|
||||
class AceFoldAdaptor
|
||||
constructor: (@buffer) ->
|
||||
|
||||
getLine: (bufferRow) ->
|
||||
@buffer.lineForRow(bufferRow)
|
||||
10
src/app/fold-suggester.coffee
Normal file
10
src/app/fold-suggester.coffee
Normal file
@@ -0,0 +1,10 @@
|
||||
AceFoldAdaptor = require 'ace-fold-adaptor'
|
||||
|
||||
module.exports =
|
||||
class FoldSuggester
|
||||
constructor: (@buffer) ->
|
||||
@aceFoldMode = @buffer.getMode().foldingRules
|
||||
@aceFoldAdaptor = new AceFoldAdaptor(@buffer)
|
||||
|
||||
isBufferRowFoldable: (bufferRow) ->
|
||||
@aceFoldMode.getFoldWidget(@aceFoldAdaptor, null, bufferRow) == "start"
|
||||
@@ -1,5 +1,6 @@
|
||||
_ = require 'underscore'
|
||||
Highlighter = require 'highlighter'
|
||||
FoldSuggester = require 'fold-suggester'
|
||||
LineMap = require 'line-map'
|
||||
Point = require 'point'
|
||||
EventEmitter = require 'event-emitter'
|
||||
@@ -22,6 +23,7 @@ class Renderer
|
||||
constructor: (@buffer, options={}) ->
|
||||
@id = @constructor.idCounter++
|
||||
@highlighter = new Highlighter(@buffer, options.tabText ? ' ')
|
||||
@foldSuggester = new FoldSuggester(@buffer)
|
||||
@maxLineLength = options.maxLineLength ? Infinity
|
||||
@activeFolds = {}
|
||||
@foldsById = {}
|
||||
@@ -161,6 +163,7 @@ class Renderer
|
||||
startBufferColumn = 0
|
||||
while currentBufferRow <= endBufferRow
|
||||
screenLine = @highlighter.lineForRow(currentBufferRow)
|
||||
screenLine.foldable = @foldSuggester.isBufferRowFoldable(currentBufferRow)
|
||||
|
||||
if fold = @largestFoldForBufferRow(currentBufferRow)
|
||||
screenLine = screenLine.copy()
|
||||
|
||||
@@ -8,6 +8,7 @@ class ScreenLineFragment
|
||||
tokens: null
|
||||
screenDelta: null
|
||||
bufferDelta: null
|
||||
foldable: null
|
||||
|
||||
constructor: (@tokens, @text, screenDelta, bufferDelta, extraFields) ->
|
||||
@screenDelta = Point.fromObject(screenDelta)
|
||||
@@ -15,7 +16,7 @@ class ScreenLineFragment
|
||||
_.extend(this, extraFields)
|
||||
|
||||
copy: ->
|
||||
new ScreenLineFragment(@tokens, @text, @screenDelta, @bufferDelta, { @state })
|
||||
new ScreenLineFragment(@tokens, @text, @screenDelta, @bufferDelta, { @state, @foldable })
|
||||
|
||||
splitAt: (column) ->
|
||||
return [new ScreenLineFragment([], '', [0, 0], [0, 0]), this] if column == 0
|
||||
@@ -36,7 +37,7 @@ class ScreenLineFragment
|
||||
[leftScreenDelta, rightScreenDelta] = @screenDelta.splitAt(column)
|
||||
[leftBufferDelta, rightBufferDelta] = @bufferDelta.splitAt(column)
|
||||
|
||||
leftFragment = new ScreenLineFragment(leftTokens, leftText, leftScreenDelta, leftBufferDelta, {@state})
|
||||
leftFragment = new ScreenLineFragment(leftTokens, leftText, leftScreenDelta, leftBufferDelta, {@state, @foldable})
|
||||
rightFragment = new ScreenLineFragment(rightTokens, rightText, rightScreenDelta, rightBufferDelta, {@state})
|
||||
[leftFragment, rightFragment]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user