             case (.None, .None): break
             }
         case .TextArea(let left, let right, let alignment, let text, let size):
-            // TODO: not working
-
-            let rotation = ReformMath.angle(right-left)
-            let font = NSFont(name: "Helvetica", size: CGFloat(size)) ?? NSFont.systemFontOfSize(CGFloat(size))
+            let absSize = abs(size)
+
+            let rotation = ReformMath.angle(signum(size)*(right-left))
+            let font = NSFont(name: "Helvetica", size: CGFloat(absSize)) ?? NSFont.systemFontOfSize(CGFloat(absSize))
 
             let backgroundColor : NSColor
             let strokeWidth : CGFloat

                strokeColor = sColor.toNSColor
                // stroke width is relative to font size
                // https://developer.apple.com/library/mac/qa/qa1531/_index.html
                strokeWidth = CGFloat(50*width/size)
            case (.Fill(let bColor), .None):
                backgroundColor = bColor.toNSColor
                strokeColor = NSColor(red:0,green:0,blue:0,alpha:0)

                // https://developer.apple.com/library/mac/qa/qa1531/_index.html
                NSFontAttributeName:font,
                NSForegroundColorAttributeName:transparent,
                NSStrokeWidthAttributeName:50*width/absSize,
                NSStrokeColorAttributeName:nsColor
            ]

            CGContextSaveGState(context);

