Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 79 lines (57 sloc) 1.836 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
class CoordTitle extends Spine.Controller
  className: 'coordTitle'

  change: (area) ->
    @html("x: #{area.left}px   y: #{area.top}px")

  move: (position) ->
    @el.css(left: position.left, top: position.top)

class Dragging extends Spine.Controller
  events:
    'mousedown .selected': 'listen'

  constructor: (@stage) ->
    super(el: @stage.el)

  listen: (e) =>
    e.preventDefault()

    # Copy elements when alt dragging
    if e.altKey
      clones = @stage.cloneSelected()
      @stage.selection.refresh(clones)

    @stage.history.record()

    @dragPosition = {left: e.pageX, top: e.pageY}
    @active = false

    $(document).mousemove(@drag)
    $(document).mouseup(@drop)

  drag: (e) =>
    if @active is false
      @trigger('start.dragging')

    @active = true

    difference =
      left: e.pageX - @dragPosition.left
      top: e.pageY - @dragPosition.top

    @dragPosition = {left: e.pageX, top: e.pageY}
    @stageArea = @stage.area()
    @selectionArea = @stage.selection.area()

    if e.altKey or e.metaKey
      @stage.snapping.release()
    else
      # Check vertical/center stage snapping
      difference = @stage.snapping.snap(@selectionArea, difference)

    # Setup CoordTitle
    @moveCoordTitle(e)

    @stage.selection.moveBy(difference)
    @el.trigger('move.dragging')

  drop: (e) =>
    $(document).unbind('mousemove', @drag)
    $(document).unbind('mouseup', @drop)
    @el.trigger('end.dragging') if @active

    # Reset coordTitle
    @coordTitle?.release()
    @coordTitle = null

  moveCoordTitle: ->
    unless @coordTitle
      @append(@coordTitle = new CoordTitle)

    @coordTitle.move(
      left: @dragPosition.left - @stageArea.left + 10,
      top: @dragPosition.top - @stageArea.top + 10
    )

    @coordTitle.change(@selectionArea)

module.exports = Dragging
Something went wrong with that request. Please try again.