diff --git a/src/views/view.coffee b/src/views/view.coffee index b749d5a74..7b73f74a0 100644 --- a/src/views/view.coffee +++ b/src/views/view.coffee @@ -15,6 +15,7 @@ class View extends Frame constructor: (args) -> args ?= {} + @_offset = {x:0, y:0} # Keep a generic list of all current views View.Views.push @ @@ -38,6 +39,8 @@ class View extends Frame # Overridable creation hook @_postCreate?() + + if not args.superView @_insertElement() @@ -90,14 +93,18 @@ class View extends Frame contentFrame: -> # Get the total size of all subviews - frame = - x: utils.min _.pluck(@subViews, "minX") - y: utils.min _.pluck(@subViews, "minY") - frame.width = utils.max(_.pluck(@subViews, "maxX")) - frame.x - frame.height = utils.max(_.pluck(@subViews, "maxY")) - frame.y + minX = utils.min _.pluck @subViews, "minX" + maxX = utils.max _.pluck @subViews, "maxX" + minY = utils.min _.pluck @subViews, "minY" + maxY = utils.max _.pluck @subViews, "maxY" - frame + frame = + x: minX + y: minY + width: maxX - minX + height: maxY - minY + centerX: -> @midX = @superView.width / 2.0 if @superView centerY: -> @midY = @superView.height / 2.0 if @superView @@ -125,16 +132,23 @@ class View extends Frame @emit "change:frame" @define "x", - get: -> @_matrix.x - set: (value) -> @_setMatrixValue "x", value + get: -> + @_matrix.x - @_offset.x + set: (value) -> + @_setMatrixValue "x", value + @_offset.x + @emit "change:frame" @define "y", - get: -> @_matrix.y - set: (value) -> @_setMatrixValue "y", value + get: -> + @_matrix.y - @_offset.y + set: (value) -> + @_setMatrixValue "y", value + @_offset.y + @emit "change:frame" @define "z", get: -> @_matrix.z - set: (value) -> @_setMatrixValue "z", value + set: (value) -> + @_setMatrixValue "z", value ############################################################################# ## Scale @@ -253,9 +267,9 @@ class View extends Frame @define "superView", get: -> @_superView or null - set: (value) -> + set: (view) -> - return if value is @_superView + return if view is @_superView # Cancel previous pending insertions utils.domCompleteCancel @__insertElement @@ -264,18 +278,18 @@ class View extends Frame if @_superView @_superView._element.removeChild @_element @_superView._subViews = _.without @_superView._subViews, @ - @_superView.emit "change:subViews" + @_superView.emit "change:subViews", {added:[], removed:[@]} # Either insert the element to the new superview or into dom - if value - value._element.appendChild @_element - value._subViews.push @ - value.emit "change:subViews" + if view + view._element.appendChild @_element + view._subViews.push @ + view.emit "change:subViews", {added:[@], removed:[]} else @_insertElement() # Set the superview - @_superView = value + @_superView = view # Place this view on top of it's siblings @bringToFront() @@ -403,7 +417,8 @@ class View extends Frame document.body.appendChild @_element destroy: -> - @_element.parentNode.removeChild @_element + if @_element.parentNode + @_element.parentNode.removeChild @_element #############################################################################