Decouple all the things

openid
Marcin Kulik 12 years ago
parent 2a91337047
commit f092ad87d2

@ -1,10 +1,10 @@
class AsciiIo.Movie
MIN_DELAY: 0.01
constructor: (@model, @vt, @options) ->
constructor: (@model, @options) ->
_.extend(this, Backbone.Events)
@reset()
@startTimeReporter()
_.extend(this, Backbone.Events)
reset: ->
@frameNo = 0
@ -14,7 +14,7 @@ class AsciiIo.Movie
@lastFrameAt = undefined
@framesProcessed = 0
@clearPauseState()
@vt.reset()
@trigger 'reset'
now: ->
(new Date()).getTime()
@ -70,7 +70,7 @@ class AsciiIo.Movie
@startedAt = @now()
@playing = true
@trigger('movie-started')
@trigger('started')
@lastFrameAt = @now()
@nextFrame()
@ -97,7 +97,7 @@ class AsciiIo.Movie
return if @isPaused()
@stop()
@trigger('movie-playback-paused')
@trigger('playback-paused')
resume: ->
return if @isPlaying()
@ -109,7 +109,7 @@ class AsciiIo.Movie
delayMs = delay * 1000
delayLeft = delayMs - @totalFrameWaitTime
@processFrameWithDelay(delayLeft)
@trigger('movie-playback-resumed')
@trigger('playback-resumed')
togglePlay: ->
if @isPlaying() then @pause() else @play()
@ -153,8 +153,8 @@ class AsciiIo.Movie
@dataIndex = totalCount
data = @data().slice(0, totalCount)
@vt.reset()
@vt.feed(data)
@trigger 'reset'
@trigger 'data', [data]
@lastFrameAt = @now()
wait = requestedTime - time
@ -162,7 +162,7 @@ class AsciiIo.Movie
startTimeReporter: ->
@timeReportId = setInterval(
=> @trigger('movie-time', @currentTime())
=> @trigger('time', @currentTime())
100
)
@ -221,8 +221,7 @@ class AsciiIo.Movie
true
else
@playing = false
@trigger('movie-finished')
@vt.stopCursorBlink()
@trigger 'finished'
if @options.benchmark
console.log "finished in #{(@now() - @startedAt) / 1000.0}s"
@ -232,7 +231,7 @@ class AsciiIo.Movie
processFrameWithDelay: (delay) ->
@nextFrameTimeoutId = setTimeout(
=>
@vt.restartCursorBlink()
@trigger 'wakeup'
@processFrame()
delay
)
@ -242,7 +241,7 @@ class AsciiIo.Movie
[delay, count] = frame
frameData = @data().slice(@dataIndex, @dataIndex + count)
@vt.feed(frameData)
@trigger 'data', [frameData]
@frameNo += 1
@dataIndex += count

@ -13,9 +13,9 @@ class AsciiIo.PlayerView extends Backbone.View
@$el.addClass('not-started')
createRendererView: ->
@rendererView = new this.options.rendererClass(
cols: this.options.cols
lines: this.options.lines
@rendererView = new @options.rendererClass(
cols: @options.cols
lines: @options.lines
)
@$el.append(@rendererView.$el)
@ -23,17 +23,18 @@ class AsciiIo.PlayerView extends Backbone.View
@rendererView.renderSnapshot @options.snapshot
createHudView: ->
@hudView = new AsciiIo.HudView(cols: this.options.cols)
@hudView = new AsciiIo.HudView(cols: @options.cols)
@$el.append(@hudView.$el)
createMovie: ->
vt = new AsciiIo.VT(this.options.cols, this.options.lines, @rendererView)
@vt = new AsciiIo.VT(@options.cols, @options.lines)
@movie = new AsciiIo.Movie(
@model,
vt,
speed: this.options.speed,
benchmark: this.options.benchmark
speed: @options.speed,
benchmark: @options.benchmark
cols: @options.cols
lines: @options.lines
)
@movie.on 'movie-loaded', @onMovieLoaded, this
@movie.load()
@ -54,23 +55,26 @@ class AsciiIo.PlayerView extends Backbone.View
@showToggleOverlay()
bindEvents: ->
@hudView.on 'hud-play-click', =>
@movie.togglePlay()
@hudView.on 'hud-seek-click', (percent) =>
@movie.seek(percent)
@movie.on 'movie-playback-paused', =>
@hudView.onPause()
@movie.on 'movie-playback-resumed', =>
@hudView.onResume()
@movie.on 'movie-time', (time) =>
@hudView.updateTime(time)
@movie.on 'movie-started', =>
@$el.removeClass('not-started')
@movie.on 'reset', => @vt.reset()
@movie.on 'finished', => @vt.stopCursorBlink()
@movie.on 'wakeup', => @vt.restartCursorBlink()
@movie.on 'playback-paused', => @hudView.onPause()
@movie.on 'playback-resumed', => @hudView.onResume()
@movie.on 'time', (time) => @hudView.updateTime(time)
@movie.on 'started', => @$el.removeClass('not-started')
@movie.on 'data', (data) =>
@vt.feed data
@rendererView.render @vt.state()
@vt.clearChanges()
@vt.on 'cursor:blink:restart', => @rendererView.restartCursorBlink()
@vt.on 'cursor:blink:stop', => @rendererView.stopCursorBlink()
@vt.on 'cursor:show', => @rendererView.showCursor true
@vt.on 'cursor:hide', => @rendererView.showCursor false
@hudView.on 'hud-play-click', => @movie.togglePlay()
@hudView.on 'hud-seek-click', (percent) => @movie.seek(percent)
showLoadingIndicator: ->
@$el.append('<div class="loading">')

@ -11,9 +11,9 @@ class AsciiIo.Renderer.Base extends Backbone.View
onClick: ->
@trigger('terminal-click')
render: (changes, cursorX, cursorY) ->
for n, fragments of changes
c = if parseInt(n) is cursorY then cursorX else undefined
render: (state) ->
for n, fragments of state.changes
c = if parseInt(n) is state.cursorY then state.cursorX else undefined
@renderLine n, fragments || [], c
renderLine: (n, data, cursorX) ->

@ -23,9 +23,9 @@ class AsciiIo.Renderer.Pre extends AsciiIo.Renderer.Base
@$el.css(width: width + 'px', height: height + 'px')
render: (changes, cursorX, cursorY) ->
render: (state) ->
@$el.find('.cursor').removeClass('cursor')
super(changes, cursorX, cursorY)
super state
renderLine: (n, fragments, cursorX) ->
html = []

@ -1,6 +1,7 @@
class AsciiIo.VT
constructor: (@cols, @lines, @view) ->
constructor: (@cols, @lines) ->
_.extend(this, Backbone.Events)
@sgrInterpreter = new AsciiIo.SgrInterpreter()
@reset()
@ -255,14 +256,13 @@ class AsciiIo.VT
@buffer.setBrush @sgrInterpreter.buildBrush(@buffer.getBrush(), numbers)
bell: ->
@view.visualBell()
# @trigger('bell')
@trigger 'bell'
restartCursorBlink: ->
@view.restartCursorBlink()
@trigger 'cursor:blink:restart'
stopCursorBlink: ->
@view.stopCursorBlink()
@trigger 'cursor:blink:stop'
feed: (data) ->
@data += data
@ -276,8 +276,6 @@ class AsciiIo.VT
@data = @data.slice(processed)
@render()
@data.length is 0
formattedData: (data) ->
@ -285,8 +283,12 @@ class AsciiIo.VT
hex = ("0x#{c.charCodeAt(0).toString(16)}" for c in head)
Utf8.decode(head) + " (" + hex.join() + ")"
render: ->
@view.render(@buffer.changes(), @buffer.cursorX, @buffer.cursorY)
state: ->
changes: @buffer.changes()
cursorX: @buffer.cursorX
cursorY: @buffer.cursorY
clearChanges: ->
@buffer.clearChanges()
# ==== Screen buffer operations
@ -318,10 +320,10 @@ class AsciiIo.VT
# ------ Cursor control
showCursor: ->
@view.showCursor true
@trigger 'cursor:show'
hideCursor: ->
@view.showCursor false
@trigger 'cursor:hide'
# ----- Scroll control

Loading…
Cancel
Save