BlueHuskyStudios / BezelNotification

You know those dark, vibrant square notifications macOS does when you change the volume 'n' stuff? This is like that, but you can actually use it in your projects.
Other
30 stars 8 forks source link

timeToLive, fadeOutAnimationDuration, afterHideCallback don't seem to be working #10

Open sidevesh opened 1 year ago

sidevesh commented 1 year ago

Have a really simple program where I am trying to show an HUD, but I can't seem to be able to get timeToLive, fadeOutAnimationDuration and afterHideCallback options to work, despite whatever value I set the HUD disappears with no animations, fadeInAnimationDuration seems to work though. also timeToLive does not seem to have any effect and the HUD disappears after the same time no matter what value I set. afterHideCallback does not seem to trigger either.

import AppKit
import BezelNotification

func after(_ delay: TimeInterval, perform block: @escaping ()->(), on queue: DispatchQueue = OperationQueue.current?.underlyingQueue ?? .main) { // So this `queue` preserves the current queue and defaulted to the `main`. Also the caller can pass in the desired queue explicitly
    queue.asyncAfter(deadline: .now() + delay, execute: block)
}

var showMuted: Bool = true

for argument in CommandLine.arguments {
    if (argument == "un-muted") {
        showMuted = false;
    }
}

let app = NSApplication.shared

class AppDelegate: NSObject, NSApplicationDelegate {
    func applicationDidFinishLaunching(_ notification: Notification) {
        var path: String?
        if (showMuted) {
            path = Bundle.module.path(forResource: "mic.slash.fill", ofType: "png")
        } else {
            path = Bundle.module.path(forResource: "mic.fill", ofType: "png")
        }
        let bezelIcon = NSImage(contentsOfFile: path!)
        BezelNotification.show(
            messageText: "",
            icon: bezelIcon,
            timeToLive: .exactly(seconds: 2),
            fadeInAnimationDuration: 0,
            fadeOutAnimationDuration: 0
        )
        after(2) {
            app.terminate(self)
        }
    }
}

let delegate = AppDelegate()
app.delegate = delegate
app.run()
sidevesh commented 10 months ago

@KyLeggiero do you have any pointers on this ?

KyLeggiero commented 7 months ago

Yeah, this is weird. I'm trying to debug this. Seems to be new as of Sonoma maybe? Stay tuned.

Also currently working on a SwiftUI API so I wanna make sure this remains polished for that launch.

KyLeggiero commented 7 months ago

timeToLive should at least be working right now. Can you try setting it to other values to see how long it stays on screen before disappearing? Your example sets it to 2, which is the default. Setting it to 0.5 should shorten how long it's on-screen, and 10 should make it stay on-screen longer. Please let me know if that's working this way

sidevesh commented 7 months ago

Any value less than 2 seems to work for timeToLive and I can see the toast disappear earlier, anything above 2 seems to have no effect, it just seems to use 2 seconds.

sidevesh commented 7 months ago

You should be able to reproduce this issue with the above code, the full code is at https://github.com/sidevesh/MuteMicrophonesOSD

KyLeggiero commented 7 months ago

Thank you for the feedback! Will keep all this in-mind during the coming updates