From 88e8d606b40ea635e4f946d0eadeecd633073a8b Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Sat, 13 Jul 2019 15:33:21 -0400 Subject: [PATCH] Start work --- .gitignore | 77 ++++++++++++++++++ Underbar.xcodeproj/project.pbxproj | 68 +++++++++++++++- Underbar/AppDelegate.swift | 25 ++++-- .../underbar.imageset/Contents.json | 24 ++++++ .../underbar.imageset/underbar.png | Bin 0 -> 596 bytes Underbar/Base.lproj/Main.storyboard | 32 ++------ .../Controllers/RootTouchBarController.swift | 47 +++++++++++ Underbar/Controllers/TouchBarController.swift | 48 +++++++++++ Underbar/Info.plist | 2 + Underbar/NSTouchBar.h | 25 ++++++ Underbar/TouchBarItemIdentifiers.swift | 17 ++++ Underbar/Underbar-Bridging-Header.h | 9 ++ Underbar/ViewController.swift | 27 ------ Underbar/Widgets/NowPlayingWidget.swift | 18 ++++ Underbar/Widgets/TouchBarWidget.swift | 24 ++++++ 15 files changed, 380 insertions(+), 63 deletions(-) create mode 100644 .gitignore create mode 100644 Underbar/Assets.xcassets/underbar.imageset/Contents.json create mode 100644 Underbar/Assets.xcassets/underbar.imageset/underbar.png create mode 100644 Underbar/Controllers/RootTouchBarController.swift create mode 100644 Underbar/Controllers/TouchBarController.swift create mode 100644 Underbar/NSTouchBar.h create mode 100644 Underbar/TouchBarItemIdentifiers.swift create mode 100644 Underbar/Underbar-Bridging-Header.h delete mode 100644 Underbar/ViewController.swift create mode 100644 Underbar/Widgets/NowPlayingWidget.swift create mode 100644 Underbar/Widgets/TouchBarWidget.swift diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..71c8374 --- /dev/null +++ b/.gitignore @@ -0,0 +1,77 @@ +.DS_Store + +### Swift ### +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## Build generated +build/ +DerivedData/ + +## Various settings +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata/ + +## Other +*.moved-aside +*.xccheckout +*.xcscmblueprint + +## Obj-C/Swift specific +*.hmap +*.ipa +*.dSYM.zip +*.dSYM + +## Playgrounds +timeline.xctimeline +playground.xcworkspace + +# Swift Package Manager +# +# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. +# Packages/ +# Package.pins +.build/ + +# CocoaPods - Refactored to standalone file + +# Carthage - Refactored to standalone file + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots +fastlane/test_output + +### Xcode ### +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## Build generated + +## Various settings + +## Other + +### Xcode Patch ### +*.xcodeproj/* +!*.xcodeproj/project.pbxproj +!*.xcodeproj/xcshareddata/ +!*.xcworkspace/contents.xcworkspacedata +/*.gcno diff --git a/Underbar.xcodeproj/project.pbxproj b/Underbar.xcodeproj/project.pbxproj index aa0bd82..fc461f0 100644 --- a/Underbar.xcodeproj/project.pbxproj +++ b/Underbar.xcodeproj/project.pbxproj @@ -8,19 +8,31 @@ /* Begin PBXBuildFile section */ D6B35B3922DA1B3C00F262A2 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6B35B3822DA1B3C00F262A2 /* AppDelegate.swift */; }; - D6B35B3B22DA1B3C00F262A2 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6B35B3A22DA1B3C00F262A2 /* ViewController.swift */; }; D6B35B3D22DA1B3C00F262A2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D6B35B3C22DA1B3C00F262A2 /* Assets.xcassets */; }; D6B35B4022DA1B3C00F262A2 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D6B35B3E22DA1B3C00F262A2 /* Main.storyboard */; }; + D6B35B4C22DA466600F262A2 /* TouchBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6B35B4B22DA466600F262A2 /* TouchBarController.swift */; }; + D6B35B4E22DA479E00F262A2 /* TouchBarItemIdentifiers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6B35B4D22DA479E00F262A2 /* TouchBarItemIdentifiers.swift */; }; + D6B35B5122DA4A2A00F262A2 /* DFRFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6B35B5022DA4A2A00F262A2 /* DFRFoundation.framework */; }; + D6B35B5522DA64AD00F262A2 /* RootTouchBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6B35B5422DA64AD00F262A2 /* RootTouchBarController.swift */; }; + D6B35B5A22DA66A400F262A2 /* TouchBarWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6B35B5922DA66A400F262A2 /* TouchBarWidget.swift */; }; + D6B35B5E22DA687E00F262A2 /* NowPlayingWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6B35B5D22DA687E00F262A2 /* NowPlayingWidget.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ D6B35B3522DA1B3C00F262A2 /* Underbar.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Underbar.app; sourceTree = BUILT_PRODUCTS_DIR; }; D6B35B3822DA1B3C00F262A2 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - D6B35B3A22DA1B3C00F262A2 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; D6B35B3C22DA1B3C00F262A2 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; D6B35B3F22DA1B3C00F262A2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; D6B35B4122DA1B3C00F262A2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; D6B35B4222DA1B3C00F262A2 /* Underbar.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Underbar.entitlements; sourceTree = ""; }; + D6B35B4822DA1B8D00F262A2 /* NSTouchBar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NSTouchBar.h; sourceTree = ""; }; + D6B35B4A22DA1C8400F262A2 /* Underbar-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Underbar-Bridging-Header.h"; sourceTree = ""; }; + D6B35B4B22DA466600F262A2 /* TouchBarController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TouchBarController.swift; sourceTree = ""; }; + D6B35B4D22DA479E00F262A2 /* TouchBarItemIdentifiers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TouchBarItemIdentifiers.swift; sourceTree = ""; }; + D6B35B5022DA4A2A00F262A2 /* DFRFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DFRFoundation.framework; path = ../../../../System/Library/PrivateFrameworks/DFRFoundation.framework; sourceTree = ""; }; + D6B35B5422DA64AD00F262A2 /* RootTouchBarController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootTouchBarController.swift; sourceTree = ""; }; + D6B35B5922DA66A400F262A2 /* TouchBarWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TouchBarWidget.swift; sourceTree = ""; }; + D6B35B5D22DA687E00F262A2 /* NowPlayingWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NowPlayingWidget.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -28,6 +40,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + D6B35B5122DA4A2A00F262A2 /* DFRFoundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -39,6 +52,7 @@ children = ( D6B35B3722DA1B3C00F262A2 /* Underbar */, D6B35B3622DA1B3C00F262A2 /* Products */, + D6B35B4F22DA4A2A00F262A2 /* Frameworks */, ); sourceTree = ""; }; @@ -54,15 +68,45 @@ isa = PBXGroup; children = ( D6B35B3822DA1B3C00F262A2 /* AppDelegate.swift */, - D6B35B3A22DA1B3C00F262A2 /* ViewController.swift */, + D6B35B4D22DA479E00F262A2 /* TouchBarItemIdentifiers.swift */, + D6B35B5722DA669000F262A2 /* Controllers */, + D6B35B5822DA669400F262A2 /* Widgets */, D6B35B3C22DA1B3C00F262A2 /* Assets.xcassets */, D6B35B3E22DA1B3C00F262A2 /* Main.storyboard */, D6B35B4122DA1B3C00F262A2 /* Info.plist */, D6B35B4222DA1B3C00F262A2 /* Underbar.entitlements */, + D6B35B4822DA1B8D00F262A2 /* NSTouchBar.h */, + D6B35B4A22DA1C8400F262A2 /* Underbar-Bridging-Header.h */, ); path = Underbar; sourceTree = ""; }; + D6B35B4F22DA4A2A00F262A2 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D6B35B5022DA4A2A00F262A2 /* DFRFoundation.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + D6B35B5722DA669000F262A2 /* Controllers */ = { + isa = PBXGroup; + children = ( + D6B35B4B22DA466600F262A2 /* TouchBarController.swift */, + D6B35B5422DA64AD00F262A2 /* RootTouchBarController.swift */, + ); + path = Controllers; + sourceTree = ""; + }; + D6B35B5822DA669400F262A2 /* Widgets */ = { + isa = PBXGroup; + children = ( + D6B35B5922DA66A400F262A2 /* TouchBarWidget.swift */, + D6B35B5D22DA687E00F262A2 /* NowPlayingWidget.swift */, + ); + path = Widgets; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -133,8 +177,12 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D6B35B3B22DA1B3C00F262A2 /* ViewController.swift in Sources */, + D6B35B5A22DA66A400F262A2 /* TouchBarWidget.swift in Sources */, + D6B35B4E22DA479E00F262A2 /* TouchBarItemIdentifiers.swift in Sources */, + D6B35B4C22DA466600F262A2 /* TouchBarController.swift in Sources */, + D6B35B5E22DA687E00F262A2 /* NowPlayingWidget.swift in Sources */, D6B35B3922DA1B3C00F262A2 /* AppDelegate.swift in Sources */, + D6B35B5522DA64AD00F262A2 /* RootTouchBarController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -279,9 +327,15 @@ "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_BUNDLE_IDENTIFIER = net.shadowfacts.Underbar; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h"; SWIFT_VERSION = 5.0; + SYSTEM_FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks", + ); }; name = Debug; }; @@ -299,9 +353,15 @@ "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_BUNDLE_IDENTIFIER = net.shadowfacts.Underbar; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h"; SWIFT_VERSION = 5.0; + SYSTEM_FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks", + ); }; name = Release; }; diff --git a/Underbar/AppDelegate.swift b/Underbar/AppDelegate.swift index 78c9dd6..bfd8b97 100644 --- a/Underbar/AppDelegate.swift +++ b/Underbar/AppDelegate.swift @@ -11,16 +11,29 @@ import Cocoa @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate { - - + let statusBarItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength) + + let rootController = RootTouchBarController() + func applicationDidFinishLaunching(_ aNotification: Notification) { - // Insert code here to initialize your application + + statusBarItem.button!.image = NSImage(named: "underbar")! + + let menu = NSMenu(title: "Underbar") + menu.addItem(NSMenuItem(title: "Quit Underbar", action: #selector(NSApp.terminate(_:)), keyEquivalent: "q")) + statusBarItem.menu = menu + + NSTouchBar.presentSystemModalTouchBar(rootController.touchBar, placement: 1, systemTrayItemIdentifier: .underbar) + rootController.isVisible = true + DFRSystemModalShowsCloseBoxWhenFrontMost(false) + + let systemItem = NSButtonTouchBarItem(identifier: .underbar, image: NSImage(named: "underbar")!, target: rootController, action: #selector(TouchBarController.toggle)) + NSTouchBarItem.addSystemTrayItem(systemItem) + DFRElementSetControlStripPresenceForIdentifier(.underbar, true) } func applicationWillTerminate(_ aNotification: Notification) { // Insert code here to tear down your application } - - + } - diff --git a/Underbar/Assets.xcassets/underbar.imageset/Contents.json b/Underbar/Assets.xcassets/underbar.imageset/Contents.json new file mode 100644 index 0000000..a5ecbbf --- /dev/null +++ b/Underbar/Assets.xcassets/underbar.imageset/Contents.json @@ -0,0 +1,24 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "underbar.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/Underbar/Assets.xcassets/underbar.imageset/underbar.png b/Underbar/Assets.xcassets/underbar.imageset/underbar.png new file mode 100644 index 0000000000000000000000000000000000000000..b98e28191c10bfe929399fd10804538f6b3a0980 GIT binary patch literal 596 zcmV-a0;~OrP)EX>4Tx04R}tkv&MmKpe$iQ>CIU3U&~2$WWauh+jBr6^c+H)C#RSm|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfadlF3krMxx7Fxu3aNLh~_a1le0HIc5n$s0?!PaspLFym{`oWvC_t@U~0sZ#1U1~DPKr8 zSmnIMSu0go^Pc>L!K}Wr%ypVWh+`2;kRU=q1x1u#BTB1IiiITY$2|Olu3sXTLarhh zITlcc2HEw4|H1EWt=z;V;BhR0`;ond>=bb{RHqo16O*>U#gF zjN~bM-Q(R|?Y;ebrrF;QVVrWHK+*Rx00006VoOIv0RI600RN!9r;`8x010qNS#tmY zE+YT{E+YYWr9XB6000McNliru;|C28ITd3u4PXEO02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{001mWL_t(o!|l+q4FEt01F`V??+h&qyhLGFDNjiN0000| iYxkw5cl9x00G|xRVF3unQ?lFu0000 - + + - + + @@ -673,37 +674,16 @@ - + - - - - - - - - - - - - - - - - - - - - - - + diff --git a/Underbar/Controllers/RootTouchBarController.swift b/Underbar/Controllers/RootTouchBarController.swift new file mode 100644 index 0000000..70218cb --- /dev/null +++ b/Underbar/Controllers/RootTouchBarController.swift @@ -0,0 +1,47 @@ +// +// RootTouchBarController.swift +// Underbar +// +// Created by Shadowfacts on 7/13/19. +// Copyright © 2019 Shadowfacts. All rights reserved. +// + +import Cocoa + +class RootTouchBarController: TouchBarController { + + let nowPlaying = NowPlayingWidget() + + override init() { + super.init() + + widgets = [ + nowPlaying + ] + + touchBar.defaultItemIdentifiers = [ + .closeUnderbar, + .flexibleSpace, + .nowPlaying, + ] + } + + override func touchBar(_ touchBar: NSTouchBar, makeItemForIdentifier identifier: NSTouchBarItem.Identifier) -> NSTouchBarItem? { + switch identifier { + case .closeUnderbar: + return createCloseItem() + case .nowPlaying: + return nowPlaying.item + default: + return super.touchBar(touchBar, makeItemForIdentifier: identifier) + } + } + + func createCloseItem() -> NSTouchBarItem { + let item = NSCustomTouchBarItem(identifier: .closeUnderbar) + let button = NSButton(image: NSImage(named: "underbar")!, target: self, action: #selector(toggle)) + button.widthAnchor.constraint(equalToConstant: 40).isActive = true + item.view = button + return item + } +} diff --git a/Underbar/Controllers/TouchBarController.swift b/Underbar/Controllers/TouchBarController.swift new file mode 100644 index 0000000..3ede5b1 --- /dev/null +++ b/Underbar/Controllers/TouchBarController.swift @@ -0,0 +1,48 @@ +// +// TouchBarController.swift +// Underbar +// +// Created by Shadowfacts on 7/13/19. +// Copyright © 2019 Shadowfacts. All rights reserved. +// + +import Cocoa + +class TouchBarController: NSObject, NSTouchBarDelegate { + let touchBar = NSTouchBar() + + var widgets: [TouchBarWidget] = [] + + var isVisible = false + + override init() { + super.init() + + touchBar.delegate = self + } + + @objc func toggle() { + if isVisible { + minimize() + } else { + present() + } + } + + func present() { + NSTouchBar.presentSystemModalTouchBar(touchBar, placement: 1, systemTrayItemIdentifier: .underbar) + isVisible = true + DFRElementSetControlStripPresenceForIdentifier(.underbar, true) + } + + func minimize() { + NSTouchBar.minimizeSystemModalTouchBar(touchBar) + isVisible = false + DFRElementSetControlStripPresenceForIdentifier(.underbar, true) + } + + func touchBar(_ touchBar: NSTouchBar, makeItemForIdentifier identifier: NSTouchBarItem.Identifier) -> NSTouchBarItem? { + return nil + } + +} diff --git a/Underbar/Info.plist b/Underbar/Info.plist index d20feef..4e746b0 100644 --- a/Underbar/Info.plist +++ b/Underbar/Info.plist @@ -2,6 +2,8 @@ + LSUIElement + CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable diff --git a/Underbar/NSTouchBar.h b/Underbar/NSTouchBar.h new file mode 100644 index 0000000..55c77de --- /dev/null +++ b/Underbar/NSTouchBar.h @@ -0,0 +1,25 @@ +// +// NSTouchbar.h +// Underbar +// +// Created by Shadowfacts on 7/13/19. +// Copyright © 2019 Shadowfacts. All rights reserved. +// + +#import + +extern void DFRElementSetControlStripPresenceForIdentifier(_Nonnull NSTouchBarItemIdentifier, BOOL); +extern void DFRSystemModalShowsCloseBoxWhenFrontMost(BOOL); + +@interface NSTouchBarItem () + ++ (void)addSystemTrayItem:(nonnull NSTouchBarItem *)item; + +@end + +@interface NSTouchBar () + ++ (void)presentSystemModalTouchBar:(nonnull NSTouchBar *)touchBar placement:(long long)placement systemTrayItemIdentifier:(nonnull NSTouchBarItemIdentifier)identifier NS_AVAILABLE_MAC(10.14); ++ (void)minimizeSystemModalTouchBar:(nonnull NSTouchBar *)touchBar NS_AVAILABLE_MAC(10.14); + +@end diff --git a/Underbar/TouchBarItemIdentifiers.swift b/Underbar/TouchBarItemIdentifiers.swift new file mode 100644 index 0000000..ce9aceb --- /dev/null +++ b/Underbar/TouchBarItemIdentifiers.swift @@ -0,0 +1,17 @@ +// +// TouchBarItemIdentifiers.swift +// Underbar +// +// Created by Shadowfacts on 7/13/19. +// Copyright © 2019 Shadowfacts. All rights reserved. +// + +import Cocoa + +extension NSTouchBarItem.Identifier { + static let underbar = NSTouchBarItem.Identifier("underbar") + + static let closeUnderbar = NSTouchBarItem.Identifier("underbar_close") + + static let nowPlaying = NSTouchBarItem.Identifier("underbar_now_playing") +} diff --git a/Underbar/Underbar-Bridging-Header.h b/Underbar/Underbar-Bridging-Header.h new file mode 100644 index 0000000..f1de2b6 --- /dev/null +++ b/Underbar/Underbar-Bridging-Header.h @@ -0,0 +1,9 @@ +// +// Underbar-Bridging-Header.h +// Underbar +// +// Created by Shadowfacts on 7/13/19. +// Copyright © 2019 Shadowfacts. All rights reserved. +// + +#import "NSTouchBar.h" diff --git a/Underbar/ViewController.swift b/Underbar/ViewController.swift deleted file mode 100644 index 0d608b1..0000000 --- a/Underbar/ViewController.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// ViewController.swift -// Underbar -// -// Created by Shadowfacts on 7/13/19. -// Copyright © 2019 Shadowfacts. All rights reserved. -// - -import Cocoa - -class ViewController: NSViewController { - - override func viewDidLoad() { - super.viewDidLoad() - - // Do any additional setup after loading the view. - } - - override var representedObject: Any? { - didSet { - // Update the view, if already loaded. - } - } - - -} - diff --git a/Underbar/Widgets/NowPlayingWidget.swift b/Underbar/Widgets/NowPlayingWidget.swift new file mode 100644 index 0000000..2857391 --- /dev/null +++ b/Underbar/Widgets/NowPlayingWidget.swift @@ -0,0 +1,18 @@ +// +// NowPlayingWidget.swift +// Underbar +// +// Created by Shadowfacts on 7/13/19. +// Copyright © 2019 Shadowfacts. All rights reserved. +// + +import Cocoa + +class NowPlayingWidget: TouchBarWidget { + + override init() { + super.init() + item = NSButtonTouchBarItem(identifier: .nowPlaying, title: "Test", target: nil, action: nil) + } + +} diff --git a/Underbar/Widgets/TouchBarWidget.swift b/Underbar/Widgets/TouchBarWidget.swift new file mode 100644 index 0000000..0b2ebd8 --- /dev/null +++ b/Underbar/Widgets/TouchBarWidget.swift @@ -0,0 +1,24 @@ +// +// TouchBarWidget.swift +// Underbar +// +// Created by Shadowfacts on 7/13/19. +// Copyright © 2019 Shadowfacts. All rights reserved. +// + +import Cocoa + +class TouchBarWidget: NSObject { + + var item: NSTouchBarItem! + + override init() { + super.init() + } + + convenience init(item: NSTouchBarItem) { + self.init() + self.item = item + } + +}