mirror of
https://github.com/wailsapp/wails.git
synced 2026-03-14 14:45:49 +01:00
Support retina images
This commit is contained in:
parent
ae0933c82a
commit
58b6e4c335
6 changed files with 28 additions and 4 deletions
|
|
@ -72,4 +72,6 @@ NSString* safeInit(const char* input);
|
|||
|
||||
void SetTrayImage(void *nsStatusItem, void *imageData, int imageDataLength, int template, int position);
|
||||
|
||||
bool IsRetina(void *ctx);
|
||||
|
||||
#endif /* Application_h */
|
||||
|
|
|
|||
|
|
@ -378,6 +378,11 @@ void SetTrayImage(void *nsStatusItem, void *imageData, int imageDataLength, int
|
|||
)
|
||||
}
|
||||
|
||||
bool IsRetina(void *ctx) {
|
||||
CGFloat scale = [((WailsContext*)ctx).mainWindow backingScaleFactor];
|
||||
return scale != (CGFloat)1;
|
||||
}
|
||||
|
||||
void Run(void *inctx, const char* url, int activationPolicy) {
|
||||
WailsContext *ctx = (__bridge WailsContext*) inctx;
|
||||
NSApplication *app = [NSApplication sharedApplication];
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ func objectCreated(id uint32, pointer unsafe.Pointer) {
|
|||
createNSObjectMapLock.Unlock()
|
||||
}
|
||||
|
||||
func NewNSTrayMenu(context unsafe.Pointer, trayMenu *menu.TrayMenu) *NSTrayMenu {
|
||||
func NewNSTrayMenu(context unsafe.Pointer, trayMenu *menu.TrayMenu, isRetina bool) *NSTrayMenu {
|
||||
c := NewCalloc()
|
||||
defer c.Free()
|
||||
|
||||
|
|
@ -57,6 +57,7 @@ func NewNSTrayMenu(context unsafe.Pointer, trayMenu *menu.TrayMenu) *NSTrayMenu
|
|||
result := &NSTrayMenu{
|
||||
context: context,
|
||||
nsStatusItem: nsStatusItem,
|
||||
isRetina: isRetina,
|
||||
}
|
||||
|
||||
if trayMenu.Label != "" {
|
||||
|
|
@ -77,11 +78,21 @@ func NewNSTrayMenu(context unsafe.Pointer, trayMenu *menu.TrayMenu) *NSTrayMenu
|
|||
}
|
||||
|
||||
func (n *NSTrayMenu) SetImage(image *menu.TrayImage) {
|
||||
if image.Image == nil {
|
||||
|
||||
if !n.isRetina && image.Image == nil {
|
||||
return
|
||||
}
|
||||
|
||||
var imagePtr unsafe.Pointer
|
||||
if image.Image != nil {
|
||||
imagePtr = unsafe.Pointer(&image.Image[0])
|
||||
}
|
||||
if n.isRetina && image.Image2x != nil {
|
||||
imagePtr = unsafe.Pointer(&image.Image2x[0])
|
||||
}
|
||||
|
||||
C.SetTrayImage(n.nsStatusItem,
|
||||
unsafe.Pointer(&image.Image[0]),
|
||||
imagePtr,
|
||||
C.int(len(image.Image)),
|
||||
bool2Cint(image.IsTemplate),
|
||||
C.int(image.Position),
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ func (f *Frontend) TrayMenuAdd(trayMenu *menu.TrayMenu) menu.TrayMenuImpl {
|
|||
type NSTrayMenu struct {
|
||||
context unsafe.Pointer
|
||||
nsStatusItem unsafe.Pointer // NSStatusItem
|
||||
isRetina bool
|
||||
}
|
||||
|
||||
func (n *NSTrayMenu) SetLabel(label string) {
|
||||
|
|
@ -33,5 +34,5 @@ func (n *NSTrayMenu) SetLabel(label string) {
|
|||
}
|
||||
|
||||
func (w *Window) TrayMenuAdd(trayMenu *menu.TrayMenu) *NSTrayMenu {
|
||||
return NewNSTrayMenu(w.context, trayMenu)
|
||||
return NewNSTrayMenu(w.context, trayMenu, IsRetina(w))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,6 +40,10 @@ func bool2Cint(value bool) C.int {
|
|||
return C.int(0)
|
||||
}
|
||||
|
||||
func IsRetina(window *Window) bool {
|
||||
return bool(C.IsRetina(window.context))
|
||||
}
|
||||
|
||||
func NewWindow(frontendOptions *options.App, debugMode bool) *Window {
|
||||
|
||||
c := NewCalloc()
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ const (
|
|||
|
||||
type TrayImage struct {
|
||||
Image []byte
|
||||
Image2x []byte
|
||||
IsTemplate bool
|
||||
Position ImagePosition
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue