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 SetAppMenu(IAvnAppMenu* menu) = 0;
virtual HRESULT CreateMenu (IAvnAppMenu** ppv) = 0; virtual HRESULT CreateMenu (IAvnAppMenu** ppv) = 0;
virtual HRESULT CreateMenuItem (IAvnAppMenuItem** ppv) = 0; virtual HRESULT CreateMenuItem (IAvnAppMenuItem** ppv) = 0;
virtual HRESULT CreateMenuItemSeperator (IAvnAppMenuItem** ppv) = 0;
}; };
AVNCOM(IAvnString, 17) : IUnknown 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 IAvnGlSurfaceRenderTarget* CreateGlRenderTarget(NSWindow* window, NSView* view);
extern IAvnAppMenu* CreateAppMenu(); extern IAvnAppMenu* CreateAppMenu();
extern IAvnAppMenuItem* CreateAppMenuItem(); extern IAvnAppMenuItem* CreateAppMenuItem();
extern IAvnAppMenuItem* CreateAppMenuItemSeperator();
extern void SetAppMenu (IAvnAppMenu* appMenu); extern void SetAppMenu (IAvnAppMenu* appMenu);
extern IAvnAppMenu* GetAppMenu (); extern IAvnAppMenu* GetAppMenu ();
extern NSMenuItem* GetAppMenuItem (); extern NSMenuItem* GetAppMenuItem ();

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

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

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

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

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

@ -43,13 +43,23 @@
} }
@end @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; _callback = nullptr;
} }
AvnMenuItem* AvnAppMenuItem::GetNative() NSMenuItem* AvnAppMenuItem::GetNative()
{ {
return _native; return _native;
} }
@ -137,7 +147,6 @@ HRESULT AvnAppMenu::AddItem (IAvnAppMenuItem* item)
if(avnMenuItem != nullptr) if(avnMenuItem != nullptr)
{ {
[_native addItem: avnMenuItem->GetNative()]; [_native addItem: avnMenuItem->GetNative()];
} }
@ -185,7 +194,15 @@ extern IAvnAppMenuItem* CreateAppMenuItem()
{ {
@autoreleasepool @autoreleasepool
{ {
return new AvnAppMenuItem(); return new AvnAppMenuItem(false);
}
}
extern IAvnAppMenuItem* CreateAppMenuItemSeperator()
{
@autoreleasepool
{
return new AvnAppMenuItem(true);
} }
} }

Loading…
Cancel
Save