         g?.restoreGState()
         #endif
 
+        // Only setup
         if self.delegate?.draw == nil {
             self.noLoop()
             return

        }

        // Touch events
        #if os(iOS)
        if self.eventComponents.fingerTapped {
            self.eventComponents.fingerTapped = false
            self.delegate?.fingerTapped?()
        }
        if self.eventComponents.fingerDragged {
            self.eventComponents.fingerDragged = false
            self.delegate?.fingerDragged?()
        }
        if self.eventComponents.fingerReleased {
            self.eventComponents.fingerReleased = false
            self.delegate?.fingerReleased?()
        }
        #else
        if self.eventComponents.mouseClicked {
            self.eventComponents.mouseClicked = false
            self.delegate?.mouseClicked?()
        }
        if self.eventComponents.mouseDragged {
            self.eventComponents.mouseDragged = false
            self.delegate?.mouseDragged?()
        }
        if self.eventComponents.mouseMoved {
            self.eventComponents.mouseMoved = false
            self.delegate?.mouseMoved?()
        }
        if self.eventComponents.mouseReleased {
            self.eventComponents.mouseReleased = false
            self.delegate?.mouseReleased?()
        }
        #endif

        // Draw
        self.frameComponents.frameCount += 1

        }
    }

    private func callDelegatesIfNeeded() {
        #if os(iOS)
        if self.eventComponents.fingerTapped {
            self.eventComponents.fingerTapped = false
            self.delegate?.fingerTapped?()
        }
        if self.eventComponents.fingerDragged {
            self.eventComponents.fingerDragged = false
            self.delegate?.fingerDragged?()
        }
        if self.eventComponents.fingerReleased {
            self.eventComponents.fingerReleased = false
            self.delegate?.fingerReleased?()
        }
        #else
        if self.eventComponents.mouseClicked {
            self.eventComponents.mouseClicked = false
            self.delegate?.mouseClicked?()
        }
        if self.eventComponents.mouseDragged {
            self.eventComponents.mouseDragged = false
            self.delegate?.mouseDragged?()
        }
        if self.eventComponents.mouseMoved {
            self.eventComponents.mouseMoved = false
            self.delegate?.mouseMoved?()
        }
        if self.eventComponents.mouseReleased {
            self.eventComponents.mouseReleased = false
            self.delegate?.mouseReleased?()
        }
        #endif
    }

    // MARK: - Update view bounds
    open override var frame: CGRect {
        didSet {
