Changeset - 3bb58b74c9c1
[Not reviewed]
default
0 2 0
Drew Perttula - 8 years ago 2017-04-12 06:04:18
drewp@bigasterisk.com
timeline: add cache of floats between graph updates for smoother redraws
Ignore-this: dbdc4782855087f4ec12f1d24d440484
2 files changed with 16 insertions and 3 deletions:
0 comments (0 inline, 0 general)
light9/web/graph.coffee
Show inline comments
 
@@ -133,12 +133,13 @@ class window.SyncedGraph
 
    if @graph?
 
      @_applyPatch({addQuads: [], delQuads: @graph.find()})
 

	
 
    # if we had a Store already, this lets N3.Store free all its indices/etc
 
    @graph = N3.Store()
 
    @_addPrefixes(@prefixes)
 
    @cachedFloatValues = new Map();
 
    
 
      
 
  _addPrefixes: (prefixes) ->
 
    @graph.addPrefixes(prefixes)
 
        
 
  Uri: (curie) ->
 
@@ -176,12 +177,13 @@ class window.SyncedGraph
 
    @_client.sendPatch(patch) if @_client
 

	
 
  _applyPatch: (patch) ->
 
    # In most cases you want applyAndSendPatch.
 
    # 
 
    # This is the only method that writes to @graph!
 
    @cachedFloatValues.clear()
 
    for quad in patch.delQuads
 
      @graph.removeTriple(quad)
 
    for quad in patch.addQuads
 
      @graph.addTriple(quad)
 
    #log('applied patch locally', patchSizeSummary(patch))
 
    @_watchers.graphChanged(patch)
 
@@ -230,13 +232,19 @@ class window.SyncedGraph
 
        obj = quads[0].object
 
        return obj
 
      else
 
        throw new Error("too many values: " + JSON.stringify(quads))
 

	
 
  floatValue: (s, p) ->
 
    parseFloat(N3.Util.getLiteralValue(@_singleValue(s, p)))
 
    key = s + '|' + p
 
    hit = @cachedFloatValues.get(key)
 
    return hit if hit != undefined
 

	
 
    ret = parseFloat(N3.Util.getLiteralValue(@_singleValue(s, p)))
 
    @cachedFloatValues.set(key, ret)
 
    return ret
 
    
 
  stringValue: (s, p) ->
 
    N3.Util.getLiteralValue(@_singleValue(s, p))
 
    
 
  uriValue: (s, p) ->
 
    @_singleValue(s, p)
light9/web/timeline/timeline.coffee
Show inline comments
 
@@ -430,13 +430,18 @@ Polymer
 
      # as autodep still fires all handlers on all patches, we just
 
      # need any single dep to cause another callback. (without this,
 
      # we would no longer be registered at all)
 
      @graph.subjects(@uri, @uri, @uri)
 
      return
 
    if @isDetached?
 
      return 
 
      return
 
 
 
    @updateDisplay()
 

	
 
  updateDisplay: ->
 
      
 
    # update our note DOM and SVG elements based on the graph
 
    U = (x) -> @graph.Uri(x)
 

	
 
    yForV = (v) => @offsetTop + (1 - v) * @offsetHeight
 

	
 
    originTime = @graph.floatValue(@uri, U(':originTime'))
 
@@ -556,12 +561,13 @@ Polymer
 
        quad(setting, U(':value'), settingValue)
 
        ]}
 
      @graph.applyAndSendPatch(patch)
 
    
 
  addHandler: ->
 
    @graph.runHandler(@update.bind(@))
 
    
 
  update: ->
 
    U = (x) -> @graph.Uri(x)
 
    @effect = @graph.uriValue(@uri, U(':effectClass'))
 
    @effectLabel = @effect.replace(/.*\//, '')
 
    @noteLabel = @uri.replace(/.*\//, '')
 

	
 
@@ -732,13 +738,12 @@ Polymer
 
      @ctx.strokeStyle = '#ff0303'
 
      @ctx.lineWidth = 3
 
      @ctx.beginPath()
 
      _line(@ctx, @cursorPath.bot0, @cursorPath.bot1, '#ff0303', '3px')
 
      @ctx.stroke()
 
    
 
    
 
Polymer
 
  is: 'light9-adjusters-canvas'
 
  behaviors: [ Polymer.IronResizableBehavior ]
 
  properties:
 
    adjs: { type: Object, notify: true }, # adjId: Adjustable
 
  listeners: 'iron-resize': 'update'
0 comments (0 inline, 0 general)