Changeset - 3ddd5b4964b3
[Not reviewed]
default
0 2 0
drewp@bigasterisk.com - 7 years ago 2018-05-31 00:47:07
drewp@bigasterisk.com
fix time adjs crossing each other. more simulation steps for adjs.
Ignore-this: 8a14c5c954ca1dd9dbc1180386fa875a
2 files changed with 26 insertions and 16 deletions:
0 comments (0 inline, 0 general)
light9/web/timeline/adjusters.coffee
Show inline comments
 
@@ -12,7 +12,7 @@ coffeeElementSetup(class AdjustersCanvas
 
  ]
 
  constructor: ->
 
    super()
 
    @redraw = _.throttle(@_throttledRedraw.bind(@), 60, {leading: false})
 
    @redraw = _.throttle(@_throttledRedraw.bind(@), 30, {leading: false})
 
    @adjs = {}
 
    
 
  ready: ->
 
@@ -93,13 +93,13 @@ coffeeElementSetup(class AdjustersCanvas
 
    for adjId, adj of @adjs
 
      ctr = adj.getHandle()
 
      target = adj.getTarget()
 
      if target.e(1) < 0 or target.e(1) > @$.canvas.width or target.e(2) < 0 or target.e(2) > @$.canvas.height
 
      if @_isOffScreen(target)
 
        continue
 
      @_drawConnector(ctr, target)
 
      
 
      @_drawAdjuster(adj.getDisplayValue(),
 
                     Math.floor(ctr.e(1)) - 20, Math.floor(ctr.e(2)) - 10,
 
                     Math.floor(ctr.e(1)) + 20, Math.floor(ctr.e(2)) + 10)
 
                     ctr.e(1) - 20, ctr.e(2) - 10,
 
                     ctr.e(1) + 20, ctr.e(2) + 10)
 
    console.timeEnd('adjs redraw')
 

	
 
  _layoutCenters: ->
 
@@ -110,9 +110,10 @@ coffeeElementSetup(class AdjustersCanvas
 
    @qt.extent([[0,0], [8000,8000]])
 

	
 
    for _, adj of @adjs
 
      adj.handle = adj.getSuggestedHandle()
 
      
 
    for tries in [0...5]
 
      adj.handle = @_clampOnScreen(adj.getSuggestedHandle())
 

	
 
    numTries = 8
 
    for tries in [0...numTries]
 
      for _, adj of @adjs
 
        current = adj.handle
 
        @qt.remove(current)
 
@@ -120,12 +121,7 @@ coffeeElementSetup(class AdjustersCanvas
 
        if nearest
 
          dist = current.distanceFrom(nearest)
 
          if dist < maxDist
 
            away = current.subtract(nearest).toUnitVector()
 
            toScreenCenter = @canvasCenter.subtract(current).toUnitVector()
 
            current = current.add(away.x(20).add(toScreenCenter.x(2)))
 
            marg = 10
 
            current = $V([Math.max(marg, Math.min(@$.canvas.width - marg, current.e(1))),
 
                         Math.max(marg, Math.min(@$.canvas.height - marg, current.e(2)))])
 
            current = @_stepAway(current, nearest, 1 / numTries)
 
            adj.handle = current
 
        current.adj = adj
 
        @qt.add(current)
 
@@ -134,7 +130,21 @@ coffeeElementSetup(class AdjustersCanvas
 
      #  output.setElements([
 
      #    Math.max(20, output.e(1)),
 
      #    output.e(2)])
 
        
 

	
 
  _stepAway: (current, nearest, dx) ->
 
    away = current.subtract(nearest).toUnitVector()
 
    toScreenCenter = @canvasCenter.subtract(current).toUnitVector()
 
    goalSpacingPx = 20
 
    @_clampOnScreen(current.add(away.x(goalSpacingPx * dx)))
 

	
 
  _isOffScreen: (pos) ->
 
    pos.e(1) < 0 or pos.e(1) > @$.canvas.width or pos.e(2) < 0 or pos.e(2) > @$.canvas.height
 

	
 
  _clampOnScreen: (pos) ->    
 
    marg = 30
 
    $V([Math.max(marg, Math.min(@$.canvas.width - marg, pos.e(1))),
 
        Math.max(marg, Math.min(@$.canvas.height - marg, pos.e(2)))])
 
                        
 
  _drawConnector: (ctr, target) ->
 
    @ctx.strokeStyle = '#aaa'
 
    @ctx.lineWidth = 2
light9/web/timeline/timeline.coffee
Show inline comments
 
@@ -243,7 +243,7 @@ coffeeElementSetup(class TimelineEditor 
 
      observable: @viewState.zoomSpec.t1,
 
      getTarget: () =>
 
        $V([@viewState.fullZoomX(@viewState.zoomSpec.t1()), yMid()])
 
      getSuggestedTargetOffset: () => $V([50, 10])
 
      getSuggestedTargetOffset: () => $V([-50, 10])
 
      getValueForPos: valForPos
 
    }))
 

	
 
@@ -251,7 +251,7 @@ coffeeElementSetup(class TimelineEditor 
 
      observable: @viewState.zoomSpec.t2,
 
      getTarget: () =>
 
        $V([@viewState.fullZoomX(@viewState.zoomSpec.t2()), yMid()])
 
      getSuggestedTargetOffset: () => $V([-50, 10])
 
      getSuggestedTargetOffset: () => $V([50, 10])
 
      getValueForPos: valForPos
 
    }))
 

	
0 comments (0 inline, 0 general)