From e08efb8dd9d9af576baec04aa77a7ea4bd31de3b Mon Sep 17 00:00:00 2001 From: David Elliott Date: Sun, 17 Aug 2003 23:23:26 +0000 Subject: [PATCH] Handle setting of client size for all types of windows git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22983 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/cocoa/frame.h | 4 +--- include/wx/cocoa/toplevel.h | 1 + include/wx/cocoa/window.h | 4 ++++ src/cocoa/frame.mm | 18 +++++------------- src/cocoa/toplevel.mm | 16 ++++++++++++++++ src/cocoa/window.mm | 10 +++++++++- 6 files changed, 36 insertions(+), 17 deletions(-) diff --git a/include/wx/cocoa/frame.h b/include/wx/cocoa/frame.h index 02e19ed615..1e82ab5fbc 100644 --- a/include/wx/cocoa/frame.h +++ b/include/wx/cocoa/frame.h @@ -53,6 +53,7 @@ protected: // ------------------------------------------------------------------------ protected: virtual void Cocoa_wxMenuItemAction(wxMenuItem& item); + virtual void CocoaSetWxWindowSize(int width, int height); // Helper function to position status/tool bars void UpdateFrameNSView(); @@ -93,9 +94,6 @@ public: virtual void SetToolBar(wxToolBar *toolbar); protected: 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_ diff --git a/include/wx/cocoa/toplevel.h b/include/wx/cocoa/toplevel.h index c23c18ff46..075d6dee87 100644 --- a/include/wx/cocoa/toplevel.h +++ b/include/wx/cocoa/toplevel.h @@ -84,6 +84,7 @@ public: virtual bool Show( bool show = true ); virtual bool Close( bool force = false ); virtual void OnCloseWindow(wxCloseEvent& event); + virtual void CocoaSetWxWindowSize(int width, int height); virtual void DoMoveWindow(int x, int y, int width, int height); virtual void DoGetSize(int *width, int *height) const; virtual void DoGetPosition(int *x, int *y) const; diff --git a/include/wx/cocoa/window.h b/include/wx/cocoa/window.h index 1fbc20590b..0a072ea49a 100644 --- a/include/wx/cocoa/window.h +++ b/include/wx/cocoa/window.h @@ -149,6 +149,10 @@ public: // Get/set client (application-useable) size virtual void DoGetClientSize(int *width, int *height) const; virtual void DoSetClientSize(int width, int size); + // Set the size of the wxWindow (the contentView of an NSWindow) + // wxTopLevelWindow will override this and set the NSWindow size + // such that the contentView will be this size + virtual void CocoaSetWxWindowSize(int width, int height); // Set overall size and position virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO); virtual void DoMoveWindow(int x, int y, int width, int height); diff --git a/src/cocoa/frame.mm b/src/cocoa/frame.mm index 7c0387a644..c9eec7426d 100644 --- a/src/cocoa/frame.mm +++ b/src/cocoa/frame.mm @@ -91,21 +91,13 @@ wxPoint wxFrame::GetClientAreaOrigin() const return wxPoint(0,0); } -void wxFrame::DoGetClientSize(int *width, int *height) const +void wxFrame::CocoaSetWxWindowSize(int width, int height) { - 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()) + if(m_frameStatusBar) height += m_frameStatusBar->GetSize().y; - wxFrameBase::DoSetClientSize(width,height); + if(m_frameToolBar) + height += m_frameToolBar->GetSize().y; + wxTopLevelWindow::CocoaSetWxWindowSize(width,height); } void wxFrame::CocoaReplaceView(WX_NSView oldView, WX_NSView newView) diff --git a/src/cocoa/toplevel.mm b/src/cocoa/toplevel.mm index 068d4bd724..3b5bf13131 100644 --- a/src/cocoa/toplevel.mm +++ b/src/cocoa/toplevel.mm @@ -221,6 +221,22 @@ bool wxTopLevelWindowCocoa::IsFullScreen() const return FALSE; } +void wxTopLevelWindowCocoa::CocoaSetWxWindowSize(int width, int height) +{ + // Set the NSView size by setting the frame size to enclose it + unsigned int styleMask = [m_cocoaNSWindow styleMask]; + NSRect frameRect = [m_cocoaNSWindow frame]; + NSRect contentRect = [NSWindow + contentRectForFrameRect: frameRect + styleMask: styleMask]; + contentRect.size.width = width; + contentRect.size.height = height; + frameRect = [NSWindow + frameRectForContentRect: contentRect + styleMask: styleMask]; + [m_cocoaNSWindow setFrame: frameRect display: NO]; +} + void wxTopLevelWindowCocoa::DoMoveWindow(int x, int y, int width, int height) { wxLogDebug("wxTopLevelWindow=%p::DoMoveWindow(%d,%d,%d,%d)",this,x,y,width,height); diff --git a/src/cocoa/window.mm b/src/cocoa/window.mm index 97bcc62a5e..017b2de47e 100644 --- a/src/cocoa/window.mm +++ b/src/cocoa/window.mm @@ -600,7 +600,14 @@ void wxWindow::DoGetClientSize(int *x, int *y) const void wxWindow::DoSetClientSize(int width, int height) { wxLogDebug("DoSetClientSize=(%d,%d)",width,height); - // TODO + if(m_cocoaScroller) + m_cocoaScroller->ClientSizeToSize(width,height); + CocoaSetWxWindowSize(width,height); +} + +void wxWindow::CocoaSetWxWindowSize(int width, int height) +{ + wxWindowCocoa::DoSetSize(-1,-1,width,height,wxSIZE_USE_EXISTING); } int wxWindow::GetCharHeight() const @@ -664,6 +671,7 @@ void wxWindow::CocoaCreateNSScrollView() void wxWindow::SetScrollbar(int orient, int pos, int thumbVisible, int range, bool refresh) { + CocoaCreateNSScrollView(); // TODO } -- 2.49.0