Browse Source

implement seperator support on native side.

pull/2978/head
Dan Walmsley 7 years ago
parent
commit
1a3506cbcb
  1. 1
      native/Avalonia.Native/inc/avalonia-native.h
  2. 1
      native/Avalonia.Native/src/OSX/common.h
  3. 6
      native/Avalonia.Native/src/OSX/main.mm
  4. 7
      native/Avalonia.Native/src/OSX/menu.h
  5. 27
      native/Avalonia.Native/src/OSX/menu.mm

1
native/Avalonia.Native/inc/avalonia-native.h

@ -179,6 +179,7 @@ public:
virtual HRESULT SetAppMenu(IAvnAppMenu* menu) = 0;
virtual HRESULT CreateMenu (IAvnAppMenu** ppv) = 0;
virtual HRESULT CreateMenuItem (IAvnAppMenuItem** ppv) = 0;
virtual HRESULT CreateMenuItemSeperator (IAvnAppMenuItem** ppv) = 0;
};
AVNCOM(IAvnString, 17) : IUnknown

1
native/Avalonia.Native/src/OSX/common.h

@ -21,6 +21,7 @@ extern IAvnGlFeature* GetGlFeature();
extern IAvnGlSurfaceRenderTarget* CreateGlRenderTarget(NSWindow* window, NSView* view);
extern IAvnAppMenu* CreateAppMenu();
extern IAvnAppMenuItem* CreateAppMenuItem();
extern IAvnAppMenuItem* CreateAppMenuItemSeperator();
extern void SetAppMenu (IAvnAppMenu* appMenu);
extern IAvnAppMenu* GetAppMenu ();
extern NSMenuItem* GetAppMenuItem ();

6
native/Avalonia.Native/src/OSX/main.mm

@ -237,6 +237,12 @@ public:
return S_OK;
}
virtual HRESULT CreateMenuItemSeperator (IAvnAppMenuItem** ppv) override
{
*ppv = ::CreateAppMenuItemSeperator();
return S_OK;
}
virtual HRESULT SetAppMenu (IAvnAppMenu* appMenu) override
{
::SetAppMenu(appMenu);

7
native/Avalonia.Native/src/OSX/menu.h

@ -26,16 +26,17 @@ class AvnAppMenu;
class AvnAppMenuItem : public ComSingleObject<IAvnAppMenuItem, &IID_IAvnAppMenuItem>
{
private:
AvnMenuItem* _native; // here we hold a pointer to an AvnMenuItem
NSMenuItem* _native; // here we hold a pointer to an AvnMenuItem
IAvnActionCallback* _callback;
IAvnPredicateCallback* _predicate;
bool _isSeperator;
public:
FORWARD_IUNKNOWN()
AvnAppMenuItem();
AvnAppMenuItem(bool isSeperator);
AvnMenuItem* GetNative();
NSMenuItem* GetNative();
virtual HRESULT SetSubMenu (IAvnAppMenu* menu) override;

27
native/Avalonia.Native/src/OSX/menu.mm

@ -43,13 +43,23 @@
}
@end
AvnAppMenuItem::AvnAppMenuItem()
AvnAppMenuItem::AvnAppMenuItem(bool isSeperator)
{
_native = [[AvnMenuItem alloc] initWithAvnAppMenuItem: this];
_isSeperator = isSeperator;
if(isSeperator)
{
_native = [NSMenuItem separatorItem];
}
else
{
_native = [[AvnMenuItem alloc] initWithAvnAppMenuItem: this];
}
_callback = nullptr;
}
AvnMenuItem* AvnAppMenuItem::GetNative()
NSMenuItem* AvnAppMenuItem::GetNative()
{
return _native;
}
@ -137,7 +147,6 @@ HRESULT AvnAppMenu::AddItem (IAvnAppMenuItem* item)
if(avnMenuItem != nullptr)
{
[_native addItem: avnMenuItem->GetNative()];
}
@ -185,7 +194,15 @@ extern IAvnAppMenuItem* CreateAppMenuItem()
{
@autoreleasepool
{
return new AvnAppMenuItem();
return new AvnAppMenuItem(false);
}
}
extern IAvnAppMenuItem* CreateAppMenuItemSeperator()
{
@autoreleasepool
{
return new AvnAppMenuItem(true);
}
}

Loading…
Cancel
Save