GithubHelp home page GithubHelp logo

bluehuskystudios / bezelnotification Goto Github PK

View Code? Open in Web Editor NEW
29.0 4.0 8.0 253 KB

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.

License: Other

Swift 100.00%
swift swift-library cocoa-framework swift-framework bezel notifications ui-components

bezelnotification's Introduction

BezelNotification

You know those square notifications macOS does when you change the volume 'n' stuff? This is like that, but you can actually use it in your projects.

Note that this does not use any secret system APIs (but instead creates its own bezel notifications from scratch), so this cannot interact with nor affect system bezel notifications. This also means it can be used in App Store apps ๐Ÿฅณ

Try it out!

To try out BezelNotification without instaling it into your own project first, you can use this demo app I put together!

Usage

This is designed to strike a balance between ease-of-use and customizability. For instance, this is the primary way it is intended to be used in the general case:

BezelNotification.show(messageText: "Loading...", icon: .myLoadingIcon)

But it can be customized heavily if preferred, like this:

BezelNotification.show(messageText: "Loading...",
                       icon: .myLoadingIcon,

                       location: .normal,
                       size: .normal,

                       timeToLive: .long,
                       fadeInAnimationDuration: 0.1,
                       fadeOutAnimationDuration: 1,

                       cornerRadius: 10,
                       tint: BezelParameters.defaultBackgroundTint,
                       messageLabelFont: NSFont(name: "American Typewriter", size: 20)!,
                       messageLabelColor: .magenta,

                       afterHideCallback: { print("Bezel was presented successfully") }
)

All these parameters (aside from the callback) can be encapsulated in a BezelParameters object. This is useful for keeping pre-defned bezels, serializing them for user-customization, etc.

Platform

This was designed to be used on macOS using AppKit. Future versions may include UIKit, SwiftUI, and iOS support as well!

bezelnotification's People

Contributors

kyleggiero avatar sidevesh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

bezelnotification's Issues

How to use

Hi I'm trying to use your bhbezels package but I'm new to swift, do I have to use it as a git submodule? As when I try to import through package manager it says there is no modules exported or something similar?

Add more locations and sizes

Currently, both BezelLocation and BezelSize have only a .normal position and size, which mimics that of the system bezel notifications. More options should be provided, and perhaps .normal location should become an alias to one like .bottomCenter.

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

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()

Make this a Swift Package

It shouldn't be terribly difficult; just specify the current ./BHBezelNotification/ folder as the Sources folder for SPM

Add SwiftUI support

A new rethinking of the API will be needed. Input and suggestions are welcome!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.