         numberOfTouchesRequired = 1
         numberOfTapsRequired = 0
         allowableMovement = 10.0
-    }
-    
-    public var minimumPressDuration: Double {
-        didSet {
-            gesture?.minimumPressDuration = minimumPressDuration
-        }
-    }
-    
-    public var numberOfTapsRequired : Int {
-        didSet {
-            self.gesture?.numberOfTapsRequired = numberOfTapsRequired
-        }
-    }
-    
-    public var numberOfTouchesRequired : Int {
-        didSet {
-            self.gesture?.numberOfTouchesRequired = numberOfTouchesRequired
-        }
-    }
-
-    public var allowableMovement : Double {
-        didSet {
-            self.gesture?.allowableMovement = CGFloat(allowableMovement)
-        }
     }
 }
 

public protocol VisibleMediaObject: MediaObject, Visible, Touchable, Mask, AddRemoveSubview {
    
}
public typealias TapAction = (location: C4Point) -> ()
public typealias PanAction = (location: C4Point, translation: C4Point, velocity: C4Point) -> ()
public typealias PinchAction = (location: C4Point, scale: Double, velocity: Double) -> ()

    func onLongPress(run: LongPressAction)
    func onSwipe(run: SwipeAction)
    func onEdgePan(run: EdgePanAction)
}

//MARK: - Visible
public protocol Visible {
    var frame: C4Rect { get set }
    var bounds: C4Rect { get }
    var center: C4Point { get set }
    var size: C4Size { get }
    var constrainsProportions: Bool { get set }
    
    var backgroundColor: C4Color { get set }
    var opacity: Double { get set }
    var hidden: Bool { get set }
    
    var border: Border { get set }
    var shadow: Shadow { get set }
    var rotation: Rotation { get set }

    var perspectiveDistance: Double { get set }
}

//MARK: - Mask
public protocol Mask {
    var mask: Mask? { get set }
    var layer: CALayer? { get }
}

//MARK: - AddRemoveSubview
public protocol AddRemoveSubview {
    func add<T: AddRemoveSubview>(subview: T)
    func remove<T: AddRemoveSubview>(subview: T)
    func removeFromSuperview()
}

//MARK: - Structs & Enums
public struct Tap {
    weak public var gesture: UITapGestureRecognizer?
    public var numberOfTapsRequired : Int {
        didSet {
            self.gesture?.numberOfTapsRequired = numberOfTapsRequired
        }
    }
    
    public var numberOfTouchesRequired : Int {
        didSet {
            self.gesture?.numberOfTouchesRequired = numberOfTouchesRequired
        }
    }
    
    public init(_ recognizer: UITapGestureRecognizer) {
        gesture = recognizer
        numberOfTouchesRequired = 1
        numberOfTapsRequired = 1
    }
}

public struct Pan {
    weak public var gesture: UIPanGestureRecognizer?
    public var minimumNumberOfTouches : Int {
        didSet {
            self.gesture?.minimumNumberOfTouches = minimumNumberOfTouches
        }
    }
    
    public var maximumNumberOfTouches : Int {
        didSet {
            self.gesture?.maximumNumberOfTouches = maximumNumberOfTouches
        }
    }
    
    public init(_ recognizer: UIPanGestureRecognizer) {
        gesture = recognizer
        minimumNumberOfTouches = 1
        maximumNumberOfTouches = 1
    }
}

public enum RectEdges  {
    case None
