         case Oval(center: CGPoint, width: CGFloat)
         case Rect(center: CGPoint, size: CGSize)
         case RoundedRect(center: CGPoint, size: CGSize, radius: CGFloat)
+        case OvalWV(center: UIView, margin: CGFloat)
+        case RectWV(center: UIView, margin: CGFloat)
+        case RoundedRectWV(center: UIView, radius: CGFloat, margin: CGFloat)
         
         public var frame: CGRect {
             return frameWith(center, size: size)

                return UIBezierPath(roundedRect: frameWith(center, size: CGSizeZero), cornerRadius: 0)
            case .RoundedRect(_, _, let radius):
                return UIBezierPath(roundedRect: frameWith(center, size: CGSizeZero), cornerRadius: radius)
            }
        }
        
        func frameWith(center: CGPoint, size: CGSize) -> CGRect {
            return CGRectMake(center.x - size.width / 2, center.y - size.height / 2, size.width, size.height)
        }
    }
    

                return size
            case .RoundedRect(_, let size, _):
                return size
            case .OvalWV(let view, let margin):
                return ovalSize(view, margin: margin)
            case .RectWV(let view, let margin):
                return rectSize(view, margin: margin)
            case .RoundedRectWV(let view, radius: _, let margin):
                return rectSize(view, margin: margin)
            }
        }
        
