         }
 
         // 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
+        self.callDelegatesIfNeeded()
 
         // Draw
         self.frameComponents.frameCount += 1

        UIGraphicsBeginImageContext(rect.size)
        self.image?.draw(at: CGPoint(x: 0, y: 0))
        #else
        self.image?.draw(at: NSZeroPoint, from: NSZeroRect, operation: .copy, fraction: 1.0)

        // MARK: Coordinate systems are different between iOS and OS X
        let g = MultiplatformCommon.getCurrentContext()

        g?.restoreGState()
        #endif

        // Only setup
        if self.delegate?.draw == nil {
            self.noLoop()
            return
