 public typealias SwipeAction = (location: C4Point, direction: SwipeDirection) -> ()
 public typealias EdgePanAction = (location: C4Point) -> ()
 
+//MARK: - Touchable
 public protocol Touchable: UIGestureRecognizerDelegate {
     var interactionEnabled: Bool { get set }
+    var pan: Pan { get }
+    var tap: Tap { get }
+    var swipe: Swipe { get }
+    var longPress: LongPress { get }
+    var edgePan: EdgePan { get }
     
     func onTap(run: TapAction)
     func onPan(run: PanAction)

        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 {
    
}

//MARK: - Gesture Actions (typealiases)
public typealias TapAction = (location: C4Point) -> ()
public typealias PanAction = (location: C4Point, translation: C4Point, velocity: C4Point) -> ()
public typealias PinchAction = (location: C4Point, scale: Double, velocity: Double) -> ()
