From 8d3197b83c140048b7117078f3402ad6d5dd6e7a Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Wed, 22 Nov 2017 22:42:41 -0500 Subject: [PATCH 1/3] Updated dependencies --- Package.resolved | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Package.resolved b/Package.resolved index 189828b..a564e77 100644 --- a/Package.resolved +++ b/Package.resolved @@ -78,8 +78,8 @@ "repositoryURL": "https://github.com/PureSwift/Silica.git", "state": { "branch": null, - "revision": "b504b0368de794dde11c6e9da71fbd4ae4845c99", - "version": "1.3.0" + "revision": "6239656493fba609a11bef46efd495fca2379090", + "version": "1.3.2" } } ] From 1cb615009023394b40aefa569f013b72fca35157 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Thu, 23 Nov 2017 00:27:54 -0500 Subject: [PATCH 2/3] Working on Event dispatching --- Sources/Cacao/UIApplication.swift | 7 ++-- Sources/Cacao/UIEventEnvironment.swift | 2 +- Sources/Cacao/UIWindow.swift | 44 ++++++++++++++++++++++---- Sources/CacaoDemo/AppDelegate.swift | 2 +- 4 files changed, 45 insertions(+), 10 deletions(-) diff --git a/Sources/Cacao/UIApplication.swift b/Sources/Cacao/UIApplication.swift index dc2584a..0377814 100644 --- a/Sources/Cacao/UIApplication.swift +++ b/Sources/Cacao/UIApplication.swift @@ -83,10 +83,13 @@ public final class UIApplication: UIResponder { /// after handling the event in your implementation. public func sendEvent(_ event: UIEvent) { - keyWindow?.sendEvent(event) + self.windows.forEach { $0.sendEvent(event) } } - public func sendAction(_ selector: String, to target: AnyObject?, from sender: AnyObject?, for event: UIEvent?) { + public func sendAction(_ selector: String, + to target: AnyObject?, + from sender: AnyObject?, + for event: UIEvent?) { } diff --git a/Sources/Cacao/UIEventEnvironment.swift b/Sources/Cacao/UIEventEnvironment.swift index fca9e39..2a44267 100644 --- a/Sources/Cacao/UIEventEnvironment.swift +++ b/Sources/Cacao/UIEventEnvironment.swift @@ -39,7 +39,7 @@ internal final class UIEventEnvironment { guard let event = event(for: sdlEvent) else { handleNonUIEvent(sdlEvent); continue } - + application.sendEvent(event) } // clear queue diff --git a/Sources/Cacao/UIWindow.swift b/Sources/Cacao/UIWindow.swift index fbcae68..d4b1c46 100644 --- a/Sources/Cacao/UIWindow.swift +++ b/Sources/Cacao/UIWindow.swift @@ -61,13 +61,29 @@ open class UIWindow: UIView { let gestureEnvironment = UIApplication.shared.gestureEnvironment - switch event.type { + // handle touches event + if let touchesEvent = event as? UITouchesEvent { - case .touches: + gestureEnvironment.updateGestures(for: event, window: self) + + sendTouches(for: touchesEvent) + + } else if let pressesEvent = event as? UIPressesEvent { + + guard isUserInteractionEnabled else { return } gestureEnvironment.updateGestures(for: event, window: self) - /* + sendButtons(for: pressesEvent) + } + + + + /* + switch event.type { + + case .touches: + let touches = event.touches(for: self) ?? [] let gestureRecognizers = touches.reduce([UIGestureRecognizer](), { $0 + ($1.gestureRecognizers ?? []) }) @@ -104,12 +120,12 @@ open class UIWindow: UIView { case .ended: touch.view?.touchesEnded(touches, with: event) case .cancelled: touch.view?.touchesCancelled(touches, with: event) } - }*/ + } default: fatalError("\(event.type) events not implemented") - } + }*/ } // MARK: - Subclassed Methods @@ -140,7 +156,23 @@ open class UIWindow: UIView { layoutIfNeeded() } - private func sendTouches(for event: UIEvent) { + private func sendTouches(for event: UITouchesEvent) { + + let touches = event.touches + + for touch in touches { + + switch touch.phase { + case .began: touch.view?.touchesBegan(touches, with: event) + case .moved: touch.view?.touchesMoved(touches, with: event) + case .stationary: break + case .ended: touch.view?.touchesEnded(touches, with: event) + case .cancelled: touch.view?.touchesCancelled(touches, with: event) + } + } + } + + private func sendButtons(for event: UIPressesEvent) { } diff --git a/Sources/CacaoDemo/AppDelegate.swift b/Sources/CacaoDemo/AppDelegate.swift index 9d7ce12..ae9e764 100644 --- a/Sources/CacaoDemo/AppDelegate.swift +++ b/Sources/CacaoDemo/AppDelegate.swift @@ -31,7 +31,7 @@ final class AppDelegate: NSObject, UIApplicationDelegate { self.window = UIWindow(frame: UIScreen.main.bounds) - self.window?.rootViewController = TimerViewController() + self.window?.rootViewController = SwitchViewController() self.window?.makeKeyAndVisible() From d563c613be21e97a6e03474cc02cd3f10a5437a2 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Thu, 23 Nov 2017 01:00:36 -0500 Subject: [PATCH 3/3] Fixed #20 Linux rendering issue Just works for some reason now, both with Swift 3 and 4 compiler --- Sources/Cacao/UIView.swift | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Sources/Cacao/UIView.swift b/Sources/Cacao/UIView.swift index 3aa2e65..48bff2a 100644 --- a/Sources/Cacao/UIView.swift +++ b/Sources/Cacao/UIView.swift @@ -694,15 +694,6 @@ open class UIView: UIResponder { // CoreGraphics drawing draw(in: context) - /// FIXME: temporary workaround for Linux - /// We have to convert the surface to PNG, even though we discard it. - /// For some reason this changes something internally in Cairo, - /// even though the texture and surface pixel buffer doesn't seem to change. - #if os(Linux) - let pngData = try! surface.writePNG() - assert(pngData.isEmpty == false) - #endif - /// flush surface surface.flush() surface.finish()