diff --git a/v3/pkg/services/badge/badge.go b/v3/pkg/services/badge/badge.go index d43e4bcc5..e178a8cb1 100644 --- a/v3/pkg/services/badge/badge.go +++ b/v3/pkg/services/badge/badge.go @@ -2,6 +2,7 @@ package badge import ( "context" + "image/color" "github.com/wailsapp/wails/v3/pkg/application" ) @@ -20,6 +21,14 @@ type Service struct { impl platformBadge } +type Options struct { + TextColour color.RGBA + BackgroundColour color.RGBA + FontName string + FontSize int + SmallFontSize int +} + // ServiceName returns the name of the service. func (b *Service) ServiceName() string { return "github.com/wailsapp/wails/v3/services/badge" @@ -35,10 +44,12 @@ func (b *Service) ServiceShutdown() error { return b.impl.Shutdown() } +// SetBadge sets the badge label on the application icon. func (b *Service) SetBadge(label string) error { return b.impl.SetBadge(label) } +// RemoveBadge removes the badge label from the application icon. func (b *Service) RemoveBadge() error { return b.impl.RemoveBadge() } diff --git a/v3/pkg/services/badge/badge_darwin.go b/v3/pkg/services/badge/badge_darwin.go index d61b9ca70..9b72dfd2b 100644 --- a/v3/pkg/services/badge/badge_darwin.go +++ b/v3/pkg/services/badge/badge_darwin.go @@ -26,12 +26,20 @@ import ( type darwinBadge struct{} +// Creates a new Badge Service. func New() *Service { return &Service{ impl: &darwinBadge{}, } } +// NewWithOptions creates a new badge service with the given options. +// Currently, options are not available on macOS and are ignored. +// (Windows-specific) +func NewWithOptions(options Options) *Service { + return New() +} + func (d *darwinBadge) Startup(ctx context.Context, options application.ServiceOptions) error { return nil } @@ -40,6 +48,7 @@ func (d *darwinBadge) Shutdown() error { return nil } +// SetBadge sets the badge label on the application icon. func (d *darwinBadge) SetBadge(label string) error { var cLabel *C.char if label != "" { @@ -52,6 +61,7 @@ func (d *darwinBadge) SetBadge(label string) error { return nil } +// RemoveBadge removes the badge label from the application icon. func (d *darwinBadge) RemoveBadge() error { C.setBadge(nil) return nil diff --git a/v3/pkg/services/badge/badge_windows.go b/v3/pkg/services/badge/badge_windows.go index 52310e91a..1a6d65546 100644 --- a/v3/pkg/services/badge/badge_windows.go +++ b/v3/pkg/services/badge/badge_windows.go @@ -25,14 +25,6 @@ type windowsBadge struct { options Options } -type Options struct { - TextColour color.RGBA - BackgroundColour color.RGBA - FontName string - FontSize int - SmallFontSize int -} - var defaultOptions = Options{ TextColour: color.RGBA{255, 255, 255, 255}, BackgroundColour: color.RGBA{255, 0, 0, 255}, @@ -41,6 +33,7 @@ var defaultOptions = Options{ SmallFontSize: 14, } +// Creates a new Badge Service. func New() *Service { return &Service{ impl: &windowsBadge{ @@ -49,6 +42,7 @@ func New() *Service { } } +// NewWithOptions creates a new badge service with the given options. func NewWithOptions(options Options) *Service { return &Service{ impl: &windowsBadge{ @@ -77,6 +71,7 @@ func (w *windowsBadge) Shutdown() error { return nil } +// SetBadge sets the badge label on the application icon. func (w *windowsBadge) SetBadge(label string) error { if w.taskbar == nil { return nil @@ -116,6 +111,7 @@ func (w *windowsBadge) SetBadge(label string) error { return w.taskbar.SetOverlayIcon(hwnd, hicon, nil) } +// RemoveBadge removes the badge label from the application icon. func (w *windowsBadge) RemoveBadge() error { if w.taskbar == nil { return nil @@ -139,6 +135,7 @@ func (w *windowsBadge) RemoveBadge() error { return w.taskbar.SetOverlayIcon(hwnd, 0, nil) } +// createBadgeIcon creates a badge icon with the specified size and color. func (w *windowsBadge) createBadgeIcon() (w32.HICON, error) { radius := w.badgeSize / 2 centerX, centerY := radius, radius @@ -164,6 +161,7 @@ func (w *windowsBadge) createBadgeIcon() (w32.HICON, error) { return hicon, err } +// createBadgeIconWithText creates a badge icon with the specified text. func (w *windowsBadge) createBadgeIconWithText(label string) (w32.HICON, error) { fontPath := w.fontManager.FindFontOrDefault(w.options.FontName) @@ -218,6 +216,7 @@ func (w *windowsBadge) createBadgeIconWithText(label string) (w32.HICON, error) return w32.CreateSmallHIconFromImage(buf.Bytes()) } +// createBadge creates a circular badge with the specified background color. func (w *windowsBadge) createBadge() { w.badgeSize = 32