         preprocess: (v, oldValue) -> if v instanceof PointLayoutBase then v else new PointLayout v, oldValue
         postSetter: -> @_locationLayoutDisabled = false
 
+      scale:
+        default: 1
+        preprocess: (s) -> point s
+        postSetter: -> @_locationLayoutDisabled = false
+
+      angle:
+        default: 0
+        postSetter: -> @_locationLayoutDisabled = false
+
       childrenLayout:         default: null,                  validate:   (v) -> v == null || v == "flow" || v == "column" || v == "row"
       childrenGrid:           default: null,                  validate:   (v) -> v == null || isString(v) && v.match /^[ a-zA-Z]+$/
       childrenAlignment:      default: point0,                preprocess: (v) -> point v


    _setLocationFromLayoutXY: (x, y) ->
      return if @_locationLayoutDisabled
      e2p = @getPendingElementToParentMatrix()
      {tx, ty} = e2p

      newTx = tx + x - @getPendingCurrentLocationX()
      newTy = ty + y - @getPendingCurrentLocationY()
      # log _setLocationFromLayout:
      #   pendingCurrentLocation: @pendingCurrentLocation
      #   x:x
      #   y:y
      #   tx:tx
      #   ty:ty
      #   newTx: newTx
      #   newTy: newTy

      if tx != newTx || ty != newTy
        @_pendingState._elementToParentMatrix = e2p.withLocationXY newTx, newTy
        @_elementChanged()
      @

    _sizeDirectlyEffectsDrawing: ->

      key:
        setter: (v) -> @setName v
        getter: (o) -> o._name

      invisible:
        getter: (o) -> !o._visible
