Position the status bar properly
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21759 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
|
||||
class WXDLLEXPORT wxMenuBar;
|
||||
class WXDLLEXPORT wxMenuItem;
|
||||
class WXDLLEXPORT wxStatusBar;
|
||||
|
||||
class WXDLLEXPORT wxFrame: public wxFrameBase
|
||||
{
|
||||
@@ -68,6 +69,14 @@ public:
|
||||
// get the origin of the client area (which may be different from (0, 0)
|
||||
// if the frame has a toolbar) in client coordinates
|
||||
virtual wxPoint GetClientAreaOrigin() const;
|
||||
|
||||
protected:
|
||||
// Catch the Cocoa size event
|
||||
virtual void Cocoa_FrameChanged(void);
|
||||
void PositionStatusBar();
|
||||
// override base class virtuals
|
||||
virtual void DoGetClientSize(int *width, int *height) const;
|
||||
virtual void DoSetClientSize(int width, int height);
|
||||
};
|
||||
|
||||
#endif // _WX_COCOA_FRAME_H_
|
||||
|
@@ -14,6 +14,7 @@
|
||||
#include "wx/menuitem.h"
|
||||
#include "wx/app.h"
|
||||
#include "wx/log.h"
|
||||
#include "wx/statusbr.h"
|
||||
|
||||
#import <AppKit/NSWindow.h>
|
||||
#import <AppKit/NSApplication.h>
|
||||
@@ -78,8 +79,48 @@ bool wxFrame::Show(bool show)
|
||||
return ret;
|
||||
}
|
||||
|
||||
void wxFrame::Cocoa_FrameChanged(void)
|
||||
{
|
||||
PositionStatusBar();
|
||||
wxFrameBase::Cocoa_FrameChanged();
|
||||
}
|
||||
|
||||
wxPoint wxFrame::GetClientAreaOrigin() const
|
||||
{
|
||||
return wxPoint(0,0);
|
||||
}
|
||||
|
||||
void wxFrame::DoGetClientSize(int *width, int *height) const
|
||||
{
|
||||
wxFrameBase::DoGetClientSize(width,height);
|
||||
if(height)
|
||||
{
|
||||
if(m_frameStatusBar && m_frameStatusBar->IsShown())
|
||||
*height -= m_frameStatusBar->GetSize().y;
|
||||
}
|
||||
}
|
||||
|
||||
void wxFrame::DoSetClientSize(int width, int height)
|
||||
{
|
||||
if(m_frameStatusBar && m_frameStatusBar->IsShown())
|
||||
height += m_frameStatusBar->GetSize().y;
|
||||
wxFrameBase::DoSetClientSize(width,height);
|
||||
}
|
||||
|
||||
void wxFrame::PositionStatusBar()
|
||||
{
|
||||
if( !m_frameStatusBar || !m_frameStatusBar->IsShown() )
|
||||
return;
|
||||
|
||||
// Get the client size. Since it excludes the StatusBar area we want
|
||||
// the top of the status bar to be directly under it (thus located at h)
|
||||
// The width of the statusbar should then match the client width
|
||||
int w, h;
|
||||
GetClientSize(&w, &h);
|
||||
|
||||
int sh;
|
||||
m_frameStatusBar->GetSize(NULL, &sh);
|
||||
|
||||
m_frameStatusBar->SetSize(0, h, w, sh);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user