+resizer_nw = (widget) ->
+ return (dxy) ->
+ widget.resize w: widget.width - dxy.x, h: widget.height - dxy.y
+ widget.move x: widget.x + dxy.x, y: widget.y + dxy.y
+resizer_n = (widget) ->
+ return (dxy) ->
+ widget.resize w: widget.width, h: widget.height - dxy.y
+ widget.move x: widget.x, y: widget.y + dxy.y
+resizer_ne = (widget) ->
+ return (dxy) ->
+ widget.resize w: widget.width + dxy.x, h: widget.height - dxy.y
+ widget.move x: widget.x, y: widget.y + dxy.y
+resizer_e = (widget) ->
+ return (dxy) ->
+ widget.resize w: widget.width + dxy.x, h: widget.height
+resizer_se = (widget) ->
+ return (dxy) ->
+ widget.resize w: widget.width + dxy.x, h: widget.height + dxy.y
+resizer_s = (widget) ->
+ return (dxy) ->
+ widget.resize w: widget.width, h: widget.height + dxy.y
+resizer_sw = (widget) ->
+ return (dxy) ->
+ widget.resize w: widget.width - dxy.x, h: widget.height + dxy.y
+ widget.move x: widget.x + dxy.x, y: widget.y
+resizer_w = (widget) ->
+ return (dxy) ->
+ widget.resize w: widget.width - dxy.x, h: widget.height
+ widget.move x: widget.x + dxy.x, y: widget.y
+resizers = [
+ resizer_nw
+ resizer_n
+ resizer_ne
+ resizer_e
+ resizer_se
+ resizer_s
+ resizer_sw
+ resizer_w
+]
+resizer_shapes = [
+ (xy) -> return "M#{@x - 5} #{@y - 5}h6l-2 2 4 4 2 -2v6h-6l2-2-4-4-2 2z"
+ (xy) -> return "M #{@x},#{@y - 7} l 4,4 -2.5,0 0,5 2.5,0 -4,4 -4,-4 2.5,0 0,-5 -2.5,0 z"
+ (xy) -> return "M#{@x + 5} #{@y - 5}v6l-2-2-4 4 2 2h-6v-6l2 2 4-4-2-2z"
+ (xy) -> return "M #{@x - 7},#{@y} l 4,-4 0,2.5 5,0 0,-2.5 4,4 -4,4 0,-2.5 -5,0 0,2.5 z"
+]
+