supporting menu dimension retrieval for menubars, fixes #2570

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76943 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor 2014-07-20 15:28:20 +00:00
parent c4691daac7
commit c7f1a920b1
4 changed files with 50 additions and 1 deletions

View File

@ -202,6 +202,11 @@ public :
wxMenu* GetWXPeer() { return m_peer ; }
virtual void PopUp( wxWindow *win, int x, int y ) = 0;
virtual void GetMenuBarDimensions(int &x, int &y, int &width, int &height) const
{
x = y = width = height = -1;
}
static wxMenuImpl* Create( wxMenu* peer, const wxString& title );
static wxMenuImpl* CreateRootMenu( wxMenu* peer );

View File

@ -160,6 +160,11 @@ public:
static WXHMENU MacGetWindowMenuHMenu() { return s_macWindowMenuHandle ; }
virtual void DoGetPosition(int *x, int *y) const;
virtual void DoGetSize(int *width, int *height) const;
virtual void DoGetClientSize(int *width, int *height) const;
protected:
// common part of all ctors
void Init();

View File

@ -253,7 +253,16 @@ public :
[popUpButtonCell performClickWithFrame:frame inView:view];
[popUpButtonCell release];
}
virtual void GetMenuBarDimensions(int &x, int &y, int &width, int &height) const wxOVERRIDE
{
NSRect r = [(NSScreen*)[[NSScreen screens] objectAtIndex:0] frame];
height = [m_osxMenu menuBarHeight];
x = r.origin.x;
y = r.origin.y;
width = r.size.width;
}
WXHMENU GetHMenu() wxOVERRIDE { return m_osxMenu; }
static wxMenuImpl* Create( wxMenu* peer, const wxString& title );

View File

@ -1022,4 +1022,34 @@ void wxMenuBar::Attach(wxFrame *frame)
wxMenuBarBase::Attach( frame ) ;
}
void wxMenuBar::DoGetPosition(int *x, int *y) const
{
int _x,_y,_width,_height;
m_rootMenu->GetPeer()->GetMenuBarDimensions(_x, _y, _width, _height);
if (x)
*x = _x;
if (y)
*y = _y;
}
void wxMenuBar::DoGetSize(int *width, int *height) const
{
int _x,_y,_width,_height;
m_rootMenu->GetPeer()->GetMenuBarDimensions(_x, _y, _width, _height);
if (width)
*width = _width;
if (height)
*height = _height;
}
void wxMenuBar::DoGetClientSize(int *width, int *height) const
{
DoGetSize(width, height);
}
#endif // wxUSE_MENUS