-void wxWindow::MacRepositionScrollBars()
-{
- bool hasBoth = ( m_hScrollBar && m_hScrollBar->IsShown()) && ( m_vScrollBar && m_vScrollBar->IsShown()) ;
- int adjust = hasBoth ? MAC_SCROLLBAR_SIZE - 1 : 0 ;
-
- if ( m_vScrollBar )
- {
- m_vScrollBar->SetSize( m_width-MAC_SCROLLBAR_SIZE, 0, MAC_SCROLLBAR_SIZE, m_height - adjust , wxSIZE_USE_EXISTING);
- }
- if ( m_hScrollBar )
- {
- m_hScrollBar->SetSize( 0 , m_height-MAC_SCROLLBAR_SIZE ,m_width - adjust, MAC_SCROLLBAR_SIZE, wxSIZE_USE_EXISTING);
- }
-}
-
-void wxWindow::MacKeyDown( EventRecord *ev )
-{
-}
-
-
-
-
-ControlHandle wxWindow::MacGetContainerForEmbedding()
-{
- if ( m_macWindowData )
- return m_macWindowData->m_macRootControl ;
- else
- return GetParent()->MacGetContainerForEmbedding() ;
-}
-
-void wxWindow::MacSuperChangedPosition()
-{
- // only window-absolute structures have to be moved i.e. controls
-
- wxNode *node = GetChildren().First();
- while ( node )
- {
- wxWindow *child = (wxWindow *)node->Data();
- child->MacSuperChangedPosition() ;
- node = node->Next();
- }
-}
-
-bool wxWindow::MacSetupFocusPort( )
-{
- Point localOrigin ;
- Rect clipRect ;
- WindowRef window ;
- wxWindow *rootwin ;
- GrafPtr port ;
-
- MacGetPortParams( &localOrigin , &clipRect , &window , &rootwin) ;
- return MacSetPortFocusParams( localOrigin, clipRect, window , rootwin ) ;
-}
-
-bool wxWindow::MacSetupFocusClientPort( )
-{
- Point localOrigin ;
- Rect clipRect ;
- WindowRef window ;
- wxWindow *rootwin ;
- GrafPtr port ;
-
- MacGetPortClientParams( &localOrigin , &clipRect , &window , &rootwin) ;
- return MacSetPortFocusParams( localOrigin, clipRect, window , rootwin ) ;
-}
-
-bool wxWindow::MacSetupDrawingPort( )
-{
- Point localOrigin ;
- Rect clipRect ;
- WindowRef window ;
- wxWindow *rootwin ;
- GrafPtr port ;
-
- MacGetPortParams( &localOrigin , &clipRect , &window , &rootwin) ;
- return MacSetPortDrawingParams( localOrigin, clipRect, window , rootwin ) ;
-}
-
-bool wxWindow::MacSetupDrawingClientPort( )
-{
- Point localOrigin ;
- Rect clipRect ;
- WindowRef window ;
- wxWindow *rootwin ;
- GrafPtr port ;
-
- MacGetPortClientParams( &localOrigin , &clipRect , &window , &rootwin) ;
- return MacSetPortDrawingParams( localOrigin, clipRect, window , rootwin ) ;
-}
-
-
-bool wxWindow::MacSetPortFocusParams( const Point & localOrigin, const Rect & clipRect, WindowRef window , wxWindow* win )
-{
- if ( window == NULL )
- return false ;
-
- GrafPtr currPort;
- GrafPtr port ;
-
- ::GetPort(&currPort);
- port = UMAGetWindowPort( window) ;
- if (currPort != port )
- ::SetPort(port);
-
- ::SetOrigin(-localOrigin.h, -localOrigin.v);
- return true;
-}
-
-bool wxWindow::MacSetPortDrawingParams( const Point & localOrigin, const Rect & clipRect, WindowRef window , wxWindow* win )
-{
- if ( window == NULL )
- return false ;
-
- GrafPtr currPort;
- GrafPtr port ;
- ::GetPort(&currPort);
- port = UMAGetWindowPort( window) ;
- if (currPort != port )
- ::SetPort(port);
-
- ::SetOrigin(-localOrigin.h, -localOrigin.v);
- ::ClipRect(&clipRect);
-
- ::PenNormal() ;
- ::RGBBackColor(& win->GetBackgroundColour().GetPixel() ) ;
- ::RGBForeColor(& win->GetForegroundColour().GetPixel() ) ;
- ::BackPat( &qd.white ) ;
- ::UMASetThemeWindowBackground( win->m_macWindowData->m_macWindow , win->m_macWindowData->m_macWindowBackgroundTheme , false ) ;
- return true;
-}
-
-void wxWindow::MacGetPortParams(Point* localOrigin, Rect* clipRect, WindowRef *window , wxWindow** rootwin)
-{
- if ( m_macWindowData )
- {
- localOrigin->h = 0;
- localOrigin->v = 0;
- clipRect->left = 0;
- clipRect->top = 0;
- clipRect->right = m_width;
- clipRect->bottom = m_height;
- *window = m_macWindowData->m_macWindow ;
- *rootwin = this ;
- }
- else
- {
- wxASSERT( GetParent() != NULL ) ;
- GetParent()->MacGetPortParams( localOrigin , clipRect , window, rootwin) ;
- localOrigin->h += m_x;
- localOrigin->v += m_y;
- OffsetRect(clipRect, -m_x, -m_y);
-
- Rect myClip;
- myClip.left = 0;
- myClip.top = 0;
- myClip.right = m_width;
- myClip.bottom = m_height;
- SectRect(clipRect, &myClip, clipRect);
- }
-}
-
-void wxWindow::MacGetPortClientParams(Point* localOrigin, Rect* clipRect, WindowRef *window , wxWindow** rootwin )
-{
- int width , height ;
- GetClientSize( &width , &height ) ;
-
- if ( m_macWindowData )
- {
- localOrigin->h = 0;
- localOrigin->v = 0;
- clipRect->left = 0;
- clipRect->top = 0;
- clipRect->right = m_width ;//width;
- clipRect->bottom = m_height ;// height;
- *window = m_macWindowData->m_macWindow ;
- *rootwin = this ;
- }
- else
- {
- wxASSERT( GetParent() != NULL ) ;
-
- GetParent()->MacGetPortClientParams( localOrigin , clipRect , window, rootwin) ;
-
- localOrigin->h += m_x;
- localOrigin->v += m_y;
- OffsetRect(clipRect, -m_x, -m_y);
-
- Rect myClip;
- myClip.left = 0;
- myClip.top = 0;
- myClip.right = width;
- myClip.bottom = height;
- SectRect(clipRect, &myClip, clipRect);
- }
-}
-
-wxMacFocusHelper::wxMacFocusHelper( wxWindow * theWindow )
-{
- m_ok = false ;
- Point localOrigin ;
- Rect clipRect ;
- WindowRef window ;
- wxWindow *rootwin ;
- m_currentPort = NULL ;
- GetPort( &m_formerPort ) ;
- if ( theWindow )
- {
-
- theWindow->MacGetPortParams( &localOrigin , &clipRect , &window , &rootwin) ;
- m_currentPort = UMAGetWindowPort( window ) ;
- theWindow->MacSetPortFocusParams( localOrigin, clipRect, window , rootwin ) ;
- m_ok = true ;
- }
-}
-
-wxMacFocusHelper::~wxMacFocusHelper()
-{
- if ( m_ok )
- {
- SetOrigin( 0 , 0 ) ;
- }
- if ( m_formerPort != m_currentPort )
- SetPort( m_formerPort ) ;
-}
-
-wxMacDrawingHelper::wxMacDrawingHelper( wxWindow * theWindow )
-{
- m_ok = false ;
- Point localOrigin ;
- Rect clipRect ;
- WindowRef window ;
- wxWindow *rootwin ;
- m_currentPort = NULL ;
-
- GetPort( &m_formerPort ) ;
- if ( theWindow )
- {
- theWindow->MacGetPortParams( &localOrigin , &clipRect , &window , &rootwin) ;
- m_currentPort = UMAGetWindowPort( window ) ;
- if ( m_formerPort != m_currentPort )
- SetPort( m_currentPort ) ;
- GetPenState( &m_savedPenState ) ;
- theWindow->MacSetPortDrawingParams( localOrigin, clipRect, window , rootwin ) ;
- m_ok = true ;
- }
-}
-
-wxMacDrawingHelper::~wxMacDrawingHelper()
-{
- if ( m_ok )
- {
- SetPenState( &m_savedPenState ) ;
- SetOrigin( 0 , 0 ) ;
- ClipRect( &m_currentPort->portRect ) ;
- }
-
- if ( m_formerPort != m_currentPort )
- SetPort( m_formerPort ) ;
-}
-
-wxMacFocusClientHelper::wxMacFocusClientHelper( wxWindow * theWindow )
-{
- m_ok = false ;
- Point localOrigin ;
- Rect clipRect ;
- WindowRef window ;
- wxWindow *rootwin ;
- m_currentPort = NULL ;
-
- GetPort( &m_formerPort ) ;
-
- if ( theWindow )
- {
- theWindow->MacGetPortClientParams( &localOrigin , &clipRect , &window , &rootwin) ;
- m_currentPort = UMAGetWindowPort( window ) ;
- theWindow->MacSetPortFocusParams( localOrigin, clipRect, window , rootwin ) ;
- m_ok = true ;
- }
-}
-
-wxMacFocusClientHelper::~wxMacFocusClientHelper()
-{
- if ( m_ok )
- {
- SetOrigin( 0 , 0 ) ;
- }
- if ( m_formerPort != m_currentPort )
- SetPort( m_formerPort ) ;
-}
-
-wxMacDrawingClientHelper::wxMacDrawingClientHelper( wxWindow * theWindow )
-{
- m_ok = false ;
- Point localOrigin ;
- Rect clipRect ;
- WindowRef window ;
- wxWindow *rootwin ;
- m_currentPort = NULL ;
-
- GetPort( &m_formerPort ) ;
-
- if ( theWindow )
- {
- theWindow->MacGetPortClientParams( &localOrigin , &clipRect , &window , &rootwin) ;
- m_currentPort = UMAGetWindowPort( window ) ;
- if ( m_formerPort != m_currentPort )
- SetPort( m_currentPort ) ;
- GetPenState( &m_savedPenState ) ;
- theWindow->MacSetPortDrawingParams( localOrigin, clipRect, window , rootwin ) ;
- m_ok = true ;
- }
-}
-
-wxMacDrawingClientHelper::~wxMacDrawingClientHelper()
-{
- if ( m_ok )
- {
- SetPenState( &m_savedPenState ) ;
- SetOrigin( 0 , 0 ) ;
- ClipRect( &m_currentPort->portRect ) ;
- }
-
- if ( m_formerPort != m_currentPort )
- SetPort( m_formerPort ) ;
+WXHWND wxWindowMac::MacGetRootWindow() const
+{
+ wxWindowMac *iter = (wxWindowMac*)this ;
+
+ while( iter )
+ {
+ if ( iter->IsTopLevel() )
+ return ((wxTopLevelWindow*)iter)->MacGetWindowRef() ;
+
+ iter = iter->GetParent() ;
+ }
+ wxASSERT_MSG( 1 , "No valid mac root window" ) ;
+ return NULL ;
+}
+
+void wxWindowMac::MacCreateScrollBars( long style )
+{
+ wxASSERT_MSG( m_vScrollBar == NULL && m_hScrollBar == NULL , "attempt to create window twice" ) ;
+
+ bool hasBoth = ( style & wxVSCROLL ) && ( style & wxHSCROLL ) ;
+ int adjust = hasBoth ? MAC_SCROLLBAR_SIZE - 1: 0 ;
+ int width, height ;
+ GetClientSize( &width , &height ) ;
+
+ wxPoint vPoint(width-MAC_SCROLLBAR_SIZE, 0) ;
+ wxSize vSize(MAC_SCROLLBAR_SIZE, height - adjust) ;
+ wxPoint hPoint(0 , height-MAC_SCROLLBAR_SIZE ) ;
+ wxSize hSize( width - adjust, MAC_SCROLLBAR_SIZE) ;
+
+ m_vScrollBar = new wxScrollBar(this, wxWINDOW_VSCROLL, vPoint,
+ vSize , wxVERTICAL);
+
+ if ( style & wxVSCROLL )
+ {
+
+ }
+ else
+ {
+ m_vScrollBar->Show(false) ;
+ }
+ m_hScrollBar = new wxScrollBar(this, wxWINDOW_HSCROLL, hPoint,
+ hSize , wxHORIZONTAL);
+ if ( style & wxHSCROLL )
+ {
+ }
+ else
+ {
+ m_hScrollBar->Show(false) ;
+ }
+
+ // because the create does not take into account the client area origin
+ MacRepositionScrollBars() ; // we might have a real position shift
+}
+
+void wxWindowMac::MacRepositionScrollBars()
+{
+ bool hasBoth = ( m_hScrollBar && m_hScrollBar->IsShown()) && ( m_vScrollBar && m_vScrollBar->IsShown()) ;
+ int adjust = hasBoth ? MAC_SCROLLBAR_SIZE - 1 : 0 ;
+
+ // get real client area
+
+ int width = m_width ;
+ int height = m_height ;
+
+ width -= MacGetLeftBorderSize() + MacGetRightBorderSize();
+ height -= MacGetTopBorderSize() + MacGetBottomBorderSize();
+
+ wxPoint vPoint(width-MAC_SCROLLBAR_SIZE, 0) ;
+ wxSize vSize(MAC_SCROLLBAR_SIZE, height - adjust) ;
+ wxPoint hPoint(0 , height-MAC_SCROLLBAR_SIZE ) ;
+ wxSize hSize( width - adjust, MAC_SCROLLBAR_SIZE) ;
+
+ int x = 0 ;
+ int y = 0 ;
+ int w = m_width ;
+ int h = m_height ;
+
+ MacClientToRootWindow( &x , &y ) ;
+ MacClientToRootWindow( &w , &h ) ;
+
+ wxWindowMac *iter = (wxWindowMac*)this ;
+
+ int totW = 10000 , totH = 10000;
+ while( iter )
+ {
+ if ( iter->IsTopLevel() )
+ {
+ totW = iter->m_width ;
+ totH = iter->m_height ;
+ break ;
+ }
+
+ iter = iter->GetParent() ;
+ }
+
+ if ( x == 0 )
+ {
+ hPoint.x = -1 ;
+ hSize.x += 1 ;
+ }
+ if ( y == 0 )
+ {
+ vPoint.y = -1 ;
+ vSize.y += 1 ;
+ }
+
+ if ( w-x >= totW )
+ {
+ hSize.x += 1 ;
+ vPoint.x += 1 ;
+ }
+
+ if ( h-y >= totH )
+ {
+ vSize.y += 1 ;
+ hPoint.y += 1 ;
+ }
+
+ if ( m_vScrollBar )
+ {
+ m_vScrollBar->SetSize( vPoint.x , vPoint.y, vSize.x, vSize.y , wxSIZE_ALLOW_MINUS_ONE);
+ }
+ if ( m_hScrollBar )
+ {
+ m_hScrollBar->SetSize( hPoint.x , hPoint.y, hSize.x, hSize.y, wxSIZE_ALLOW_MINUS_ONE);
+ }