2014-01-03 10:32:13 -08:00
module.exports = class CoordinateDisplay extends createjs . Container
layerPriority: - 10
subscriptions:
' surface:mouse-moved ' : ' onMouseMove '
' surface:mouse-out ' : ' onMouseOut '
' surface:mouse-over ' : ' onMouseOver '
2014-03-13 01:50:59 +01:00
' surface:stage-mouse-down ' : ' onMouseDown '
2014-01-03 10:32:13 -08:00
' camera:zoom-updated ' : ' onZoomUpdated '
constructor: (options) ->
super ( )
@ initialize ( )
@camera = options . camera
console . error " CoordinateDisplay needs camera. " unless @ camera
@ build ( )
2014-02-23 09:55:40 -08:00
@show = _ . debounce @ show , 125
2014-01-03 10:32:13 -08:00
Backbone . Mediator . subscribe ( channel , @ [ func ] , @ ) for channel , func of @ subscriptions
destroy: ->
Backbone . Mediator . unsubscribe ( channel , @ [ func ] , @ ) for channel , func of @ subscriptions
2014-02-22 16:58:54 -08:00
@show = null
@destroyed = true
2014-01-03 10:32:13 -08:00
build: ->
@mouseEnabled = @mouseChildren = false
2014-03-14 19:44:19 -07:00
@ addChild @label = new createjs . Text ( " " , " 40px Arial " , " # 003300 " )
2014-01-03 10:32:13 -08:00
@label.name = ' position text '
@label.shadow = new createjs . Shadow ( " # FFFFFF " , 1 , 1 , 0 )
onMouseOver: (e) -> @mouseInBounds = true
onMouseOut: (e) -> @mouseInBounds = false
onMouseMove: (e) ->
2014-03-13 02:50:09 +01:00
if @ mouseInBounds and key . shift
$ ( ' # surface ' ) . addClass ( ' flag-cursor ' ) unless $ ( ' # surface ' ) . hasClass ( ' flag-cursor ' )
else if @ mouseInBounds
$ ( ' # surface ' ) . removeClass ( ' flag-cursor ' ) if $ ( ' # surface ' ) . hasClass ( ' flag-cursor ' )
2014-01-03 10:32:13 -08:00
wop = @ camera . canvasToWorld x: e . x , y: e . y
wop.x = Math . round ( wop . x )
wop.y = Math . round ( wop . y )
return if wop . x is @ lastPos ? . x and wop . y is @ lastPos ? . y
@lastPos = wop
@ hide ( )
@ show ( ) # debounced
2014-03-13 01:50:59 +01:00
onMouseDown: (e) ->
return unless key . shift
wop = @ camera . canvasToWorld x: e . x , y: e . y
wop.x = Math . round wop . x
wop.y = Math . round wop . y
Backbone . Mediator . publish ' surface:coordinate-selected ' , wop
2014-01-03 10:32:13 -08:00
onZoomUpdated: (e) ->
@ hide ( )
@ show ( )
hide: ->
return unless @ label . parent
@ removeChild @ label
@ uncache ( )
show: =>
2014-02-22 16:58:54 -08:00
return unless @ mouseInBounds and @ lastPos and not @ destroyed
2014-01-03 10:32:13 -08:00
@label.text = " ( #{ @ lastPos . x } , #{ @ lastPos . y } ) "
[ width , height ] = [ @ label . getMeasuredWidth ( ) , @ label . getMeasuredHeight ( ) ]
@label.regX = width / 2
@label.regY = height / 2
sup = @ camera . worldToSurface @ lastPos
@x = sup . x
2014-02-25 12:38:47 -08:00
@y = sup . y - 7
2014-01-03 10:32:13 -08:00
@ addChild @ label
@ cache - width / 2 , - height / 2 , width , height
Backbone . Mediator . publish ' surface:coordinates-shown ' , { }