diff options
author | der richter <der.richter@gmx.de> | 2024-03-24 00:50:41 +0100 |
---|---|---|
committer | der richter <der.richter@gmx.de> | 2024-03-24 23:03:48 +0100 |
commit | 6846338cf251cca3d1abf1e7a18e64891ac73e10 (patch) | |
tree | e7f448b3c43d41903cf4892b97fa05e2accf4859 | |
parent | f9618ea487d7b017d1a08b8e8d01fc5b63aac245 (diff) | |
download | mpv-6846338cf251cca3d1abf1e7a18e64891ac73e10.tar.bz2 mpv-6846338cf251cca3d1abf1e7a18e64891ac73e10.tar.xz |
mac/touchbar: use EventHelper for event handling
also remove remaining old event handling.
-rw-r--r-- | osdep/mac/app_hub.swift | 31 | ||||
-rw-r--r-- | osdep/mac/application.m | 7 | ||||
-rw-r--r-- | osdep/mac/application_objc.h | 1 | ||||
-rw-r--r-- | osdep/mac/touch_bar.swift | 49 |
4 files changed, 22 insertions, 66 deletions
diff --git a/osdep/mac/app_hub.swift b/osdep/mac/app_hub.swift index 1b7173e973..d5b0827be3 100644 --- a/osdep/mac/app_hub.swift +++ b/osdep/mac/app_hub.swift @@ -40,16 +40,12 @@ class AppHub: NSObject { @objc func initMpv(_ mpv: OpaquePointer) { self.mpv = mpv - mpv_observe_property(mpv, 0, "duration", MPV_FORMAT_DOUBLE) - mpv_observe_property(mpv, 0, "time-pos", MPV_FORMAT_DOUBLE) - mpv_observe_property(mpv, 0, "speed", MPV_FORMAT_DOUBLE) - mpv_observe_property(mpv, 0, "pause", MPV_FORMAT_FLAG) event = EventHelper(mpv) #if HAVE_MACOS_MEDIA_PLAYER remote?.registerEvents() #endif #if HAVE_MACOS_TOUCHBAR - touchBar = TouchBar() + touchBar = TouchBar(self) #endif } @@ -73,29 +69,4 @@ class AppHub: NSObject { remote?.stop() #endif } - - let wakeup: EventHelper.wakeup_cb = { ( ctx ) in - let event = unsafeBitCast(ctx, to: AppHub.self) - DispatchQueue.main.async { event.eventLoop() } - } - - func eventLoop() { - while let mpv = mpv, let event = mpv_wait_event(mpv, 0) { - if event.pointee.event_id == MPV_EVENT_NONE { break } - handle(event: event) - } - } - - func handle(event: UnsafeMutablePointer<mpv_event>) { - if let app = NSApp as? Application { - app.processEvent(event) - } - - switch event.pointee.event_id { - case MPV_EVENT_SHUTDOWN: - mpv_destroy(mpv) - mpv = nil - default: break - } - } } diff --git a/osdep/mac/application.m b/osdep/mac/application.m index ad4b4c5dca..f13b386a10 100644 --- a/osdep/mac/application.m +++ b/osdep/mac/application.m @@ -161,13 +161,6 @@ static const char mac_icon[] = } #endif -- (void)processEvent:(struct mpv_event *)event -{ -#if HAVE_MACOS_TOUCHBAR - [(TouchBar *)self.touchBar processEvent:event]; -#endif -} - - (void)initCocoaCb:(struct mpv_handle *)ctx { #if HAVE_MACOS_COCOA_CB diff --git a/osdep/mac/application_objc.h b/osdep/mac/application_objc.h index 3417652949..4c8beb20b3 100644 --- a/osdep/mac/application_objc.h +++ b/osdep/mac/application_objc.h @@ -26,7 +26,6 @@ struct mpv_handle; @interface Application : NSApplication - (NSImage *)getMPVIcon; -- (void)processEvent:(struct mpv_event *)event; - (void)initCocoaCb:(struct mpv_handle *)ctx; + (const struct m_sub_options *)getMacConf; + (const struct m_sub_options *)getVoConf; diff --git a/osdep/mac/touch_bar.swift b/osdep/mac/touch_bar.swift index d61338eca5..60ae600c44 100644 --- a/osdep/mac/touch_bar.swift +++ b/osdep/mac/touch_bar.swift @@ -68,14 +68,17 @@ extension TouchBar { } } -class TouchBar: NSTouchBar, NSTouchBarDelegate { +class TouchBar: NSTouchBar, NSTouchBarDelegate, EventSubscriber { + unowned let appHub: AppHub + var event: EventHelper? { get { return appHub.event } } var configs: [NSTouchBarItem.Identifier:Config] = [:] var isPaused: Bool = false { didSet { updatePlayButton() } } var position: Double = 0 { didSet { updateTouchBarTimeItems() } } var duration: Double = 0 { didSet { updateTouchBarTimeItems() } } var rate: Double = 1 - override init() { + init(_ appHub: AppHub) { + self.appHub = appHub super.init() configs = [ @@ -133,10 +136,16 @@ class TouchBar: NSTouchBar, NSTouchBarDelegate { customizationAllowedItemIdentifiers = [.play, .seekBar, .previousItem, .nextItem, .previousChapter, .nextChapter, .cycleAudio, .cycleSubtitle, .currentPosition, .timeLeft] addObserver(self, forKeyPath: "visible", options: [.new], context: nil) + + event?.subscribe(self, event: .init(name: "duration", format: MPV_FORMAT_DOUBLE)) + event?.subscribe(self, event: .init(name: "time-pos", format: MPV_FORMAT_DOUBLE)) + event?.subscribe(self, event: .init(name: "speed", format: MPV_FORMAT_DOUBLE)) + event?.subscribe(self, event: .init(name: "pause", format: MPV_FORMAT_FLAG)) + event?.subscribe(self, event: .init(name: "MPV_EVENT_END_FILE")) } required init?(coder: NSCoder) { - super.init(coder: coder) + fatalError("init(coder:) has not been implemented") } func touchBar(_ touchBar: NSTouchBar, makeItemForIdentifier identifier: NSTouchBarItem.Identifier) -> NSTouchBarItem? { @@ -266,36 +275,20 @@ class TouchBar: NSTouchBar, NSTouchBarDelegate { return nil } - @objc func processEvent(_ event: UnsafeMutablePointer<mpv_event>) { - switch event.pointee.event_id { - case MPV_EVENT_END_FILE: + func handle(event: EventHelper.Event) { + switch event.name { + case "MPV_EVENT_END_FILE": position = 0 duration = 0 - case MPV_EVENT_PROPERTY_CHANGE: - handlePropertyChange(event) - default: - break - } - } - - func handlePropertyChange(_ event: UnsafeMutablePointer<mpv_event>) { - let pData = OpaquePointer(event.pointee.data) - guard let property = UnsafePointer<mpv_event_property>(pData)?.pointee else { return } - - switch String(cString: property.name) { - case "time-pos" where property.format == MPV_FORMAT_DOUBLE: - let newPosition = max(TypeHelper.toDouble(property.data) ?? 0, 0) + case "time-pos": + let newPosition = max(event.double ?? 0, 0) if Int((floor(newPosition) - floor(position)) / rate) != 0 { position = newPosition } - case "duration" where property.format == MPV_FORMAT_DOUBLE: - duration = TypeHelper.toDouble(property.data) ?? 0 - case "pause" where property.format == MPV_FORMAT_FLAG: - isPaused = TypeHelper.toBool(property.data) ?? false - case "speed" where property.format == MPV_FORMAT_DOUBLE: - rate = TypeHelper.toDouble(property.data) ?? 1 - default: - break + case "pause": isPaused = event.bool ?? false + case "duration": duration = event.double ?? 0 + case "speed": rate = event.double ?? 1 + default: break } } } |