- deselect_all = (args) ->
- except = args?.except ? null
- for id, w of selected
- w.set_style STYLE_NORMAL
- delete selected[id]
- closest_widget = (widgets, xy) ->
- prox = PROX_MAX + 1
+ stop_editing = ->
+ if widget_layer.editing
+ widget_layer.editing.kill_controls()
+ widget_layer.editing = null
+ deselect = (layer, s) ->
+ return unless layer.selected[s.id]?
+ s.set_state STATES.NORMAL
+ delete layer.selected[s.id]
+ if widget_layer.editing is s
+ widget_layer.editing = null
+ return
+ deselect_all = (layer, except = null) ->
+ for id, s of layer.selected
+ deselect layer, s
+ return
+ _select = (layer, s) -> # don't call this directly, use select_only() or select_also()
+ s.set_state STATES.SELECTED
+ layer.selected[s.id] = s
+ return
+ select_only = (layer, s) ->
+ deselect_all layer, s
+ return if layer.selected[s.id]?
+ _select layer, s
+ return
+ select_also = (layer, s) ->
+ return if layer.selected[s.id]?
+ if layer is widget_layer
+ stop_editing()
+ _select layer, s
+ return
+ find_closest = (widgets, xy) ->
+ prox = PROX_TOO_FAR