     }
     
     /// Add a rectangle with a certain size
-    public mutating func addRectangleWithWidth(width: CGFloat, height: CGFloat) {
-        self.appendDrawingOperation(.LineByMovingByX(0, y: height), isDrawing: true)
-        self.appendDrawingOperation(.LineByMovingByX(width, y: 0), isDrawing: true)
-        self.appendDrawingOperation(.LineByMovingByX(0, y: -height), isDrawing: true)
-        self.appendDrawingOperation(.LineByMovingByX(-width, y: 0), isDrawing: true)
+    public mutating func addRectangleWithWidth(width: CGFloat, height: CGFloat, fill: Bool = false) {
+        self.appendDrawingOperation(.RectWithWidth(width, height: height, fill: fill), isDrawing: true)
     }
     
     /// Add a square with a certain size
-    public mutating func addSquareWithSize(size: CGFloat) {
-        self.addRectangleWithWidth(size, height: size)
+    public mutating func addSquareWithSize(size: CGFloat, fill: Bool = false) {
+        self.addRectangleWithWidth(size, height: size, fill: fill)
     }
     
     /// Close the shape, drawing a line to the origin point of the shape

    
    private var drawingOperations: [ShapeDrawingOperation]
    
    /// Create a new instance of Shape, it won't have a stroke color and a 1 line width
    public init() {
        self.strokeColor = SKColor.clearColor()
        self.lineWidth = 1
        self.size = CGSize()
        self.originPoint = CGPoint()

            case .LineByMovingByX(let x, let y):
                let targetPoint = CGContextGetPathCurrentPoint(context).pointOffsetByX(x * xScale, y: y * yScale)
                CGContextAddLineToPoint(context, targetPoint.x, targetPoint.y)
            case .RectWithWidth(let width, let height, let fill):
                let rect = CGRect(
                    origin: CGContextGetPathCurrentPoint(context),
                    size: CGSize(width: width * xScale, height: height * yScale)
                )
                
                CGContextAddRect(context, rect)
                
                if fill {
                    rectsToFill.append(rect)
                }
            case .Close:
                CGContextAddLineToPoint(context, self.originPoint.x * xScale, self.originPoint.y * yScale)
            }
        }
        
        CGContextSetLineWidth(context, self.lineWidth)
        CGContextStrokePath(context)
        CGContextFillRects(context, rectsToFill, rectsToFill.count)
        
        return CGBitmapContextCreateImage(context)
    }
